asp.Nettreeview非同期ロード

10914 ワード

TreeViewコントロールを使用する場合、データ量が大きすぎると、このTreeViewコントロールのロードが遅くなり、ロードに失敗することもあります.
TreeViewコントロールを使用して大量のデータをロードするために、非同期遅延ロードTreeViewを使用します.
TreeViewの各ノードの前に「+」の番号があります.これをクリックして「+」の番号がトリガーされるイベントはOnTreeNodeExpanded=「TreeView 1_TreeNodeExpanded」です.TreeViewのロードを開始したばかりの頃、ノードの下に
サブノードがある場合は、サブノードを1つだけロードします.「+」をクリックし、OnTreeNodeExpandedイベントをトリガーしたときに、そのノードの下の
すべてのサブノード、これで速度が速くなります.
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コード
#region wsw        
    private void LoadNewTree()
    {
        DataTable dtp = pagBLL.GetList(" superfuncid=0  order by sort asc").Tables[0];
        if (dtp.Rows.Count > 0)
        {
            //            
            this.TreeView1.Nodes.Clear();
            for (int i = 0; i < dtp.Rows.Count; i++)
            {

                //       
                TreeNode Node = new TreeNode();
                Node.Text = dtp.Rows[i]["funcname"].ToString();
                Node.Value = dtp.Rows[i]["pagefuncid"].ToString();
                Node.ToolTip = dtp.Rows[i]["funcurl"].ToString();
                Node.ImageUrl = "../../" + dtp.Rows[i]["imageurl"].ToString(); 
                this.TreeView1.Nodes.Add(Node);//     ,      TreeView1  
                this.LoadAddSign(Node.ChildNodes,Convert.ToInt32(dtp.Rows[i]["pagefuncid"].ToString()));//wsw  
                TreeView1.CollapseAll();

            }
        }
    }
    /// <summary>
    ///             +  ,         。
    /// </summary>
    /// <param name="Conn"></param>
    /// <param name="tn"></param>
    /// <param name="DeptId"></param>
    private void LoadAddSign( TreeNodeCollection tn, int DeptId) //wsw  
    {
        DataTable table = pagBLL.GetList(" superfuncid=" + DeptId + "  order by sort asc").Tables[0];
        if (table.Rows.Count > 0)
        {
            //  "  "1   ,       +  
            tn.Add(new TreeNode());

        }
    }
    /// <summary>
    ///    +         
    /// </summary>
    /// <param name="sender"></param>
    /// <param name="e"></param>
    protected void TreeView1_TreeNodeExpanded(object sender, TreeNodeEventArgs e)
    {
        TreeNode node = e.Node;
        if (node.Expanded == true)
        {
            string bm = e.Node.Value.ToString();//wsw  
            DataTable table = pagBLL.GetList(" superfuncid=" + bm + "  order by sort asc").Tables[0];

            node.ChildNodes.Clear(); //
            if (table.Rows.Count > 0)
            {
                for (int i = 0; i < table.Rows.Count; i++)
                {
                    TreeNode Node = new TreeNode();
                    Node.Text = table.Rows[i]["funcname"].ToString();
                    Node.Value = table.Rows[i]["pagefuncid"].ToString();
                    Node.ToolTip = table.Rows[i]["funcurl"].ToString();
                    Node.ImageUrl = "../../" + table.Rows[i]["imageurl"].ToString();
                    node.ChildNodes.Add(Node);//     ,      TreeView1  
                    this.LoadAddSign(Node.ChildNodes, Convert.ToInt32(table.Rows[i]["pagefuncid"].ToString()));//wsw  
                }

            }
        }

    }
    #endregion