我正在尝试使用C#和ASP.NET动态创建一个树形视图。我已经使用"populate ondemand"属性创建了懒加载的树形视图。
> <asp:TreeView ID="treeView1" runat="server"
> OnTreeNodePopulate="treeview1_TreeNodePopulate"></asp:TreeView>
在代码后面,我已经加载了我的数据,但最初我填充了父节点。 我想要实现的是,当我点击父节点时,然后进行postback,然后填充其子级,然后再次填充其子级,以此类推。 我有成千上万条数据,所以我不希望由于性能问题而填充所有数据。 因此,这就是为什么我只想基于所选节点填充节点子项的原因。请参见下面的示例:
>Peter
- - >user1
- - >user2
- - >user3
- - >userPassword
- - >userId
>john
>david
>Jack
- - >user1
- - >user2
- - >userpassword
- - >userId
- - >Permissions
>Laura
- - > admin
- - > permissions
-- > user1
-- > user2
- - >userpassword
- - >userId
- - >Permissions
>...
>...
>...
正如您所见,可能会有多个父节点和多个层次。这些将根据我传递到数据库中的内容动态填充。每次单击节点时,它都会展开该节点并使用回发填充其子项,然后再次单击其子项时,它将执行回发并再次填充其子项,依此类推。因此,我想寻求创建动态树视图的帮助。
c# :
private void LoadTreeview()
{
//Load data
// Get data from DB.
//loop through the list and build its parent nodes.
foreach (var dxm in list)
{
TreeNode tnParent = CheckNodeExist(dxm.Node); //I check to see if exists.
if (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 = true; //lazy load
tnParent= tn;
}
}
这个方法在页面加载时被调用。
在TreeNodePopulateEvent事件中:(当单击一个节点时)
protected void treeview1_TreeNodePopulate(object sender, TreeNodeEventArgs e)
{
ICollection<ITEMS> list = new Collection<ITEMS>();
list = GetData(e.Node.Text); //pass in the node you have selected this will go and check in DB if the node does have any child nodes. If so will return with child nodes.
foreach (var dxm in list)
{
TreeNode tnChild = CheckNodeExist(dxm.Node);
if (tnChild == null)
{
TreeNode tn = new TreeNode();
tn.Text = dxm.Node;
tn.Value = dxm.Id.ToString();
tn.SelectAction = TreeNodeSelectAction.None;
tn.Collapse();
tn.PopulateOnDemand = true;
tnChild = tn;
tnChild.ChildNodes.Add(tnChild);
}
}
}