使用ASP.NET Treeview显示数据库里DataTable里的数据。

<%@ Page Language="C#" AutoEventWireup="true"    %>
<%@ Import Namespace="System.Data" %>
<!DOCTYPE html>
<script runat="server">

    protected void Page_Load(object sender, EventArgs e)
    {

        DataTable data = GetDataSource(); 
        BindTreeView(data, tree1.Nodes, "0", "id", "pid", "name");              //绑定树控件 
    }


     



    public void BindTreeView(DataTable dt, TreeNodeCollection tnc, string pid_val, string id_Name, string pid_Name, string text_Name)
    {
        DataView dv = new DataView(dt);//将DataTable存到DataView中,以便于筛选数据  
        TreeNode tn;//建立TreeView的节点(TreeNode),以便将取出的数据添加到节点中  
        //以下为三元运算符,如果父id为空,则为构建“父id字段 is null”的查询条件,否则构建“父id字段=父id字段值”的查询条件  
        string filter = string.IsNullOrEmpty(pid_val) ? pid_Name + " is null" : string.Format(pid_Name + "=‘{0}‘", pid_val);
        dv.RowFilter = filter;//利用DataView将数据进行筛选,选出相同 父id值 的数据  
        foreach (DataRowView drv in dv)
        {
            tn = new TreeNode();//建立一个新节点  
            tn.Value = drv[id_Name].ToString();//节点的Value值,一般为数据库的id值  
            tn.Text = drv[text_Name].ToString();//节点的Text,节点的文本显示  
            tnc.Add(tn);//将该节点加入到TreeNodeCollection(节点集合)中  
            BindTreeView(dt, tn.ChildNodes, tn.Value, id_Name, pid_Name, text_Name);//递归(反复调用这个方法,直到把数据取完为止)  
        }
    } 




    private DataTable GetDataSource()
    {
        /*ID是列主键,PID是字段,name是字段名*/
        DataTable dt = new DataTable();
        DataRow dr;
        dt.Columns.Add(new DataColumn("id",  typeof(int)));//id列 类型guid  
        dt.Columns.Add(new DataColumn("pid", typeof(int)));//父id列 类型guid  
        dt.Columns.Add(new DataColumn("name", typeof(string)));//名称列 类型string  
       
        
        dr = dt.NewRow();
        dr["id"] = "1";
        dr["pid"] = "0";
        dr["name"] = "启明星工作室";
        dt.Rows.Add(dr);


        dr = dt.NewRow();
        dr["id"] = 2;
        dr["pid"] = "1";
        dr["name"] = "人事部";
        dt.Rows.Add(dr);


        dr = dt.NewRow();
        dr["id"] = 3;
        dr["pid"] = "1";
        dr["name"] = "财务";
        dt.Rows.Add(dr);


        dr = dt.NewRow();
        dr["id"] = 4;
        dr["pid"] = "2";
        dr["name"] = "财务";
        dt.Rows.Add(dr);
        
        
        return dt;
    }  
</script>


<html xmlns="http://www.w3.org/1999/xhtml">
<head runat="server">
    <title></title>
</head>
<body>
    <form id="form1" runat="server">
    <div>
    <asp:TreeView runat="server" ID="tree1"   ShowLines="true" ImageSet="Arrows">
       

        
    </asp:TreeView>
    </div>
    </form>
</body>
</html>

相关推荐