我尝试使用Treeview控件在asp.net中构建一个类似于简单导航菜单的Windows资源管理器 我已经放置了一个Listview控件,它可以动态显示所选节点的子节点。
Root
-Group01
-subgroup1
-1.1
-1.2
-subgroup2
-1.1
-Group02
在页面加载中我已将Treenode修复为0,因此在Listview中插入了Group01和Group02按钮。
我想知道的是假设我点击它应该显示的Listview中的Group01按钮 subgroup1和subgroup1等等而不是rootnode的子节点。
这是.aspx代码
<div>
<asp:TreeView ID="TreeView1" runat="server" OnSelectedNodeChanged="TreeView1_SelectedNodeChanged">
<Nodes>
<asp:TreeNode SelectAction="SelectExpand" Text="root" Value="root">
<asp:TreeNode Expanded="False" SelectAction="SelectExpand" Text="group01" Value="group01">
<asp:TreeNode Text="subgroup1" Value="subgroup1">
<asp:TreeNode Text="1.1" Value="1.1"></asp:TreeNode>
<asp:TreeNode Text="1.2" Value="1.2"></asp:TreeNode>
</asp:TreeNode>
<asp:TreeNode Text="subgroup2" Value="subgroup2">
<asp:TreeNode Text="1.1" Value="1.1"></asp:TreeNode>
</asp:TreeNode>
</asp:TreeNode>
<asp:TreeNode Expanded="False" SelectAction="SelectExpand" Text="group02" Value="group02">
</asp:TreeNode>
</asp:TreeNode>
</Nodes>
</asp:TreeView>
</div>
<div>
<asp:ListView ID="ListView1" runat="server">
</asp:ListView>
</div>
aspx.cs代码
protected void Page_Load(object sender, EventArgs e)
{
TreeView1.Nodes[0].Select();
TreeView1_SelectedNodeChanged(this, EventArgs.Empty);
}
protected void TreeView1_SelectedNodeChanged(object sender, EventArgs e)
{
ListView1.Controls.Clear();
List<string> childs = new List<string>();
for (int i = 0; i < TreeView1.SelectedNode.ChildNodes.Count; i++)
{
childs.Add(TreeView1.SelectedNode.ChildNodes[i].Text);
}
foreach (string val in childs)
{
Button btn = new Button
{
Text = val
};
ListView1.Controls.Add(btn);
ListView1.Controls.Add(new LiteralControl("</br></br>"));
}
}
由于我是新手,我想知道这是否是正确的做法或其他选择。
答案 0 :(得分:0)
首先,您的.aspx文件不包含ListView1。
其次,“subgroup1和subgroup1”可能是语义错误。
我认为你对Listview和映射treeNode的ListViewItem有所了解。您需要单击ListViewItem来控制treenode展开或折叠。
或者您想要点击要控制的节点的“文本”而不是“+”/“ - ”符号。
在任何情况下,您必须找到该节点,并判断Expanded。
可能这段代码可以帮到你。
protected void TreeView1_SelectedNodeChanged(object sender, EventArgs e)
{
TreeView tree = (TreeView)sender;
TreeNode node = tree.SelectedNode;
bool isExpanded = Boolean.Parse(node.Expanded.ToString());
if (isExpanded)
node.Collapse();
else
node.Expand();
tree.SelectedNode.Selected = false;
}