Skip navigation

Persist Data Across Postbacks With View State

View state isn’t just for control development anymore. Use this technique to save data between postbacks.

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 control development. But page developers can use view state, too, to persist data across postbacks. To demonstrate, here's a page that hosts a DataGrid that supports paging and sorting. The sorting routine writes data into view state that lets the paging logic remember how the DataGrid was last sorted - an essential feature if sorts are to be retained when the DataGrid is paged:

 

<%@ Import Namespace="System.Data" %>

<%@ Import Namespace="System.Data.SqlClient" %>

 

<html>

  <body>

    <form runat="server">

      <asp:DataGrid RunAt="server" ID="MyDataGrid"

        AutoGenerateColumns="false" CellPadding="2"

        Font-Name="Verdana" Font-Size="8pt"

        AllowPaging="true" PageSize="16"

        OnPageIndexChanged="OnPage" Width="100%"

         AllowSorting="true" OnSortCommand="OnSort">

        <Columns>

          <asp:BoundColumn HeaderText="Product ID"

            DataField="productid"

            ItemStyle-HorizontalAlign="center" />

          <asp:BoundColumn HeaderText="Product Name"

             DataField="productname"

            SortExpression="productname ASC" />

          <asp:BoundColumn HeaderText="Units in Stock"

            DataField="unitsinstock"

            SortExpression="unitsinstock ASC" />

        </Columns>

        <HeaderStyle BackColor="teal" ForeColor="white"

          Font-Bold="true" HorizontalAlign="center" />

        <AlternatingItemStyle BackColor="beige" />

      </asp:DataGrid>

    </form>

  </body>

</html>

 

<script language="C#" runat="server">

void Page_Load (Object sender, EventArgs e)

{

    if (!IsPostBack) {

        SqlDataAdapter adapter = new SqlDataAdapter (

           "select productid, productname, unitsinstock " +

           "from products",

           "server=localhost;database=northwind;uid=sa"

        );

 

        DataSet ds = new DataSet ();

        adapter.Fill (ds);

        MyDataGrid.DataSource = ds;

        MyDataGrid.DataBind ();

    }

}

 

void OnPage (Object sender,

    DataGridPageChangedEventArgs e)

{

    MyDataGrid.CurrentPageIndex = e.NewPageIndex;

 

    SqlDataAdapter adapter = new SqlDataAdapter (

       "select productid, productname, unitsinstock " +

       "from products",

       "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 +=

            " order by " + exp;

    }

 

    DataSet ds = new DataSet ();

    adapter.Fill (ds);

    MyDataGrid.DataSource = ds;

     MyDataGrid.DataBind ();

}

 

void OnSort (Object sender,

    DataGridSortCommandEventArgs e)

{

    SqlDataAdapter adapter = new SqlDataAdapter (

       "select productid, productname, unitsinstock " +

       "from products order by " +

       e.SortExpression.ToString (),

       "server=localhost;database=northwind;uid=sa"

    );

 

    DataSet ds = new DataSet ();

    adapter.Fill (ds);

    MyDataGrid.DataSource = ds;

    MyDataGrid.DataBind ();

 

    // Remember how the grid was last sorted

    ViewState["SortExpression"] =

        e.SortExpression.ToString ();

}

</script>

 

Jeff Prosise is author of several books, including Programming Microsoft .NET (Microsoft Press). He also is a co-founder of Wintellect (http://www.wintellect.com), a software consulting and education firm that specializes in .NET. Contact Jeff at [email protected].

 

 

 

Hide comments

Comments

  • Allowed HTML tags: <em> <strong> <blockquote> <br> <p>

Plain text

  • No HTML tags allowed.
  • Web page addresses and e-mail addresses turn into links automatically.
  • Lines and paragraphs break automatically.
Publish