完善treeview控件的數據綁定功能


數據庫表設計  id  int

                         pid int  null

                         name nvarchar null

#region 綁定TreeView
    /// <summary>
    /// 綁定TreeView(利用TreeNodeCollection)
    /// </summary>
    /// <param name="tnc">TreeNodeCollection(TreeView的節點集合)</param>
    /// <param name="pid_val">父id的值</param>
    /// <param name="id">數據庫 id 字段名</param>
    /// <param name="pid">數據庫 父id 字段名</param>
    /// <param name="text">數據庫 文本 字段值</param>
    private void Bind_Tv(DataTable dt, TreeNodeCollection tnc, string pid_val, string id, string pid, string text)
    {
        DataView dv = new DataView(dt);//將DataTable存到DataView中,以便於篩選數據
        TreeNode tn;//建立TreeView的節點(TreeNode),以便將取出的數據添加到節點中
        //以下爲三元運算符,如果父id爲空,則爲構建“父id字段 is null”的查詢條件,否則構建“父id字段=父id字段值”的查詢條件
        string filter = string.IsNullOrEmpty(pid_val) ? pid + " is null" : string.Format(pid + "='{0}'", pid_val);
        dv.RowFilter = filter;//利用DataView將數據進行篩選,選出相同 父id值 的數據
        foreach (DataRowView drv in dv)
        {
            tn = new TreeNode();//建立一個新節點(學名叫:一個實例)
            tn.Value = drv[id].ToString();//節點的Value值,一般爲數據庫的id值
            tn.Text = drv[text].ToString();//節點的Text,節點的文本顯示
            tnc.Add(tn);//將該節點加入到TreeNodeCollection(節點集合)中
            Bind_Tv(dt, tn.ChildNodes, tn.Value, id, pid, text);//遞歸(反覆調用這個方法,直到把數據取完爲止)
        }
    }
    #endregion

我是從中間層直接返回的dataset 數據類型的集合,然後調用的代碼如下:

Operation operate = new Operation();
    protected void Page_Load(object sender, EventArgs e)
    {
        if (!Page.IsPostBack)
        {
            Bind_Tv(operate.Test().Tables[0], TreeView1.Nodes, null, operate.Test().Tables[0].Columns[0].ToString(), operate.Test().Tables[0].Columns[1].ToString(), operate.Test().Tables[0].Columns[2].ToString());
        }
    }


發佈了16 篇原創文章 · 獲贊 15 · 訪問量 4萬+
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章