当前位置: 移动技术网 > IT编程>网页制作>Html5 > TreeView控件无限级 一次性加载和异步加载剖析

TreeView控件无限级 一次性加载和异步加载剖析

2018年02月10日  | 移动技术网IT编程  | 我要评论
[html]  <%@ Page Language="C#" AutoEventWireup="true" CodeFil
[html] 

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

  

<html xmlns="https://www.w3.org/1999/xhtml">  

<head runat="server">  

    <title>TreeView一次性加载和异步加载</title>  

</head>  

<body>  

    <form id="form1" runat="server">  

    <p>  

        <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>  

    </p>  

    </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)  

        {  

            //一次性加载 适用于小数据量  

            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 一次性加载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  

}  

如您对本文有疑问或者有任何想说的,请点击进行留言回复,万千网友为您解惑!

相关文章:

验证码:
移动技术网