多行删除刷新后Index为空的问题
2015-11-17 16:23
204 查看
∗多行删除刷新后Index为空的问题∗
问题主要出现在刷新删除的这个循环中:
这种方式在单行删除中一点问题都没有,因为selRowsIndex.Count始终未1。
但是如果是多行删除,那么就有问题了,因为selRowsIndex.Count肯定大于等于1,如果大于1,那么当j=0的那一行清除后,循环到下一行时,行号已经变化,循环找到selRowsIndex[j]已经不是正常情况下应该清除的那一行了,所以报错Index找不到。
那么我们如何解决呢,其实也好办,因为主要是执行清除行的时候,原始方法是从0开始也就是从前往后清除的,那么只要前面一行删除了,必定会影响后面所有行的行号排列。我们只需要将方法改变为从后往前清除,这样删除会从最后一列开始清除而不影响前面的行号。具体改动如下:
前言
原有方法是执行单行删除后的同步刷新操作,如今要将单行删除改为支持多行删除操作,多行删除的语句已经写好。但是多行刷新遇见问题,总是提示“Index不存在或者为空”之类的问题,仔细分析了一下刷新方法后知道了问题的所在了:问题主要出现在刷新删除的这个循环中:
//单行删除完成后从列表中清除已经删除的行 public void RefreshGridViewForDelete(bool delResult) { if (delResult == false) { return; } if (dgvResult.SelectedRows != null && dgvResult.SelectedRows.Count > 0) { List<int> selRowsIndex = new List<int>(); for (int i = 0; i < dgvResult.Rows.Count; i++) { if (dgvResult.Rows[i].Selected == true) { selRowsIndex.Add(i); } } for (int j = 0; j < selRowsIndex.Count; j++) { dgvResult.Rows.RemoveAt(selRowsIndex[j]); } } SeachConditionCtl.ExeuteQuery(); }
这种方式在单行删除中一点问题都没有,因为selRowsIndex.Count始终未1。
但是如果是多行删除,那么就有问题了,因为selRowsIndex.Count肯定大于等于1,如果大于1,那么当j=0的那一行清除后,循环到下一行时,行号已经变化,循环找到selRowsIndex[j]已经不是正常情况下应该清除的那一行了,所以报错Index找不到。
那么我们如何解决呢,其实也好办,因为主要是执行清除行的时候,原始方法是从0开始也就是从前往后清除的,那么只要前面一行删除了,必定会影响后面所有行的行号排列。我们只需要将方法改变为从后往前清除,这样删除会从最后一列开始清除而不影响前面的行号。具体改动如下:
//适应多行删除,for循环从尾部开始, for (int j = 1; j <= selRowsIndex.Count; j++) { int k = selRowsIndex.Count - j;//转化为已选择列的尾列序号 dgvResult.Rows.RemoveAt(selRowsIndex[k]); }
相关文章推荐
- redis http://blog.csdn.net/htofly/article/details/7683060
- qt中qDebug()无法输出解决办法
- 梯度下降法理解
- Android基础入门教程——8.3.17 Canvas API详解(Part 2)剪切方法合集
- JS给某一个节点的子节点全部绑定事件
- reveal工具的使用
- MongoDB小结13 - find【2个参数】
- HTML基础学习 a标签的使用
- DTCMS,手机网站访问跳转到DTCMS官网解决方法
- CrackMe-OllyDBG 入门系列(七)-汇编功能
- 【黑马程序员】C语言循环
- 从html5的新特性定位安全问题
- 自定义函数-文本拆分多行
- hdu 5566 Clarke and room(ac自动机+树链剖分)
- JavaScript Promise 简化javascript
- PHP 获取日期的星期
- Handler机制、AsyncTask
- 聊天布局(listview)
- Android基础入门教程——8.3.16 Canvas API详解(Part 1)
- web.xml