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是指目前頁面