我有一个树视图:
Car
BMW
Plane
Us
除了每个节点,我都有一个复选框。 现在,当我尝试通过选择它来移除奥迪时,没有任何反应,但是当我点击汽车时,其中的所有内容都会被删除。
任何人都可以指出我错在哪里。
protected void Page_Load(object sender, EventArgs e)
{
//if(!IsPostBack)
form1.Controls.Add(add());
}
TreeView tv1 = new TreeView();
int count = 0;
public TreeView add()
{
TreeNode tn = new TreeNode();
tn.Text = "car";
tn.Value = "car";
TreeNode tn1 = new TreeNode();
tn1.Text = "bmw";
tn1.Value = "bmw";
tn.ChildNodes.Add(tn1);
tv1.Nodes.Add(tn);
tn.ShowCheckBox = true; tn1.ShowCheckBox = true;
TreeNode tn2 = new TreeNode();
tn2.Text = "plane";
tn2.Value = "plane";
TreeNode tn12 = new TreeNode();
tn12.Text = "us";
tn12.Value = "us";
tn2.ChildNodes.Add(tn12);
tv1.Nodes.Add(tn2);
tn2.ShowCheckBox = true; tn12.ShowCheckBox = true;
return tv1;
}
public void Remove(TreeNode tn)
{
if (tn.Checked)
{
//tv1.Nodes.Remove(tn);
if (tn.Parent != null)
tn.Parent.ChildNodes.Remove(tn);
else
tv1.Nodes.Remove(tn);
}
else if (tn.ChildNodes.Count > 0)
{
foreach (TreeNode tn1 in tn.ChildNodes)
{
Remove(tn1);
}
}
}
protected void Button1_Click(object sender, EventArgs e)
{
//Remove(tv1.Nodes[0]);
//Response.Write(count);
for(int i=0; i < tv1.Nodes.Count; i++)
Remove(tv1.Nodes[i]);
}
答案 0 :(得分:1)
您需要修复删除部分。
if (tn.Checked)
{
if(tn.Parent != null)
tn.Parent.ChildNodes.Remove(tn);
else
tv1.Nodes.Remove(tn);
}
else if (tn.ChildNodes.Count > 0)
{
for(int i=0; i < tn.ChildNodes.Count; i++)
{
Remove(tn.ChildNodes[i]);
}
}
注意强>:
Car
BMW
Audi
Truck
tv1.Nodes
始终引用第一级节点。
例如,如果您已选中Audi
,则无法使用,因为tv1.Nodes.Remove
总是希望您指定Car
和Truck
个节点。
要删除Audi
,只需查找其父Car
节点并从中删除。
如果要遍历所有节点:
protected void Button1_Click(object sender, EventArgs e)
{
for(int i=0; i < tv1.Nodes.Count; i++)
Remove(tv1.Nodes[i]);
}