天天看點

轉發 C#從資料庫動态邦定TreeView控件

1:建立資料庫   在SQL SERVER 2000裡建立一個表tbTree,表的結構設計如下: 列名 資料類型 描述 長度 主鍵 ID Int 節點編号 4 是 ParentID Int 父節點編号 4 ConText Nvarchar 我們要顯示的節點内容 50   在SQL SERVER 2000中建表的腳本:     CREATE TABLE [dbo].[tbTree] (  [ID] [int] NOT NULL ,  [Context] [nvarchar] (50) COLLATE Chinese_PRC_CI_AS NULL ,  [ParentID] [int] NULL ) ON [PRIMARY]   在表中添加如下記錄:   insert tbtree (ID,Context,ParentID) values ( 1,'中國',0) insert tbtree (ID,Context,ParentID) values ( 2,'北京',11) insert tbtree (ID,Context,ParentID) values ( 3,'天津',11) insert tbtree (ID,Context,ParentID) values ( 4,'河北省',1) insert tbtree (ID,Context,ParentID) values ( 5,'廣東省',1) insert tbtree (ID,Context,ParentID) values ( 6,'廣州',5) insert tbtree (ID,Context,ParentID) values ( 7,'四川省',1) insert tbtree (ID,Context,ParentID) values ( 8,'成都',7) insert tbtree (ID,Context,ParentID) values ( 9,'深圳',5) insert tbtree (ID,Context,ParentID) values ( 10,'石家莊',4) insert tbtree (ID,Context,ParentID) values ( 11,'遼甯省',1) insert tbtree (ID,Context,ParentID) values ( 12,'大連',11) insert tbtree (ID,Context,ParentID) values ( 13,'上海',1) insert tbtree (ID,Context,ParentID) values ( 14,'天河軟體園',6) insert tbtree (ID,Context,ParentID) values ( 15,'汕頭',5) **********************************************************************  2.添加一個新頁面,放置一個TreeView控件 3.頁面代碼如下:主要是用到了遞歸算法 DataSet ds = new DataSet();        private void Page_Load(object sender, System.EventArgs e)     {         if (!IsPostBack)         {             // 在此處放置使用者代碼以初始化頁面             SqlConnection CN = new SqlConnection();             try             {                 // 初始化連接配接字元串                 CN.ConnectionString = "Data Source=A21D1656E2B7442//SQL2000;Initial Catalog=xiazai;Integrated Security=True";                 CN.Open();                 // 添加指令,從資料庫中得到資料                 SqlCommand sqlCmd = new SqlCommand();                 sqlCmd.Connection = CN;                 sqlCmd.CommandText = "select * from tbTree";                 sqlCmd.CommandType = CommandType.Text;                 SqlDataAdapter adp = new SqlDataAdapter(sqlCmd);                 adp.Fill(ds);             }             catch (Exception ex)             {                 throw (ex);             }             finally             {                 CN.Close();             }             // 調用遞歸函數,完成樹形結構的生成             //tn2=AddTree(0, (TreeNode)null);             //TreeView1.Nodes.Add(tn2);             AddTree(0, (TreeNode)null);         }       }     public void AddTree(int ParentID, TreeNode pNode)     {         TreeNode tn1 = new TreeNode();         DataView dvTree = new DataView(ds.Tables[0]);         // 過濾ParentID,得到目前的所有子節點         dvTree.RowFilter = "[PARENTID] = " + ParentID;         foreach (DataRowView Row in dvTree)         {             if (pNode == null)             {    //'? 添加根節點                   tn1.Text = Row["ConText"].ToString();                 TreeView1.Nodes.Add(tn1);                 tn1.Expanded = true;                 AddTree(Int32.Parse(Row["ID"].ToString()), tn1);    // 再次遞歸             }             else             {   // 添加目前節點的子節點                 TreeNode tn2 = new TreeNode();                 tn2.Text = Row["ConText"].ToString();                 //pNode.Nodes.Add(tn2);                 pNode.ChildNodes.Add(tn2);                 tn1.Expanded = true;                 AddTree(Int32.Parse(Row["ID"].ToString()), tn2);    // 再次遞歸             }           }     }