为什么要用this.ViewState["ds"]=ds;

博客解释了在ASP.NET WebForm中使用ViewState["ds"]=ds的原因,由于ASP.NET变量在页面刷新后会丢失,使用ViewState可以保存数据集ds的状态,提高程序效率,避免每次请求都重新从数据库获取数据。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

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是指当前页面

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值