您的位置:首页 > 编程语言 > ASP

asp.net treeview 异步加载

2015-06-11 10:04 603 查看
在使用TreeView控件的时候,如果数据量太大,这个TreeView控件加载会很慢,有时甚至加载失败,

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

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

还有子节点的话,只加载一个子节点;在点击”+“号,触发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
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: