熱點推薦:
您现在的位置: 電腦知識網 >> 編程 >> .NET編程 >> 正文

ASP.NET ViewState 初探

2013-11-13 10:08:57  來源: .NET編程 
請看下面的示例要在 Web 頁上顯示一個項目列表而每個用戶需要不同的列表排序項目列表是靜態的因此可以將這些頁面綁定到相同的緩存數據集而排序順序只是用戶特定的 UI 狀態的一小部分ViewState 非常適合於存儲這種類型的值代碼如下
  
  [Visual Basic]
  <%@ Import Namespace=SystemData %>
  <HTML>
  <HEAD>
  <title>用於頁面 UI 狀態值的 ViewState/title>
  </HEAD>
  <body>
  <form runat=server>
  <H>
  在 ViewState 中存儲非控件狀態
  </H>
  <P>
  此示例將一列靜態數據的當前排序順序存儲在 ViewState 中<br>
  單擊列標題中的鏈接可按該字段排序數據<br>
  再次單擊該鏈接將按相反順序排序
  <br><br><br>
  <asp:datagrid id=DataGrid runat=server
  OnSortCommand=SortGrid BorderStyle=None BorderWidth=px
  BorderColor=#CCCCCC BackColor=White CellPadding= AllowSorting=True>
  <HeaderStyle FontBold=True ForeColor=White
  BackColor=#>
  </HeaderStyle>
  </asp:datagrid>
  </P>
  </form>
  </body>
  </HTML>
  <script runat=server>
  
   在 ViewState 中跟蹤 SortField 屬性
  Property SortField() As String
  
  Get
  Dim o As Object = ViewState(SortField)
  If o Is Nothing Then
  Return StringEmpty
  End If
  Return CStr(o)
  End Get
  
  Set(Value As String)
  If Value = SortField Then
   與當前排序文件相同切換排序方向
  SortAscending = Not SortAscending
  End If
  ViewState(SortField) = Value
  End Set
  
  End Property
  
   在 ViewState 中跟蹤 SortAscending 屬性
  Property SortAscending() As Boolean
  
  Get
  Dim o As Object = ViewState(SortAscending)
  If o Is Nothing Then
  Return True
  End If
  Return CBool(o)
  End Get
  
  Set(Value As Boolean)
  ViewState(SortAscending) = Value
  End Set
  
  End Property
  
  Private Sub Page_Load(sender As Object e As EventArgs) Handles MyBaseLoad
  
  If Not PageIsPostBack Then
  BindGrid()
  End If
  
  End Sub
  
  Sub BindGrid()
  
   獲取數據
  Dim ds As New DataSet()
  dsReadXml(ServerMapPath(TestDataxml))
  
  Dim dv As New DataView(dsTables())
  
   應用排序過濾器和方向
  dvSort = SortField
  If Not SortAscending Then
  dvSort += DESC
  End If
  
   綁定網格
  DataGridDataSource = dv
  DataGridDataBind()
  
  End Sub
  
  Private Sub SortGrid(sender As Object e As DataGridSortCommandEventArgs)
  DataGridCurrentPageIndex =
  SortField = eSortExpression
  BindGrid()
  End Sub
  
  </script>
  
  [C#]
  <%@ Page Language=C# %>
  <%@ Import Namespace=SystemData %>
  <HTML>
  <HEAD>
  <title>用於頁面 UI 狀態值的 ViewState</title>
  </HEAD>
  <body>
  <form runat=server>
  <H>
  在 ViewState 中存儲非控件狀態
  </H>
  <P>
  此示例將一列靜態數據的當前排序順序存儲在 ViewState 中<br>
  單擊列標題中的鏈接可按該字段排序數據<br>
  再次單擊該鏈接將按相反順序排序
  <br><br><br>
  <asp:datagrid id=DataGrid runat=server OnSortCommand=SortGrid
  BorderStyle=None BorderWidth=px BorderColor=#CCCCCC
  BackColor=White CellPadding= AllowSorting=True>
  <HeaderStyle FontBold=True ForeColor=White BackColor=#>
  </HeaderStyle>
  </asp:datagrid>
  </P>
  </form>
  </body>
  </HTML>
  <script runat=server>
  
  // 在 ViewState 中跟蹤 SortField 屬性
  string SortField {
  
  get {
  object o = ViewState[SortField];
  if (o == null) {
  return StringEmpty;
  }
  return (string)o;
  }
  
  set {
  if (value == SortField) {
  // 與當前排序文件相同切換排序方向
  SortAscending = !SortAscending;
  }
  ViewState[SortField] = value;
  }
  }
  
  // 在 ViewState 中跟蹤 SortAscending 屬性
  bool SortAscending {
  
  get {
  object o = ViewState[SortAscending];
  if (o == null) {
  return true;
  }
  return (bool)o;
  }
  
  set {
  ViewState[SortAscending] = value;
  }
  }
  
  void Page_Load(object sender EventArgs e) {
  
  if (!PageIsPostBack) {
  BindGrid();
  }
  }
  
  void BindGrid() {
  
  // 獲取數據
  DataSet ds = new DataSet();
  dsReadXml(ServerMapPath(TestDataxml));
  
  DataView dv = new DataView(dsTables[]);
  
  // 應用排序過濾器和方向
  dvSort = SortField;
  if (!SortAscending) {
  dvSort += DESC;
  }
  
  // 綁定網格
  DataGridDataSource = dv;
  DataGridDataBind();
  }
  
  void SortGrid(object sender DataGridSortCommandEventArgs e) {
  
  DataGridCurrentPageIndex = ;
  SortField = eSortExpression;
  BindGrid();
  }
  
  </script>
  
  下面是上述兩個代碼段中引用的 testdataxml 的代碼
  
  <?xml version= standalone=yes?>
  <NewDataSet>
  <Table>
  <pub_id></pub_id>
  <pub_name>New Moon Books</pub_name>
  <city>Boston</city>
  <state>MA</state>
  <country>USA</country>
  </Table>
  <Table>
  <pub_id></pub_id>
  <pub_name>Binnet & Hardley</pub_name>
  <city>Washington</city>
  <state>DC</state>
  <country>USA</country>
  </Table>
  <Table>
  <pub_id></pub_id>
  <pub_name>Algodata Infosystems</pub_name>
  <city>Berkeley</city>
  <state>CA</state>
  <country>USA</country>
  </Table>
  <Table>
  <pub_id></pub_id>
  <pub_name>Five Lakes Publishing</pub_name>
  <city>Chicago</city>
  <state>IL</state>
  <country>USA</country>
  </Table>
  <Table>
  <pub_id></pub_id>
  <pub_name>Ramona Publishers</pub_name>
  <city>Dallas</city>
  <state>TX</state>
  <country>USA</country>
  </Table>
  <Table>
  <pub_id></pub_id>
  <pub_name>GGG&G</pub_name>
  <city>Muenchen</city>
  <country>Germany</country>
  </Table>
  <Table>
  <pub_id></pub_id>
  <pub_name>Scootney Books</pub_name>
  <city>New York</city>
  <state>NY</state>
  <country>USA</country>
  </Table>
  <Table>
  <pub_id></pub_id>
  <pub_name>Lucerne Publishing</pub_name>
  <city>Paris</city>
  <country>France</country>
  </Table>
  </NewDataSet>

From:http://tw.wingwit.com/Article/program/net/201311/12702.html
    推薦文章
    Copyright © 2005-2013 電腦知識網 Computer Knowledge   All rights reserved.