TreeView控件的EnableViewState属性的问题
我是从数据库读取数据并且在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的状态不再是已经打开的状态,而是所有节点都关闭。郁闷了两天了,不知道是哪里的问题
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的状态不再是已经打开的状态,而是所有节点都关闭。郁闷了两天了,不知道是哪里的问题
...全文
相关推荐
Asp.net Treeview 控件常用属性.
Asp.net Treeview 控件常用属性.
TreeView使用方法
TreeView控件的数据源绑定及使用方法,实践例子
【Python】【切片】精讲Python中的切片(Slice)操作
Python中符合序列的有序序列都支持切片(slice),例如列表,字符串,元组。 一个完整的切片表达式包含两个“:”,用于分隔三个参数(start_index、end_index、step),当只有一个“:”时,默认第三个参数step=1。
Unity WebGL发布避坑指南:从内存设置到字体打包,一次搞定所有常见问题
本文详细解析Unity WebGL发布的完整流程,从内存设置到字体打包,提供全面的避坑指南。涵盖关键检查清单、内存与性能优化配置、资源处理专项优化及平台适配技巧,帮助开发者高效解决常见问题,确保项目顺利发布。
ADS重新安装失败排查指南:从注册表清理到环境变量配置
本文详细解析了ADS重新安装失败的常见原因及解决方案,包括注册表残留清理、license路径锁定处理和环境变量配置。通过分步指南和实用技巧,帮助工程师高效解决安装问题,确保软件正常运行。


