我正在尝试使用c#和asp.net动态创建树视图。
我使用populate ondemand属性创建了一个延迟加载树视图。
> <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
>...
>...
>...
如您所见,可以有多个父节点和多个层。这些将根据我传递给DB的内容进行动态填充。每次我点击节点,它将展开节点并使用回发填充其子节点,然后当您再次单击其子节点时,它将进行回发并再次填充其子节点等。所以我想要如何创建动态树视图的帮助。 / p>
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);
}
}
}
答案 0 :(得分:4)
我相信您正在寻找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);
}
}