Persist Data Across Postbacks With View State
View state isn’t just for control development anymore. Use this technique to save data between postbacks.
October 30, 2009
Hot Tip
LANGUAGE: C#
ASP.NET VERSIONS:1.0 | 1.1
Persist Data Across Postbacks With View State
View state isn't just for control development anymore.Use this technique to save data between postbacks.
By Jeff Prosise
Many ASP.NET programmers associate view state with controldevelopment. But page developers can use view state, too, to persist dataacross postbacks. To demonstrate, here's a page that hosts a DataGrid thatsupports paging and sorting. The sorting routine writes data into view statethat lets the paging logic remember how the DataGrid was last sorted - anessential feature if sorts are to be retained when the DataGrid is paged:
<%@ Import Namespace="System.Data" %>
<%@ Import Namespace="System.Data.SqlClient" %>
AutoGenerateColumns="false" CellPadding="2" Font-Name="Verdana" Font-Size="8pt" AllowPaging="true" PageSize="16" OnPageIndexChanged="OnPage" Width="100%" AllowSorting="true"OnSortCommand="OnSort"> DataField="productid" ItemStyle-HorizontalAlign="center" /> DataField="productname" SortExpression="productname ASC" /> DataField="unitsinstock" SortExpression="unitsinstock ASC" /> Font-Bold="true" HorizontalAlign="center" />
void Page_Load (Object sender, EventArgs e) { if (!IsPostBack) { SqlDataAdapteradapter = new SqlDataAdapter ( "selectproductid, productname, unitsinstock " + "fromproducts", "server=localhost;database=northwind;uid=sa" ); DataSet ds = newDataSet (); adapter.Fill (ds); MyDataGrid.DataSource = ds; MyDataGrid.DataBind (); }} void OnPage (Object sender, DataGridPageChangedEventArgs e) { MyDataGrid.CurrentPageIndex = e.NewPageIndex; SqlDataAdapter adapter= new SqlDataAdapter ( "selectproductid, productname, unitsinstock " + "fromproducts", "server=localhost;database=northwind;uid=sa" ); // Apply the last sort(if any) object obj = ViewState["SortExpression"]; if (obj != null) { string exp =(string) obj; adapter.SelectCommand.CommandText += " orderby " + exp; } DataSet ds = newDataSet (); adapter.Fill (ds); MyDataGrid.DataSource= ds; MyDataGrid.DataBind ();} void OnSort (Object sender, DataGridSortCommandEventArgs e) { SqlDataAdapter adapter= new SqlDataAdapter ( "selectproductid, productname, unitsinstock " + "from productsorder by " + e.SortExpression.ToString(), "server=localhost;database=northwind;uid=sa" ); DataSet ds = newDataSet (); adapter.Fill (ds); MyDataGrid.DataSource= ds; MyDataGrid.DataBind(); // Remember how thegrid was last sorted ViewState["SortExpression"]= e.SortExpression.ToString ();}
Jeff Prosise isauthor of several books, including Programming Microsoft .NET (MicrosoftPress). He also is a co-founder of Wintellect (http://www.wintellect.com), asoftware consulting and education firm that specializes in .NET. Contact Jeffat [email protected].
About the Author
You May Also Like