天天看點

為什麼要用this.ViewState["ds"]=ds;

using   System;  

  using   System.Collections;  

  using   System.ComponentModel;  

  using   System.Data;  

  using   System.Drawing;  

  using   System.Web;  

  using   System.Web.SessionState;  

  using   System.Web.UI;  

  using   System.Web.UI.WebControls;  

  using   System.Web.UI.HtmlControls;  

  using   Microsoft.Web.UI.WebControls;  

  using   System.Data.SqlClient;  

  namespace   TreeCS  

  {  

  ///    

  ///   WebForm1   的摘要說明  

  ///    

  public   class   WebForm1   :   System.Web.UI.Page  

  {  

  protected   Microsoft.Web.UI.WebControls.TreeView   TreeView1;  

  private   void   Page_Load(object   sender,   System.EventArgs   e)  

  {  

  //   定義資料庫連接配接  

  SqlConnection   CN   =   new   SqlConnection();  

  try    

  {  

  //初始化連接配接字元串  

  CN.ConnectionString=  

  "data   source=pmserver;initial   catalog=Benchmark;persist   security   info=False;user   id=sa;Password=sa;";  

  CN.Open();  

  SqlDataAdapter   adp   =   new   SqlDataAdapter("select   *   from   tbTree",CN);  

  DataSet   ds=new   DataSet();  

  adp.Fill(ds);  

  this.ViewState["ds"]=ds;    

  }  

  catch   (Exception   ex)  

  {  

  Session["Error"]   =   ex.ToString();  

  Response.Redirect("error.aspx");               //?跳轉 程式 的公共錯誤處理頁面  

  }  

  finally    

  {  

  CN.Close();  

  }  

  //調用遞歸函數,完成樹形結構的生成  

  AddTree(0,   (TreeNode)null);  

  }  

  //遞歸添加樹的節點  

  public   void   AddTree(int   ParentID,TreeNode   pNode)    

  {  

  DataSet   ds=(DataSet)   this.ViewState["ds"];    

  DataView   dvTree   =   new   DataView(ds.Tables[0]);  

  //過濾ParentID,得到目前的所有子節點  

  dvTree.RowFilter   =     "[PARENTID]   =   "   +   ParentID;  

  foreach(DataRowView   Row   in   dvTree)    

  {  

  TreeNode   Node=new   TreeNode()   ;  

  if(pNode   ==   null)    

  {         //添加根節點  

  Node.Text   =   Row["ConText"].ToString();  

  TreeView1.Nodes.Add(Node);  

  Node.Expanded=true;  

  AddTree(Int32.Parse(Row["ID"].ToString()),   Node);         //再次遞歸  

  }    

  else    

  {       //?添加目前節點的子節點  

  Node.Text   =   Row["ConText"].ToString();  

  pNode.Nodes.Add(Node);  

  Node.Expanded   =   true;  

  AddTree(Int32.Parse(Row["ID"].ToString()),Node);           //再次遞歸  

  }  

  }                                        

  }                          

  #region   Web   Form   Designer   generated   code  

  override   protected   void   OnInit(EventArgs   e)  

  {  

  //  

  //   CODEGEN該調用是   ASP.NET   Web   窗體 設計 器所必需的。  

  //  

  InitializeComponent();  

  base.OnInit(e);  

  }  

  ///   <summary>  

  ///設計器支援所需的方法   -   不要使用代碼編輯器修改  

  ///   此方法的 内容  

  ///   </summary>  

  private   void   InitializeComponent()  

  {          

  this.Load   +=   new   System.EventHandler(this.Page_Load);  

  }  

  #endregion  

  }  

  }   

這是一個TreeView的一個建立過程.其中為什麼要用this.ViewState["ds"]=ds;   

因為asp.net的變量沒有狀态,是以重新整理後值會丢失,需用ViewState來儲存狀态,在你的程式中就是儲存  

  資料集ds的狀态(this.ViewState["ds"]=ds;),下次通路時取出來(DataSet   ds=(DataSet)   this.ViewState["ds"];   ),這樣比重新連接配接資料庫擷取資料效率要高得多.

ViewState是頁面保持狀态變量!  

  如果你在一個頁面需要保持一個變量狀态不讓他丢失,那使用ViewState是一種 方法 。   

this是指目前頁面