表中用来标记父记录的字段 &lt,TreeView三次性加载和异步加载&lt

///   <summary>
        ///   绑定生成2个有树结构的下拉菜单
        ///   </summary>
        ///   <param   name= “dtNodeSets “> 菜单记录数据所在的表
</param>
        ///   <param   name= “strParentColumn “>
表中用来标记父记录的字段 </param>
        ///   <param   name= “strRootValue “>
第①层记录的父记录值(平日设计为0大概-1要么Null)用来代表从没父记录
</param>
        ///   <param   name= “strIndexColumn “>
索引字段,也正是放在DropDownList的Value里面包车型客车字段 </param>
        ///   <param   name= “strTextColumn “>
展现文本字段,也正是放在DropDownList的Text里面的字段 </param>
        ///   <param   name= “drpBind “> 必要绑定的DropDownList
</param>
        ///   <param   name= “i “> 用来控制缩入量的值,请输入-1
</param>
        private void MakeTree(DataTable dtNodeSets, string
strParentColumn, string strRootValue, string strIndexColumn, string
strTextColumn, DropDownList drpBind, int i)
        {
            //每向下一层,多2个缩入单位
            i++;

[html] 

            DataView dvNodeSets = new DataView(dtNodeSets);
            dvNodeSets.RowFilter = strParentColumn + “= ” +
strRootValue;

<%@ Page Language=”C#” AutoEventWireup=”true”
CodeFile=”MSTreeView.aspx.cs” Inherits=”MSTreeView” %>  

            string strPading = ” “;     //缩入字符

  

            //通过i来支配缩入字符的长度,笔者那里设定的是2个全角的空格
            for (int j = 0; j < i; j++)
                strPading +=
“ ”;//假如要加进缩入的长短,改成五个全角的空格就能够了

<html xmlns=”http://www.w3.org/1999/xhtml"&gt;  

            foreach (DataRowView drv in dvNodeSets)
            {
                //TreeNode tnNode = new TreeNode();
                ListItem li = new ListItem(strPading + “├ ” +
drv[strTextColumn].ToString(), drv[strIndexColumn].ToString());
                drpBind.Items.Add(li);
                MakeTree(dtNodeSets, strParentColumn,
drv[strIndexColumn].ToString(), strIndexColumn, strTextColumn,
drpBind, i);
            }

<head runat=”server”>  

            //递归截至,要重回上一层,所以缩入量收缩二个单位
            i–;
        }

    <title>TreeView壹回性加载和异步加载</title>  

MakeTree(dt, “parentid”, “0”, “id”, “name”, ddlSite, -1);
下拉框绑定树形结构数据库表设计形式(0代表根目录,香港 1
象征是中华夏族民共和国下边包车型地铁子节点,1是 中中原人民共和国 id编号)

</head>  

id   name    parentid

-1  中国       0
-2  北京      -1
-3  广东      -1
-4  美国       0
-5  潮州      -3
-6  汕头      -3
-7  夏威夷    -4

<body>  

    <form id=”form1″ runat=”server”>  

    <div>  

        <asp:ScriptManager ID=”ScriptManager1″ runat=”server”>  

        </asp:ScriptManager>  

        <asp:UpdatePanel ID=”UpdatePanel1″ runat=”server”>  

            <ContentTemplate>  

                <table>  

                    <tr>  

                        <td style=”width:200px; height:600px;
vertical-align:top;”>  

                            三回性加载<br />  

                            <asp:TreeView ID=”TreeView2″
runat=”server” ShowLines=”true”>  

                            </asp:TreeView>  

                        </td>  

                        <td style=”width:200px; height:600px;
vertical-align:top;”>  

                            异步加载<br />  

                            <asp:TreeView ID=”TreeView1″
runat=”server”  ShowLines=”true”  

                               
OnTreeNodePopulate=”TreeView1_TreeNodePopulate”
EnableClientScript=”true” ExpandDepth=”0″>  

                            </asp:TreeView>  

                        </td>  

                    </tr>  

                </table>  

            </ContentTemplate>  

        </asp:UpdatePanel>  

    </div>  

    </form>  

</body>  

</html>  

[csharp]  

using System;  

using System.Collections.Generic;  

using System.Linq;  

using System.Web;  

using System.Data;  

using System.Web.UI;  

using System.Web.UI.WebControls;  

  

public partial class MSTreeView : System.Web.UI.Page  

{  

  

    protected DataTable dt = createDT();  

    protected void Page_Load(object sender, EventArgs e)  

    {  

        if (!IsPostBack)  

        {  

            //3回性加载 适用于小数据量  

            TreeView2.Nodes.Clear();  

            CreateLevelTreeView(TreeView2, dt, “module_name”,
“module_id”, “module_fatherid”);  

            TreeView2.ExpandAll();  

  

            //异步加载 适用于大数据量  

            TreeView1.Nodes.Clear();  

            DataView dv = dt.DefaultView;  

            dv.RowFilter = ” module_fatherid=’0′ “;              

            Bind_Root(dv.ToTable(), “module_name”, “module_id”);  

        }  

  

    }  

 

    #region 异步加载TreeView  

    /// <summary>  

    /// 绑定父节点  

    /// </summary>  

    /// <param name=”dt”>数据源</param>  

    /// <param name=”text”>text</param>  

    /// <param name=”value”>value</param>  

    private void Bind_Root(DataTable dt,string text,string value)  

    {  

        TreeNode tn;  

        for (int i = 0; i < dt.Rows.Count; i++)  

        {  

            tn = new TreeNode();  

            tn.Value = dt.Rows[i][value].ToString();  

            tn.Text = dt.Rows[i][text].ToString();  

            //判断是或不是有子节点  

            if (Check_Child(tn.Value))  

            {  

                tn.PopulateOnDemand = true;  

                tn.Expanded = false;  

            }  

            TreeView1.Nodes.Add(tn);  

        }  

    }  

  

    /// <summary>  

    /// 绑定节点的子节点  

    /// </summary>  

    /// <param name=”treeNode”></param>  

    /// <param name=”p”></param>  

    private void Bind_Child(TreeNode treeNode, string fatherID, string
text, string value)  

    {  

        TreeNode tn;  

        DataRow[] drExist = dt.Select(” module_fatherid= ‘” +
fatherID + “‘”);  

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

        {  

            tn = new TreeNode();  

            tn.Value = drExist[i][value].ToString();  

            tn.Text = drExist[i][text].ToString();  

            //检验是否有子节点  

            if (Check_Child(tn.Value))  

            {  

                tn.PopulateOnDemand = true;  

                tn.Expanded = false;  

            }  

            treeNode.ChildNodes.Add(tn);  

        }  

    }  

  

    /// <summary>  

    /// 判断是或不是有子节点  

    /// </summary>  

    /// <param name=”pre_Val”>父类ID</param>  

    /// <returns></returns>  

    private bool Check_Child(string pre_Val)  

    {  

        DataRow[] dr = dt.Select(” module_fatherid= ‘” + pre_Val +
“‘”);  

        bool exist = (dr.Length > 0) ? true : false;  

        return exist;  

    }  

  

  

    protected void TreeView1_TreeNodePopulate(object sender,
TreeNodeEventArgs e)  

    {  

        Bind_Child(e.Node, e.Node.Value.ToString(), “module_name”,
“module_id”);  

    }  

    #endregion  

 

    #region 3遍性加载TreeView  

    /// <summary>     

    /// 创立无限分级目录树TreeView     

    /// </summary>     

    /// <param name=”treeview”>TreeView空间</param>     

    /// <param name=”dt”>数据源DataTable</param>     

    /// <param name=”text”>text字段</param>     

    /// <param name=”value”>value字段</param>     

    /// <param name=”parentid”>深度字段 例如parentid</param>
    

    public static void CreateLevelTreeView(TreeView treeview, DataTable
dt, string text, string value, string parentid)  

    {  

        DataView dv = dt.DefaultView;  

        dv.RowFilter = parentid + ” =’0′”;  

        foreach (DataRowView drv in dv)  

        {  

            TreeNode node = new TreeNode();  

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

            node.Value = drv[value].ToString();  

            node.Expanded = false;  

            treeview.Nodes.Add(node);  

            CreatTreeViewChildNode(dv, node, text, value, parentid);  

        }  

    }  

  

    /// <summary>     

    /// 递归绑定子节点     

    /// </summary>     

    /// <param name=”dv”>源DataView</param>     

    /// <param name=”parentNode”>当前节点</param>     

    /// <param name=”text”>text字段</param>     

    /// <param name=”value”>value字段</param>     

    /// <param name=”parentid”>深度字段 例如parentid</param>
    

    private static void CreatTreeViewChildNode(DataView dv, TreeNode
parentNode, string text, string value, string parentid)  

    {  

        dv.RowFilter = parentid + ” ='” + parentNode.Value + “‘ “;  

        foreach (DataRowView row in dv)  

        {  

            TreeNode replyNode = new TreeNode();  

            replyNode.Text = row[text].ToString();  

            replyNode.Value = row[value].ToString();  

            replyNode.Expanded = false;  

            parentNode.ChildNodes.Add(replyNode);  

            CreatTreeViewChildNode(dv, replyNode, text, value,
parentid);  

        }  

    }    

    #endregion  

 

    #region 创造数量  

    private static DataTable createDT()  

    {  

        DataTable dt = new DataTable();  

        dt.Columns.Add(“module_id”);  

        dt.Columns.Add(“module_name”);  

        dt.Columns.Add(“module_fatherid”);  

        dt.Columns.Add(“module_url”);  

        dt.Columns.Add(“module_order”);  

  

        dt.Rows.Add(“C1”, “全国”, “0”, “”, “1”);  

        dt.Rows.Add(“M01”, “广东”, “C1”, “”, “1”);  

  

        dt.Rows.Add(“M0101”, “深圳”, “M01”, “”, “100”);  

        dt.Rows.Add(“M010101”, “南山区”, “M0101”, “”, “1000”);  

        dt.Rows.Add(“M010102”, “罗湖区”, “M0101”, “”, “1001”);  

        dt.Rows.Add(“M010103”, “福田区”, “M0101”, “”, “1002”);  

        dt.Rows.Add(“M010104”, “宝安区”, “M0101”, “”, “1003”);  

        dt.Rows.Add(“M010105”, “龙岗区”, “M0101”, “”, “1004”);  

  

        dt.Rows.Add(“M01010301”, “上梅林”, “M010103”, “”, “1002001”);  

        dt.Rows.Add(“M01010302”, “下梅林”, “M010103”, “”, “1002002”);  

        dt.Rows.Add(“M01010303”, “车公庙”, “M010103”, “”, “1002003”);  

        dt.Rows.Add(“M01010304”, “竹子林”, “M010103”, “”, “1002004”);  

        dt.Rows.Add(“M01010305”, “八卦岭”, “M010103”, “”, “1002005”);  

        dt.Rows.Add(“M01010306”, “华强北”, “M010103”, “”, “1002006”);  

  

        dt.Rows.Add(“M0102”, “广州”, “M01”, “”, “101”);  

        dt.Rows.Add(“M010201”, “越秀区”, “M0102”, “”, “1105”);  

        dt.Rows.Add(“M010202”, “海珠区”, “M0102”, “”, “1106”);  

        dt.Rows.Add(“M010203”, “天河区”, “M0102”, “”, “1107”);  

        dt.Rows.Add(“M010204”, “白云区”, “M0102”, “”, “1108”);  

        dt.Rows.Add(“M010205”, “黄埔区”, “M0102”, “”, “1109”);  

        dt.Rows.Add(“M010206”, “荔湾区”, “M0102”, “”, “1110”);  

        dt.Rows.Add(“M010207”, “罗岗区”, “M0102”, “”, “1111”);  

        dt.Rows.Add(“M010208”, “南沙区”, “M0102”, “”, “1112”);  

        return dt;  

    }  

    #endregion  

}  

http://www.bkjia.com/HTML5/477172.htmlwww.bkjia.comtruehttp://www.bkjia.com/HTML5/477172.htmlTechArticle\[html\] %@ Page Language=C#
AutoEventWireup=true CodeFile=MSTreeView.aspx.cs Inherits=MSTreeView %
html xmlns=http://www.w3.org/1999/xhtml head runat=server
titleTreeView二遍性加载…

相关文章