天天看點

TreeView 動态綁定資料源

using System;

using System.Collections.Generic;

using System.Data;

using System.Linq;

using System.Web;

using System.Web.UI;

using System.Web.UI.WebControls;

namespace TreeViewWeb

{

    public partial class _Default : Page

    {

        protected void Page_Load(object sender, EventArgs e)

        {

            if (!IsPostBack)

            {

                TreeView1.ExpandDepth = 0;

                Bind_tv(Text_Table(), TreeView1.Nodes, null, "id", "parent_id", "name");

            }

        }

        protected void Bind_tv(DataTable dt, TreeNodeCollection tnc, string pid_val, string id, string pid, string text)

        {

            DataView dv = new DataView(dt);

            TreeNode tn;

            String filter = string.IsNullOrEmpty(pid_val) ? pid + " is null" : string.Format(pid + "='{0}'", pid_val);

            dv.RowFilter = filter;

            foreach (DataRowView drv in dv)

            {

                tn = new TreeNode();

                tn.Value = drv[id].ToString();

                tn.Text = drv[text].ToString();

                tnc.Add(tn);

                Bind_tv(dt, tn.ChildNodes, tn.Value, id, pid, text);//遞歸調用

            }

        }

        //資料表

        private DataTable Text_Table()

        {

            DataTable dt = new DataTable();

            DataRow dr;

            dt.Columns.Add(new DataColumn("id", typeof(Guid)));

            dt.Columns.Add(new DataColumn("parent_id", typeof(Guid)));

            dt.Columns.Add(new DataColumn("name", typeof(string)));

            dr = dt.NewRow();

            var node0 = dr[0] = Guid.NewGuid();

            dr[1] = DBNull.Value;

            dr[2] = "**公司";

            dt.Rows.Add(dr);

            string[] department = { "A部門", "B部門", "C部門" };

            for (int i = 0; i < department.Length; i++)

            {

                dr = dt.NewRow();

                var node1 = dr[0] = Guid.NewGuid();

                dr[1] = node0;

                dr[2] = department[i];

                dt.Rows.Add(dr);

                for (int j = 1; j < 4; j++)

                {

                    dr = dt.NewRow();

                    dr[0] = Guid.NewGuid();

                    dr[1] = node1;

                    dr[2] = j + "班組";

                    dt.Rows.Add(dr);

                }

            }

            return dt;

        }

    }

}