gpt4 book ai didi

c# - 动态创建 TreeView

转载 作者:行者123 更新时间:2023-12-02 15:32:58 24 4
gpt4 key购买 nike

我正在尝试使用 C# 和 asp.net 动态创建 TreeView 。

我使用 populate ondemand 属性创建了一个延迟加载 TreeView 。

>  <asp:TreeView ID="treeView1"  runat="server" 
> OnTreeNodePopulate="treeview1_TreeNodePopulate"></asp:TreeView>

在代码后面,我已经加载了数据,但最初我填充了父节点。我想要实现的是,当我单击父节点时,我会进行回发,然后填充其子节点,然后再次填充其子节点,等等。我有数千个数据,因此由于性能原因,我不希望填充所有数据。这就是为什么我只想根据所选节点填充节点子节点的原因。请参阅下面的示例:

>Peter
- - >user1
- - >user2
- - >user3
- - >userPassword
- - >userId
>john
>david
>Jack
- - >user1
- - >user2
- - >userpassword
- - >userId
- - >Permissions
>Laura
- - > admin
- - > permissions
-- > user1
-- > user2
- - >userpassword
- - >userId
- - >Permissions
>...
>...
>...

正如您所看到的,可以有多个父节点和多个层。这些将根据我传递给数据库的内容动态填充。每次我单击节点时,它都会展开节点并使用回发填充其子节点,然后当您再次单击其子节点时,它将执行回发并再次填充其子节点等。所以我需要有关如何创建动态 TreeView 的帮助。

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);

}
}
}

最佳答案

我相信您正在寻找 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="server">
<title></title>
</head>
<body>
<form id="form1" runat="server">
<div id="div1" runat="server">

</div>

<asp:TreeView ID="TreeView1" runat="server"
onselectednodechanged="TreeView1_SelectedNodeChanged">

</asp:TreeView>

</form>
</body>
</html>

你的代码隐藏

using System;
using System.Collections.Generic;
using System.Linq;
using System.Web;
using System.Web.UI;
using System.Web.UI.WebControls;

public partial class _Default : System.Web.UI.Page
{
protected void Page_Load(object sender, EventArgs e)
{
if (!Page.IsPostBack)
{
TreeView1.Nodes.Add(new TreeNode("Node1"));
TreeView1.Nodes[0].ChildNodes.Add(new TreeNode("ChildNode"));
}

}


protected void TreeView1_SelectedNodeChanged(object sender, EventArgs e)
{
Response.Write(TreeView1.SelectedNode.Text);
}
}

关于c# - 动态创建 TreeView ,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/9096664/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com