ASP.NET

GridView Pagination issue when dynamically added….!

Posted on Updated on

Hello ASP.NET Developers… Today I came across a small issue which killed large amount of my development time. The issue was a little tricky between the lines of code. I have an ASP.NET gridview which is dynamically (on the fly) created on my page. When I am inserting 2 lines of code  just for allowing the gridview pagination, code breaks at runtime giving  a NullReferenceException .

Cause of the issue :  i was adding the dynamically created  gridview(object) into page’s control collection after the databinding. This works fine if there is no pagination code added. But if there is code which allows pagination for the dynamically added gridview, this gridview should be added to the page’s control collection before the databinding.

Please see the below mentioned code blocks for the difference.

This piece of code will give the Null Reference Exception:

GridView gvDepartment = new GridView ();
gvDepartment.ID = "gvDepartment";

gvDepartment.AllowPaging = true;
gvDepartment.PageSize = 4;

gvDepartment.DataSource = GetDepartmentRows ();
gvDepartment.DataBind ();

this.form1.Controls.Add ( gvDepartment );

This is the perfect code:

        GridView gvDepartment = new GridView ();
        gvDepartment.ID = "gvDepartment";

        gvDepartment.AllowPaging = true;
        gvDepartment.PageSize = 4;

	/* Need to add gridview into controls collection before databind,if there is pagination */
        this.form1.Controls.Add ( gvDepartment );

        gvDepartment.DataSource = GetDepartmentRows ();
        gvDepartment.DataBind ();

NB: Obviously PageIndexChanging Event handling is needed. But this post is about the exception thrown while dynamically adding gridview. So the readers please keep in mind to add pageindexchanging event should be handled.
I hope this post helped you or given a nice thought. Thanks for reading.Please comment if you feel any issues on the same.

How to send XML data to a Webpage using “POST” Method.

Posted on Updated on

Recently I came across an interesting requirement to send XML data to a particular URL using POST, means i need to post some XML data to a URL. I came to answer within a couple hrs of “googling” and R&D. Below mentioned is the sample code that I have created to explain the technique. Scenario defines here explains data sending between 2 websites, one is requestor website, which send xml POST data and other is responder website, which collect data from requestor website.

The step by step instructions are as follows.

  1. Open a Microsoft Visual Studio instance and from the file menu select the option to create ASP.NET website/web application. Create two websites using this option and name these websites with user-friendly names such as Requestor and Responder. For easier developer view make these websites under a single visual studio solution.
  2. By default there will be a default.aspx page inside each website. Just delete that page, we can create new pages for our sample
  3. Add a new page to the Requestor website. We can name this page as requestor.aspx. Our aim is to post XML data from requestor.aspx to the responder.aspx of the Responder website. Using the responder page we will save that XML data to a text (.txt) file. Add a new page to the Responder website name this page as requestor.aspx.
  4. Host Responder website on your local IIS.
  5. Select the Requestor website. Design the Requestor page as shown on the image below.

Page design of the Requestor page
One main Multiline textbox for XML Data, a Textbox for entering  URL to send the XML data and  a Button

6.Handle the click event of the button, add the following the piece of code to that event.

protected void btnPostXml_Click(object sender, EventArgs e)
{
        System.Net.WebRequest req = null;
        System.Net.WebResponse rsp = null;
        try
        {
            string uri = txtURI.Text;
            req = System.Net.WebRequest.Create ( uri );
            req.Method = "POST";
            req.ContentType = "text/xml";
            System.IO.StreamWriter writer = new System.IO.StreamWriter ( req.GetRequestStream () );
            writer.WriteLine (  txtXMLData.Text );
            writer.Close ();
            rsp = req.GetResponse ();
        }
        catch
        {
            throw;
        }
        finally
        {
            if (req != null) req.GetRequestStream ().Close ();
            if (rsp != null) rsp.GetResponseStream ().Close ();
        }
}

7.Select the Responder website. Take the Page Load event of the Responder.aspx page. Add the following piece of code to the Load event.

protected void Page_Load(object sender, EventArgs e)
    {
        Page.Response.ContentType = "text/xml";
        System.IO.StreamReader reader = new System.IO.StreamReader ( Page.Request.InputStream );
        String xmlData = reader.ReadToEnd ();
        System.IO.StreamWriter SW;
        SW = File.CreateText ( Server.MapPath(".")+@"\"+ Guid.NewGuid () + ".txt" );
        SW.WriteLine ( xmlData );
        SW.Close ();
    }

Here we are reading the stream of data from the page request and writing that data to a text file.
Note: On this sample i have made the ValidateRequest=”false” for the requestor to accept the XML Data on the form post.

This methodology can also be used as a CALLBACK to a URL with some data post.

Take the code sample(VS 2010 needed)

Thanks for reading this post. Please comment if you have any issues/doubt with the code.