各位好:
我用的是服务器控件,我想要实现的是:页面第一次加载时只显示根节点,在点击展开根节点时再加载其中的子节点。我该如何实现?现在我遇到的问题是:我第一次只加载了根节点,所以节点左边没有加号,因此不能触发tvTree_TreeNodeExpanded事件。希望各位给我指点一下,不一定按照我的思路来。谢谢
我用的是服务器控件,我想要实现的是:页面第一次加载时只显示根节点,在点击展开根节点时再加载其中的子节点。我该如何实现?现在我遇到的问题是:我第一次只加载了根节点,所以节点左边没有加号,因此不能触发tvTree_TreeNodeExpanded事件。希望各位给我指点一下,不一定按照我的思路来。谢谢
<script runat="server">
protected void TreeView1_TreeNodePopulate(object sender, TreeNodeEventArgs e)
{
switch (e.Node.Value)
{
case "N1":
e.Node.ChildNodes.Add(new TreeNode { Text = "张三", Value = "a" });
e.Node.ChildNodes.Add(new TreeNode { Text = "李四", Value = "b" });
e.Node.ChildNodes.Add(new TreeNode { Text = "王五", Value = "c", PopulateOnDemand = true });
break;
case "N2":
e.Node.ChildNodes.Add(new TreeNode { Text = "1" });
e.Node.ChildNodes.Add(new TreeNode { Text = "2" });
e.Node.ChildNodes.Add(new TreeNode { Text = "3" });
break;
case "N3":
e.Node.ChildNodes.Add(new TreeNode { Text = "A" });
e.Node.ChildNodes.Add(new TreeNode { Text = "B" });
e.Node.ChildNodes.Add(new TreeNode { Text = "C" });
break;
case "c":
e.Node.ChildNodes.Add(new TreeNode { Text = "张三他爸" });
e.Node.ChildNodes.Add(new TreeNode { Text = "张三他妈" });
e.Node.ChildNodes.Add(new TreeNode { Text = "张三他弟" });
break;
}
} private List<string> 选中过的节点
{
get
{
var x = ViewState["selected"];
if (x == null)
{
x = new List<string>();
ViewState["selected"] = x;
}
return (List<string>)x;
}
} private void ShowLabel1()
{
var s = string.Empty;
foreach (string node in 选中过的节点)
s = node + " " + s;
this.Label1.Text = s;
UpdatePanel2.Update();
} protected void TreeView1_SelectedNodeChanged(object sender, EventArgs e)
{
选中过的节点.Add(TreeView1.SelectedNode.Value);
ShowLabel1();
}
</script>
<!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">
<asp:ScriptManager ID="ScriptManager1" runat="server" />
<asp:UpdatePanel ID="UpdatePanel1" runat="server" UpdateMode="Conditional">
<ContentTemplate>
<asp:TreeView ID="TreeView1" runat="server" ExpandDepth="0" OnTreeNodePopulate="TreeView1_TreeNodePopulate"
EnableClientScript="False" OnSelectedNodeChanged="TreeView1_SelectedNodeChanged">
<Nodes>
<asp:TreeNode Text="N1" Value="N1" PopulateOnDemand="true"></asp:TreeNode>
<asp:TreeNode Text="N2" Value="N2" PopulateOnDemand="true"></asp:TreeNode>
<asp:TreeNode Text="N3" Value="N3" PopulateOnDemand="true"></asp:TreeNode>
</Nodes>
</asp:TreeView>
</ContentTemplate>
</asp:UpdatePanel>
<asp:UpdatePanel ID="UpdatePanel2" runat="server" UpdateMode="Conditional">
<ContentTemplate>
你点击的节点:
<asp:Label ID="Label1" runat="server" EnableViewState="False"></asp:Label>
</ContentTemplate>
</asp:UpdatePanel>
</form>
</body>
</html>
你可以看到“王五”这个数据里设置了属性 PopulateOnDemand = true,也就是说你在动态绑定一层节点的时候,只需要判断每一个节点是否 exists 下一层数据(只要存在一个)就够了,就可以用来设置这个属性了,这个属性就能控制是否显示加号!
first: put a treeview control whose ID is "TreeView1"
second: the codes below is in file ".aspx.cs"
show up:
1. run 2. click the first root node3. click the second root nodeusing 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 (!IsPostBack)
{
LoadRoots();
}
}
//这里多个root 节点
private void LoadRoots()
{
for (int i = 0; i <= 3; i++)
{
string nodeString = string.Format("Root Node {0}",i+1);
TreeView1.Nodes.Add(new TreeNode(nodeString));
TreeView1.Nodes[i].Value = i + "";
}
} protected void TreeView1_SelectedNodeChanged(object sender, EventArgs e)
{
TreeView node = (TreeView)sender;
string selectedValue = node.SelectedValue;
int i = 0;
switch (selectedValue)
{
case "0":
if (TreeView1.Nodes[0].ChildNodes.Count==0)
{
//这里 根据需求 从数据库 加载
for (i = 0; i <= 3; i++)
{
string child = string.Format("child node {0}", i + 1);
TreeView1.Nodes[0].ChildNodes.Add(new TreeNode(child));
}
}
break;
case "1":
if (TreeView1.Nodes[1].ChildNodes.Count == 0)
{
//这里 根据需求 从数据库 加载
for (i = 0; i <= 3; i++)
{
string child = string.Format("child node {0}", i + 1);
TreeView1.Nodes[1].ChildNodes.Add(new TreeNode(child));
}
}
break;
case "2":
if (TreeView1.Nodes[2].ChildNodes.Count == 0)
{
//这里 根据需求 从数据库 加载
for (i = 0; i <= 3; i++)
{
string child = string.Format("child node {0}", i + 1);
TreeView1.Nodes[2].ChildNodes.Add(new TreeNode(child));
}
}
break;
case "3":
if (TreeView1.Nodes[3].ChildNodes.Count == 0)
{
//这里 根据需求 从数据库 加载
for (i = 0; i <= 3; i++)
{
string child = string.Format("child node {0}", i + 1);
TreeView1.Nodes[3].ChildNodes.Add(new TreeNode(child));
}
}
break;
}
}
}