TreeView控件的EnableViewState属性的问题

sansan123 2006-03-13 03:19:46
我是从数据库读取数据并且在treeview手动(不是绑定)添加节点的,每个节点都带有CheckBox,然后在一个按钮click事件里面遍历treeview的所有节点,并且从数据库中删除treeview中选中的记录,在数据库中成功删除(有条件,不能删除有子节点的节点)记录后在treeview中删除此节点,遍历算法如下:
private void DeleteNode(TreeNode parentNode)
{
int i = parentNode.Nodes.Count - 1;

while (i >= 0)
{
DeleteNode(parentNode.Nodes[i]);

if (parentNode.Nodes[i].Checked)
{
if ( ProductCatalog.DeleteCategory( Convert.ToInt32(parentNode.Nodes[i].ID) ) )
parentNode.Nodes.RemoveAt(i);
}
i--;
}

现假设treeview的EnableViewState属性设为true,treeview的结构为一个根节点root,root有两个子节点,A和B,第一次点击按钮执行删除操作成功,第二次执行失败,提示索引超出范围,如果将"if ( ProductCatalog.DeleteCategory( Convert.ToInt32(parentNode.Nodes[i].ID) ) )"去掉,也就是不从数据库删除记录,就执行多少次删除都没有错误。如果将EnableViewState设为false,第一次操作与前者结果相同,第二次也成功执行,唯一的问题就是treeview的状态不再是已经打开的状态,而是所有节点都关闭。郁闷了两天了,不知道是哪里的问题
...全文
141 6 打赏 收藏 转发到动态 举报
写回复
用AI写文章
6 条回复
切换为时间正序
请发表友善的回复…
发表回复
sansan123 2006-03-14
  • 打赏
  • 举报
回复
我弄清问题的根本了,就是因为删除节点以重新从数据库获取数据填充treeview才引起这样的错误,treeview.Nodex.Clear()以后填充也不行
NeilChen123 2006-03-13
  • 打赏
  • 举报
回复
但是你总有一个方法来执行填充的动作吧,

treeview.Nodes.Clear();
重新执行填充动作();

sansan123 2006-03-13
  • 打赏
  • 举报
回复
问题是我的treeview并不是用的绑定来填充节点的
robert2004 2006-03-13
  • 打赏
  • 举报
回复
每次删除之后要重新绑定该节点的父节点的目录


---------------------------
苦海无边 回头无岸
---------------------------

NeilChen123 2006-03-13
  • 打赏
  • 举报
回复
手工去删除每一个节点是不明智的。我建议你删除后重新读取数据源绑定节点列表即可。


sansan123 2006-03-13
  • 打赏
  • 举报
回复
高手们快来帮我看看,小弟先谢了

62,046

社区成员

发帖
与我相关
我的任务
社区描述
.NET技术交流专区
javascript云原生 企业社区
社区管理员
  • ASP.NET
  • .Net开发者社区
  • R小R
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告

.NET 社区是一个围绕开源 .NET 的开放、热情、创新、包容的技术社区。社区致力于为广大 .NET 爱好者提供一个良好的知识共享、协同互助的 .NET 技术交流环境。我们尊重不同意见,支持健康理性的辩论和互动,反对歧视和攻击。

希望和大家一起共同营造一个活跃、友好的社区氛围。

试试用AI创作助手写篇文章吧