删除treeview中的节点

时间:2014-08-24 23:15:14

标签: c# asp.net treeview

我有一个树视图:

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]);     
}

1 个答案:

答案 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总是希望您指定CarTruck个节点。

要删除Audi,只需查找其父Car节点并从中删除。

如果要遍历所有节点:

protected void Button1_Click(object sender, EventArgs e)
{   
   for(int i=0; i < tv1.Nodes.Count; i++)        
      Remove(tv1.Nodes[i]);       
}