• TreeView的异步延时加载


    TreeView的延时加载

    在使用TreeView控件的时候,如果数据量太大,这个TreeView控件加载会很慢,有时甚至加载失败,

    为了更好的使用TreeView控件加载大量的数据,采用异步延迟加载TreeView。

    在TreeView每个结点的前面都有个"+"号,点击这个”+“号触发的事件是OnTreeNodeExpanded="TreeView1_TreeNodeExpanded" ,在刚开始加载TreeView的时候,如果结点下面

    还有子节点的话,只加载一个子节点;在点击”+“号,触发OnTreeNodeExpanded事件的时候,再加载该结点下的

    所有子节点,这样速度就很快了。参考了“假面Wilson” 博文,并进行了功能增加。

    aspx代码

    <asp:TreeView ID="TreeView1" runat="server" Font-Size="Medium" OnTreeNodeExpanded="TreeView1_TreeNodeExpanded" 
    ForeColor="LightSlateGray" LeafNodeStyle-ForeColor="#3333ff" ShowLines="true" ExpandDepth="1"> <SelectedNodeStyle CssClass="selectNode" /> </asp:TreeView>

    aspx.cs代码

     1     private void LoadNewTree()
     2     {
     3         DataTable dtp = pagBLL.GetList(" superfuncid=0  order by sort asc").Tables[0];
     4         if (dtp.Rows.Count > 0)
     5         {
     6             //首先清除树型控件内的结点
     7             this.TreeView1.Nodes.Clear();
     8             for (int i = 0; i < dtp.Rows.Count; i++)
     9             {
    10 
    11                 //实例出一个结点
    12                 TreeNode Node = new TreeNode();
    13                 Node.Text = dtp.Rows[i]["funcname"].ToString();
    14                 Node.Value = dtp.Rows[i]["pagefuncid"].ToString();
    15                 Node.ToolTip = dtp.Rows[i]["funcurl"].ToString();
    16                 Node.ImageUrl = "../../" + dtp.Rows[i]["imageurl"].ToString(); 
    17                 this.TreeView1.Nodes.Add(Node);//增加父节点,这时直接往树TreeView1上加
    18                 this.LoadAddSign(Node.ChildNodes,Convert.ToInt32(dtp.Rows[i]["pagefuncid"].ToString()));
    19                 TreeView1.CollapseAll();
    20 
    21             }
    22         }
    23     }
     1     /// <summary>
     2     /// 用于加载显示 树形控件 +号的,加载下面的一个节点。
     3     /// </summary>
     4     /// <param name="Conn"></param>
     5     /// <param name="tn"></param>
     6     /// <param name="DeptId"></param>
     7     private void LoadAddSign( TreeNodeCollection tn, int DeptId) 
     8     {
     9         DataTable table = pagBLL.GetList(" superfuncid=" + DeptId + "  order by sort asc").Tables[0];
    10         if (table.Rows.Count > 0)
    11         {
    12             //加载"一个"1级节点,就是为了显示 + 号
    13             tn.Add(new TreeNode());
    14 
    15         }
    16     }
     1     /// <summary>
     2     /// 点击 + 号是节点展开事件
     3   /// 点击某个节点合并其他节点
     4     /// </summary>
     5     /// <param name="sender"></param>
     6     /// <param name="e"></param>
     7     protected void TreeView1_TreeNodeExpanded(object sender, TreeNodeEventArgs e)
     8     {
     9 
    10         TreeNode node = e.Node;
    11         //点击节点关闭其他节点
    12         TreeNodeCollection ts=null;
    13         if(node.Parent==null)
    14           {
    15                ts=((TreeView)sender).Nodes;
    16            }
    17          else
    18           {
    19                 ts=node.Parent.ChildNodes;
    20              }
    21 
    22           foreach(TreeNode item in ts)
    23          {
    24               if(item!=node)
    25                  {
    26                       item.Collapse();
    27                   }
    28              }
    29 
    30 
    31         if (node.Expanded == true)
    32         {
    33             string bm = e.Node.Value.ToString();
    34             DataTable table = pagBLL.GetList(" superfuncid=" + bm + "  order by sort asc").Tables[0];
    35 
    36             node.ChildNodes.Clear(); //清除之前加载的空节点。
    37             if (table.Rows.Count > 0)
    38             {
    39                 for (int i = 0; i < table.Rows.Count; i++)
    40                 {
    41                     TreeNode Node = new TreeNode();
    42                     Node.Text = table.Rows[i]["funcname"].ToString();
    43                     Node.Value = table.Rows[i]["pagefuncid"].ToString();
    44                     Node.ToolTip = table.Rows[i]["funcurl"].ToString();
    45                     Node.ImageUrl = "../../" + table.Rows[i]["imageurl"].ToString();
    46                     node.ChildNodes.Add(Node);//增加父节点,这时直接往树TreeView1上加
    47                     this.LoadAddSign(Node.ChildNodes, Convert.ToInt32(table.Rows[i]["pagefuncid"].ToString()));
    48                 }
    49 
    50             }
    51         }
    52 
    53     }

  • 相关阅读:
    iOS—UI —推送实现
    iOS—UI —懒加载
    iOS多线程和NSRunLoop概述
    ios安全性---AES加密
    iOS私有API
    iOS多线程 && Runloop
    iOS毛玻璃效果
    Swift -4-对象与类
    Swift -3-函数&闭包
    Swift -1- 简介&简单值&基本类型
  • 原文地址:https://www.cnblogs.com/softwaredeveloper/p/7813637.html
Copyright © 2020-2023  润新知