关闭

多行删除刷新后Index为空的问题

标签: 多行删除-刷新
534人阅读 评论(0) 收藏 举报
分类:

∗多行删除刷新后Index为空的问题∗

前言


原有方法是执行单行删除后的同步刷新操作,如今要将单行删除改为支持多行删除操作,多行删除的语句已经写好。但是多行刷新遇见问题,总是提示“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]);
}

0
0
查看评论

QTableView实现同时删除被选中的多行记录

一个很简单的功能,就是在QTableView中,有一些不连续的选区,实现将被选中的行删除。 . 首先是获得选区,可以用 QItemSelectionModel 和 QModelIndexList 实现:   [cpp] ...
  • hudfang
  • hudfang
  • 2015-06-10 16:54
  • 1053

easyui datagrid从中间行删除再删除其他行报错

easyui datagrid从中间行删除再删除其他行报错
  • jmdonghao
  • jmdonghao
  • 2017-06-02 09:19
  • 633

添加或删除RecyclerView的item后 刷新Adapter中的数据源的个数

通常Recycler给Adapter赋上数据源的时候利用:adapter.notifyDataSetChanged();这样一般是在初始化界面 从网络获取到数据后 直接赋给adapter的写法。然后再动态的增加条目,又希望带有动画效果,可以这么写:adapter.notifyItemRangeIns...
  • zhangli_
  • zhangli_
  • 2017-04-13 10:12
  • 2267

eclipse出现不编译工程的现象。怎么刷新classes目录下也是空的.

eclipse出现不编译工程的现象。怎么刷新classes目录下也是空的. 具体操作: 打开project->build automatically 试后不行,还是不编译. 打开project –> build automatically 另外 clean一下就可能会编译了,结...
  • qq_20141243
  • qq_20141243
  • 2017-02-07 18:52
  • 1335

Datagrid的deleteRow多行移除问题

原因: deleteRow删除行以后会去调opts.view.deleteRow.call(opts.view,_4d2,_4d3);刷新页面上的行的index,index会发生改变;你原来rows的数据也会发生改变。 解决:  使用一个数组selectRows保存要删除的行,然后循环数组...
  • sun5769675
  • sun5769675
  • 2015-04-28 11:21
  • 1943

C++在delete指针之后是否要置为null

delete一个指针之后,只是回收指针指向位置的空间,而指针本身的值不变(也就是说还是指向那个地址的)。你需要手工将其赋值为NULL。 现在对于printf的反汇编代码不太熟悉,以后写个实例分析一下。
  • wuxinliulei
  • wuxinliulei
  • 2013-12-05 10:01
  • 1540

sql 删除 空记录

delete from stock.dbo.hq  where PriceNow is NULL
  • thesum
  • thesum
  • 2015-04-21 15:38
  • 200

EasyUI的datagrid删除后一页所有数据不自动显示前页数据

今天发现一个关于easyui的问题,一个用datagrid做的列表页面,删除最后一页所有数据后,发现刷新后列表为空,页码仍是这一页,正确的效果应该是加载上一页数据。于是看了代码,发现确认删除是会通过$("").datagrid('reload')进行刷新页面。但调...
  • I_Am_Zou
  • I_Am_Zou
  • 2016-09-18 15:23
  • 979

关于delete内存

看到有些书上说delete一个指针的内存后要把指针赋值为NULL,不明白为什么,自己拿个小例子演示了一下明白了,原来如此:int main(){ char *str =new char[5]; strcpy(str,"odfd"); cout<<"s...
  • kangpinghuagong
  • kangpinghuagong
  • 2012-07-24 15:11
  • 2842

jqgrid删除多行数据问题

利用JQGrid删除多行数据:   所选中行号依次为 1、2、4   利用FireBug 查看由 js 动态生成的 html 标签可以验证:   ...
  • wd4java
  • wd4java
  • 2015-05-30 13:32
  • 1655