天天看點

C#遞歸方法把資料表加載到treeview控件(C/S和B/S)

C#遞歸方法把資料表加載到treeview控件(bs和CS方法都有),先看一下資料庫的結構:

表結構如下所示:

Num                   Name                                 fatherNum       BZ

01                      總節點                                      0              ......

0101                   第一個一級節點                          01             ......

010101               第一個一級節點的第一個支節點       0101         ......

010102               第一個一級節點的第二個支節點       0101         ......

010103               第一個一級節點的第三個支節點       0101         ......

0102                   第二個一級節點                          01             ......

010201               第二個一級節點的第一個支節點       0102         ......

0103                   第三個一級節點                          01             ......

010301               第三個一級節點的第一個支節點       0103         ......

01030101           第三個一級節點的第一個支節點       010301      ......

使用遞歸方法 把資料表加載到treeview後,

怎樣根據treeview上的某個節點知道它在資料庫表上對應的主鍵值?

這是遞歸方法

C/S:

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

        {

           this.treeView1.Nodes.Clear();

            SDesktopClient cli = new SDesktopClient("EndPoint_WsText");//調用wcf中的方法得到資料

            DataSet ds = cli.GetCompany();//得到查詢的dataset資料集

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

            AddTree(0, (TreeNode)null,dvTree);

        }

    public void AddTree(int ParentID, TreeNode pNode,DataView d)

        {

            TreeNode tn1 = new TreeNode();

            DataView dvTree = d;

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

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

            foreach (DataRowView Row in dvTree)

            {

                if (pNode == null)

                {    //添加根節點

                    tn1.Text = Row["Area_Name"].ToString();

                    tn1.Tag = Row["id"].ToString();

                    treeView1.Nodes.Add(tn1);

                    tn1.Expand();

                    //  tn1.IsExpanded = true;

                    AddTree(Int32.Parse(Row["id"].ToString()), tn1,dvTree);    //再次遞歸

                }

                else

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

                    TreeNode tn2 = new TreeNode();

                    tn2.Text = Row["Area_Name"].ToString();

                    tn2.Tag = Row["id"].ToString();

                    // tn2.ShowCheckBox = true;

                    pNode.Nodes.Add(tn2);

                    tn1.Expand();

                    // tn1.IsExpanded = true;

                    AddTree(Int32.Parse(Row["id"].ToString()), tn2,dvTree);    //再次遞歸

                }

            }

        }

B/S方法如下:

    protected void RadioButtonList1_SelectedIndexChanged(object sender, EventArgs e)

    {

        DataSet ds = new DataSet();

        DBUtility.SqlHelper sql = new DBUtility.SqlHelper();

        string treeSql = "";

        if (RadioButtonList1.SelectedValue.Equals("0"))//以部門選擇可以閱讀人員

        {

            this.CheckBoxList1.Visible = false;

            this.TreeView1.Visible = true;

            treeSql = "select *  from Department";

            ds = sql.ExecuteQuery(System.Configuration.ConfigurationManager.ConnectionStrings["DB"].ConnectionString, CommandType.Text, treeSql.ToString(), null);得到查詢的dataset資料集

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

            this.ViewState["ds"] = ds;

            this.TreeView1.Nodes.Clear();

             AddTree(0, (TreeNode)null);

        }

    //遞歸添加樹的節點 參數ParentID為樹的最大父結點

    public void AddTree(int ParentID, TreeNode pNode)

    {

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

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

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

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

        //循環遞歸

        foreach (DataRowView Row in dvTree)

        {

            //聲明節點

            TreeNode Node = new TreeNode();

            綁定超級連結

            //Node.NavigateUrl = "List.aspx?Item_ID=" + Row["Item_ID"].ToString();

            //開始遞歸

            if (pNode == null)

            {

                //添加根節點

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

                Node.Value = Row["ID"].ToString();

                TreeView1.Nodes.Add(Node);

                //Node.Expanded = true; //節點狀态展開

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

            }

            else

            {

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

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

                Node.Value = Row["ID"].ToString();

                pNode.ChildNodes.Add(Node);

                //pNode.Nodes.Add(Node);

                //Node.Expanded = true; //節點狀态展開

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

            }

        }

    }