C# ASP.NET – GridView : How to Keep Modified Data of Template Fields when Paging is Enabled?

2008-12-04

Today I had to take care of a problem of a certain company (CIS) that I consult. They had a problem of keeping the values modified in a template field of a gridview when the user moves from one page of the grid to another.

Template fields allow us to add custom columns into a datagrid or gridview. For an instance, we can add a grid column which has a textbox in each cell.

When the gridview has several pages, the gridview holds only the rows that are displayed in its Rows (collection) property. So we cannot access the values in other pages using the gridview.Rows property.

Then I thought that I could access the whole collection of rows by referring to the DataSource property of the gridview. This is a good idea because even though the gridview only shows the rows on the current page for display purposes, the data source property of the gridview holds the whole collection of rows in it.

ASP.Net clears the data source of any control at post backs. This is done to optimize performance of communications. In addition, the state of each control is stored in ViewState so it is not necessary to keep the datasource between postbacks.

The problem is worse now because I could not use both datasource and the direct row collection from the gridview.

Of course we can use either cache or session to keep the datasouce.


Session["DataSource"] = dt;  // store our table in the session

Then to synchronize (update) the datasource which was stored in the session we have to:

  • Go to each row in the gridview
  • Get the matching data row from the data table
  • Update the fields of the data table row

Since we have enabled paging for the gridview, we have to do this when ever user changes the page he/she is viewing to preserve his/her modifications.

So we need to write our code in the PageIndexChanging event handler of the GridView.

In my example I have two columns of the grid view called “ID” and “Name” and the name is the only template column I have used so I am only updating that column in the stored data table.

Code:


protected void GridView1_PageIndexChanging(object sender, GridViewPageEventArgs e)
{
// get the datatable from the
DataTable dTable = (DataTable)Session["dataSource"];

// now we will iterate through all rows of the grid
// then get the matching row from the data table (datasource of our grid)
// and append the updated data (by the user) to the selected data row
foreach (GridViewRow grv in this.GridView1.Rows)
{
// get the matching row from the data table
DataRow dRow = dTable.Rows.Find(this.GridView1.DataKeys[grv.RowIndex].Value);

// set values of updated columns : here I have only let the user to edit "Name" column
dRow["Name"] = ((TextBox)grv.FindControl("txtName")).Text;
}

// go to the next page of the grid
this.GridView1.PageIndex = e.NewPageIndex;
this.GridView1.DataSource = (DataTable)Session["DataSource"];
this.GridView1.DataBind();

// show the whole collection of data in the second grid (used only to display)
this.GridView2.DataSource = (DataTable)Session["DataSource"];
this.GridView2.DataBind();
}

I have used a different gridview called GridView2 to show the whole data source without paging.

So don’t misunderstand the use of GridView2 in the last section of the code. It’s used only do display the whole set of data (without paging).

I cannot upload my code into this blog because it seems like zip files are not supported. If you like to take a glance of my code just add a comment so I’ll send the code to you via email.

Download Source Code

Was this post helpful to you? How can I improve? – Your comment is highly appreciated!

Cassian Menol Razeek

This entry was posted in ASP.Net, C#.Net and tagged , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , . Bookmark the permalink.

0 Responses to C# ASP.NET – GridView : How to Keep Modified Data of Template Fields when Paging is Enabled?

  1. Deep says:

    Hi,

    I would like to go over you source code if possible. Could you please send i across?

    Thanks,

    Deep Kumar

  2. Bhanu says:

    Hi,
    Could you please send the source code of this. I need the gridview with checkboxes and textbox fields accross all the pages, I maintained their state when page index is changing in a session value , mean while am even binding those values in the Datatable when page index was changed.
    But the problem here when i submit the page, only 1st page values are saved into the datatable.
    Could u please send the source code of this so that i can check where did i go wrong in my code.

    Thanks,
    Bhanu Ananthoju

  3. Bhanu says:

    Hi Menol,

    Thanks for providing the source but my requirement is with checkboxes and textbox fields along with paging. The code is just maintaing the modified fields in session of datatable. My Grid has two columns of checkboxes, image and a textboxes, Am maintaining the states of all the checkboxes and textboxes value too while paging in an arraylist for checkboxes and hashtable for textbox values. But the problem here is I need save all fields values accross pages which are selected and value entered in the textbox.

    Thanks,
    Bhanu Ananthoju

  4. Opima Jude says:

    I like the article, its grate. i would love to check out the source code. thanks

  5. Anna says:

    do you know how to display a empty gridview?

  6. teena namlas says:

    Please send me source code.

  7. Naveen. says:

    Hi menol,
    hope u r ok and doing well.
    i need ur favour,that im struggling to keeping the 1st page template field values..while paging. could u plz forward the coding samples to me..

    Thank u
    Naveen.

  8. kemi says:

    Is is possible to have your source code? I’ve been searching for a solution to retaining values of textboxes in a gridview control.

    Thanks,
    Kemi

  9. Vikas Goyal says:

    Hi,

    I am having exactly the same problem as mentioned above(“How to Keep Modified Data of Template Fields when Paging is Enabled?”).Can you please provide me with the source code for this problem.
    Any help would be appriciated.
    Thanks in advance

    Regards
    Vikas Goyal

  10. Siva says:

    Please send me the code. I would like to go through it.

    Regards
    Siva

  11. Saravanan says:

    Hi Menol,

    I would like to view the Source Code, Kindly Send it.

    Thanks for your Help
    Saravanan

  12. Now all became clear, many thanks for the information. You have very much helped me.

  13. Shahrouz Ebadian says:

    Hi I would love to see the code for this as well.

    thanks!

  14. Gupta says:

    Hi,Can you please share the source code.

    Thanks

  15. sandip says:

    HI,
    i require code for above article , i am going with same situation.can you please send me code on above emil id

  16. Night says:

    Hi.

    Can you send me the code. I want to retain the textbox value in my gridview while paging.

    Thanks in advance

  17. Rekha says:

    Hi, Can you please send me the source code since I am confused about the column name used since we can’t have it for template fields. Need to retain textbox values during paging.

    Thanks in advance

  18. NagaLakshmi.k says:

    hi Menon,

    i am searching for this solution from many days but this was the apt post what u have sended thanku somuch and let me is tehre any personel blog having this kind of question and answer forum

    thnk u

  19. Mariam says:

    would you please send me the source code

  20. Lalitkumar annaldas says:

    Hello,
    I m facing the same and exact problem for my college project which has dynamically generated textbox in each row of datagrid with total records of more than 5 to 6 lakhs… It would be of a great help for me if you can mail me the code.
    Thanks.

Leave a Reply

Your email address will not be published. Required fields are marked *