C# Treeview依赖于Combobox
我对TReeview和组合框有问题。 问题: 我有一个包含父节点和子节点的树视图。 我有一个下拉框或组合框。每当我从组合框中选择一个值时,它就会自动选择treeview列表中的同一个节点 请给我建议如何执行此操作 这就是我迄今为止所尝试的:C# Treeview依赖于Combobox,c#,asp.net,C#,Asp.net,我对TReeview和组合框有问题。 问题: 我有一个包含父节点和子节点的树视图。 我有一个下拉框或组合框。每当我从组合框中选择一个值时,它就会自动选择treeview列表中的同一个节点 请给我建议如何执行此操作 这就是我迄今为止所尝试的: protected void nav_dd_parent_SelectedIndexChanged(object sender, EventArgs e) { nav_treeview.selectedvalue = nav_dd_parent
protected void nav_dd_parent_SelectedIndexChanged(object sender, EventArgs e)
{
nav_treeview.selectedvalue = nav_dd_parent.selectedvalue.tostring();
}
但它表示nav_treeview是只读的,不能为其分配任何值。您需要在
DropDownList
上设置AutoPostBack
,并在SelectedIndexChanged事件处理程序上添加。或者,您可以尝试用javascript编写所有内容,以避免回发帖子。我只是尝试了以下方法来为您提供一个示例:
HTML:
代码隐藏:
protected void Page_Load(object sender, EventArgs e)
{
if (!Page.IsPostBack)
{
Dictionary<string, Int32> myList = new Dictionary<string, Int32>();
myList.Add("Text1", 1);
myList.Add("Text2", 2);
myList.Add("Text3", 3);
myList.Add("Text4", 4);
myList.Add("Text5", 5);
foreach (KeyValuePair<string, Int32> s in myList)
{
this.TreeView1.Nodes.Add(new TreeNode(s.Key, s.Value.ToString()));
this.DropDownList1.Items.Add(new ListItem(s.Key, s.Value.ToString()));
}
foreach (TreeNode tn in this.TreeView1.Nodes)
{
tn.ChildNodes.Add(new TreeNode("Hello World"));
tn.Collapse();
}
}
}
protected void DropDownList1_SelectedIndexChanged(object sender, EventArgs e)
{
if (this.DropDownList1.SelectedItem != null)
{
foreach (TreeNode tn in this.TreeView1.Nodes)
{
if (tn.Value == this.DropDownList1.SelectedItem.Value)
{
tn.Selected = true;
if (tn.ChildNodes.Count > 0)
{
tn.Expand();
}
}
else {
tn.Collapse();
}
}
}
}
受保护的无效页面加载(对象发送方,事件参数e)
{
如果(!Page.IsPostBack)
{
Dictionary myList=新字典();
myList.Add(“Text1”,1);
myList.Add(“Text2”,2);
myList.Add(“Text3”,3);
myList.Add(“Text4”,4);
myList.Add(“Text5”,5);
foreach(myList中的键值对)
{
Add(新的TreeNode(s.Key,s.Value.ToString());
this.DropDownList1.Items.Add(新列表项(s.Key,s.Value.ToString());
}
foreach(此.TreeView1.Nodes中的TreeNode tn)
{
添加(新的TreeNode(“Hello World”);
tn.坍塌();
}
}
}
受保护的void DropDownList1\u SelectedIndexChanged(对象发送方,事件参数e)
{
如果(this.DropDownList1.SelectedItem!=null)
{
foreach(此.TreeView1.Nodes中的TreeNode tn)
{
如果(tn.Value==this.DropDownList1.SelectedItem.Value)
{
tn.所选=真;
如果(tn.ChildNodes.Count>0)
{
tn.Expand();
}
}
否则{
tn.坍塌();
}
}
}
}
希望这就是你需要的。祝你好运 你有代码给我们看吗?到目前为止你试过什么?另外,请不要使用ASP标记。我很确定你指的是ASP.NET,因为你已经引用了TreeView
控件,但是ASP标签有一个很大的免责声明告诉你不要使用它。到目前为止,你做了什么来解决这个问题?你能分享一些不起作用的代码吗?自动回发不起作用。每次我选择一个值时,它都会刷新并选择默认值,并且不会触发事件
protected void Page_Load(object sender, EventArgs e)
{
if (!Page.IsPostBack)
{
Dictionary<string, Int32> myList = new Dictionary<string, Int32>();
myList.Add("Text1", 1);
myList.Add("Text2", 2);
myList.Add("Text3", 3);
myList.Add("Text4", 4);
myList.Add("Text5", 5);
foreach (KeyValuePair<string, Int32> s in myList)
{
this.TreeView1.Nodes.Add(new TreeNode(s.Key, s.Value.ToString()));
this.DropDownList1.Items.Add(new ListItem(s.Key, s.Value.ToString()));
}
foreach (TreeNode tn in this.TreeView1.Nodes)
{
tn.ChildNodes.Add(new TreeNode("Hello World"));
tn.Collapse();
}
}
}
protected void DropDownList1_SelectedIndexChanged(object sender, EventArgs e)
{
if (this.DropDownList1.SelectedItem != null)
{
foreach (TreeNode tn in this.TreeView1.Nodes)
{
if (tn.Value == this.DropDownList1.SelectedItem.Value)
{
tn.Selected = true;
if (tn.ChildNodes.Count > 0)
{
tn.Expand();
}
}
else {
tn.Collapse();
}
}
}
}