sud*_*hna 6 .net c# asp.net treeview nodes
我有一个级别的父节点和子节点的树视图控件,每个节点都有一个复选框,用于在选择后选择节点,如果我单击删除按钮我想删除子或父选择的内容,我使用以下代码并返回错误
码
    protected void btnRemoveOrganisation_Click(object sender, EventArgs e)
    {
        foreach (TreeNode Item in tvwSelectedOrganisations.CheckedNodes)
        {
            if (Item.Parent == null)
            {
                foreach (TreeNode ChildNode in Item.ChildNodes)
                {
                    Item.ChildNodes.Remove(ChildNode);
                }
                tvwSelectedOrganisations.Nodes.Remove(Item);
            }
            else
            {
                Item.Parent.ChildNodes.Remove(Item);
            }
        }
    }
错误
收集被修改; 枚举操作可能无法执行.
修改代码
        protected void btnRemoveOrganisation_Click(object sender, EventArgs e)
        {
            TreeNodeCollection SelectedNodes = tvwSelectedOrganisations.CheckedNodes;
            foreach (TreeNode Item in SelectedNodes)
            {
                if (Item.Parent == null)
                {
                    tvwSelectedOrganisations.Nodes.Remove(Item);
                }
                else
                {
                    tvwSelectedOrganisations.FindNode(Item.Parent.ValuePath).ChildNodes.Remove(Item);
                }
                if (SelectedNodes.Count == 0)
                {
                    break;
                }
            }
        }
解
int SelectedCount = SelectedNodes.Count;
            for (int i = SelectedCount - 1; i >= 0; i--)
            {
                if (tvwSelectedOrganisations.CheckedNodes[i].Parent == null)
                {
                    int j = tvwSelectedOrganisations.CheckedNodes[i].ChildNodes.Count;
                    tvwSelectedOrganisations.Nodes.Remove(tvwSelectedOrganisations.CheckedNodes[i]);
                    i += j;
                }
                else
                {
                    tvwSelectedOrganisations.FindNode(tvwSelectedOrganisations.CheckedNodes[i].Parent.ValuePath).ShowCheckBox = false;
                    tvwSelectedOrganisations.FindNode(tvwSelectedOrganisations.CheckedNodes[i].Parent.ValuePath).ChildNodes.Remove(tvwSelectedOrganisations.CheckedNodes[i]);
                }
            }
希望您使用 .Net 3.5 或更高版本。
foreach (TreeNode ChildNode in Item.ChildNodes.ToList())
{
    Item.ChildNodes.Remove(ChildNode);
}
编辑
如果 Item.ChildNodes 不是Enumerable。那就试试下面吧。
for( int i = Item.ChildNodes.Count - 1; i >= 0; i-- )
{
    Item.ChildNodes.Remove(ChildNode);
}
或者
while (Item.ChildNodes.Count > 0)
{
    Item.ChildNodes.Remove(ChildNode);
}