动态创建树视图 [英] Dynamically create a treeview
本文介绍了动态创建树视图的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!
问题描述
我正在尝试使用 c# 和 asp.net 动态创建树视图.
我使用 populate on demand 属性创建了一个延迟加载树视图.
><asp:TreeView ID="treeView1" runat="server">OnTreeNodePopulate="treeview1_TreeNodePopulate"></asp:TreeView>
在代码后面我已经加载了我的数据,但最初我填充了父节点.我想要实现的是,当我单击父节点时,我进行回发,然后填充其子节点,然后再次填充其子节点,等等.我有成千上万的数据,所以我不希望由于性能而填充所有数据.这就是为什么我只想根据所选节点填充节点子节点的原因.请参见下面的示例:
>彼得- - >用户 1- - >user2- - >user3- - >用户密码- - >用户ID>约翰>大卫>杰克- - >用户 1- - >user2- - >用户密码- - >用户ID- - >权限>劳拉- - >行政- - >权限-- >用户 1-- >用户 2- - >用户密码- - >用户ID- - >权限>...>...>...
如您所见,可以有多个父节点和多个层.这些将根据我传递给 DB 的内容动态填充.每次我单击节点时,它都会扩展节点并使用回发填充其子节点,然后当您再次单击其子节点时,它将执行回发并再次填充其子节点等.所以我需要有关如何创建动态树视图的帮助.
c#:
private void LoadTreeview(){//加载数据//从数据库中获取数据.//遍历列表并构建其父节点.foreach(列表中的var dxm){TreeNode tnParent = CheckNodeExist(dxm.Node);//我检查是否存在.如果(tnParent== null){TreeNode tn = new TreeNode();tn.Text = dxm.Node;tn.Value = dxm.Id.ToString();tn.SelectAction = TreeNodeSelectAction.None;tn.Collapse();treeView1.Nodes.Add(tn);tn.PopulateOnDemand = 真;//延迟加载tnParent = tn;}}
在页面加载时调用上面的这个方法.
在 TreeNodePopulateEvent 上:(当一个节点被点击时)
protected void treeview1_TreeNodePopulate(object sender, TreeNodeEventArgs e){ICollection<ITEMS>list = new Collection();list = GetData(e.Node.Text);//传入您选择的节点,如果该节点确实有任何子节点,这将检查数据库.如果是这样,将返回子节点.foreach(列表中的var dxm){TreeNode tnChild = CheckNodeExist(dxm.Node);如果(tnChild == null){TreeNode tn = new TreeNode();tn.Text = dxm.Node;tn.Value = dxm.Id.ToString();tn.SelectAction = TreeNodeSelectAction.None;tn.Collapse();tn.PopulateOnDemand = 真;tnChild = tn;tnChild.ChildNodes.Add(tnChild);}}}
解决方案
我相信您正在寻找 SelectedNodeChanged 事件.您应该能够在此事件中加载您的子节点.基本上,每次您通过单击选择一个节点时,都会触发此事件.
你的aspx
<%@ Page Language="C#" AutoEventWireup="true" CodeFile="Default.aspx.cs" Inherits="_Default" %><!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd"><html xmlns="http://www.w3.org/1999/xhtml"><head runat="服务器"><title></title>头部><身体><form id="form1" runat="server"><div id="div1" runat="服务器">
<asp:TreeView ID="TreeView1" runat="server"onselectednodechanged="TreeView1_SelectedNodeChanged"></asp:TreeView></表单>