很多WINFORM的开发人员在DataGridView的开发当中,都会出现“索引-1没有值”这个烦人的问题,其实较早之前,我已经大概知道问题的所在,也找到了解决方法,不过一直没有时间去深入研究一下,今日做了一个测试,发现问题的所在,我不知道这个问题是否应为MS的BUG,但至少我个人认为这个问题不应该出现!

下面先说说构成这个错误的现像。

首先出面这个错误,绝大多数的开发人员都是进行数据绑定之后出现的,而且出现的情况基本上都只得一种,就是开始绑定的数据集是非空的,但数据集的Count=0,在将这个非空的而元素个数为0的数据集绑定到DataGridView后,当更新DataGridView的数据源,即将一个元素个数大于0的数据集绑定给DataGridView后,DataGridView仍能正常显示,以上还是正常的,但问题就出在,当你用鼠标点击DataGridView后,“索引-1没有值”这个恼人的错误就会出现。

其实以上的文字基本上已经让你知道问题的所在,就是第一次绑定的“非空的且元素个数为0的数据集”,经运行时查看对象属性,由于只要数据集不为空,DataGirdView就必需指定当前单元格(CurrentCell),但“非空0元数数据集”的CurrentCell是为null,致使后来更新数据集后,这个CurrentCell仍不会变,因为你的数据集没有改变,只是数据集的数目改变了,所以CurrentCell不变,所以当你点击鼠标进去后,返回的当前行就出错了!

解决的方法很简单,第一,绑定数据集时,判断数据集是否为空,是否元素个数大于0,如果符合条件的才将数据集绑定;第二,如果已经绑定了,可以判断当前数据集的元素个数是否为0,如果大于0则设置CurrentCell。

第一解决方法:

if (dataSource != null && dataSource.Count > 0) { dataGridView1.DataSource = dataSource; }

第二解决方法:

if (dataGridView1.Rows.Count > 0) { dataGridView1.CurrentCell = dataGridView1.Rows[0].Cells[1]; }

顺带一提,设置时,Cell的Index对应的列,必需为可视的;

来源:http://www.cnblogs.com/badtree/articles/1799170.html

[转]C# dataGridview 报“索引-1没有值”的解决办法的更多相关文章

  1. ORA-01461: 仅可以为插入 LONG 列的 LONG 值赋值”解决办法

    ORA-01461: 仅可以为插入 LONG 列的 LONG 值赋值”解决办法 今天遇到的一个问题: 直接修改数据表中的某些字段数据内容时报错: ORA-01461: 仅可以为插入 LONG 列的 L ...

  2. Centos命令行报bash:.....:command not found的解决办法

    命令行报bash:.....:command not found的解决办法(几乎所有命令)   命令行输入命令执行后报“bash:....:command not found”这是由于系统PATH设置 ...

  3. electron-vue中使用iview 报错this. is readonly的解决办法

    title: electron-vue中使用iview 报错this. is readonly的解决办法 toc: false date: 2019-02-12 19:33:28 categories ...

  4. Intellij里检出svn报错找不到svn解决办法

    Intellij里检出svn报错找不到,解决办法: 1. 安装svn客户端: 2. 去掉settings->version control->subversion里的use command ...

  5. Map 转 json格式 保留null值的解决办法

    Map 转 json格式 保留null值的解决办法 开发中遇到将map数据转json格式,然后map中含null值的键值对都被转没了,所以记录一下,以下是解决方法 使用fastJson进行转换 imp ...

  6. 记32位Oracle客户端登录报12560协议适配器错误的解决办法

    国庆买了一台新电脑ThinkPad E431,i5双核CPU,8G内存,硬盘比较坑爹5400转的500G,重点是预装win8的64位简体中文版.大学时买了第一台电脑神舟笔记本,因为神舟电脑便宜,所以没 ...

  7. ORACLE 查询不走索引的原因分析,解决办法通过强制索引或动态执行SQL语句提高查询速度

    (一)索引失效的原因分析: <>或者单独的>,<,(有时会用到,有时不会) 有时间范围查询:oracle 时间条件值范围越大就不走索引 like "%_" ...

  8. Django中ajax发送post请求,报403错误CSRF验证失败解决办法

    今天学习Django框架,用ajax向后台发送post请求,直接报了403错误,说CSRF验证失败:先前用模板的话都是在里面加一个 {% csrf_token %} 就直接搞定了CSRF的问题了:很显 ...

  9. dbstart和dbshut启动、关闭数据库报错ORACLE_HOME_LISTNER is not SET解决办法

    dbstart启动数据库报错,如下: [oracle@wen ~]$ dbstartORACLE_HOME_LISTNER is not SET, unable to auto-start Oracl ...

随机推荐

  1. 通过Greasemonkey实现网页图片自动点击

    昨天受一个朋友所托,实现了一个在特定网页自动点击某超链接图片实现网页跳转功能的JavaScript脚本. 工具就是Firefox的Greasemonkey扩展插件.代码如下: // ==UserScr ...

  2. CentOS Minimal版最小化安装后VMware联网详解

    最近想搞个mailman邮件列表,又不想在我常用的CentOS 6.4上做实验,怕破坏了环境,于是就想装个试验机,又嫌它占空间太大,于是找了半天发现CentOS 6.0的minimal版本最适合了,装 ...

  3. yafphp框架

    学习资料 Yaf(Yet Another Framework)用户手册http://www.laruence.com/manual/index.html laruence/yafhttps://git ...

  4. php学习第一讲----php是什么?

    前言:不要在冲动的情况下做任何决定 ——————————————————————————————————————————————————————---- 一.学php之前的一些需要了解的知识 (1)网 ...

  5. js模块方案

    在浏览器环境中,模块的各个部分通常都是从网上获取的,有时无法知道js哪个模块会先加载,所以传入的返回函数除了返回函数本身,还可以返回为空对象. 自执行函数的处理方式: var module1 = (f ...

  6. [推荐]Zookeeper大型分布式系统的可靠协调系统知识介绍

    [推荐]Zookeeper大型分布式系统的可靠协调系统知识介绍 基于Zookeeper的锁开发手册 http://wenku.baidu.com/view/acbb8fc6102de2bd960588 ...

  7. 使用RAML描述API文档信息的一些用法整理

    RAML是Restful API Modeling Language的缩写,是用来描述API信息的文档. 创建一个.raml后缀的文件,用Atom打开. 基本用法 #%RAML 0.8 title: ...

  8. 单元测试 mock EF 中DbContext 和DbSet Include

    现在EF越来越流行了,很多时候业务成都是直接访问DbContext 和DbSet来操作数据的. 那么我们测试的时候如何来mock这2个对象了?现在时间很晚了, 就直接贴code吧 首先看看的我们DbC ...

  9. spring中使用mockito

    1 mockito介绍和入门 官方:https://github.com/mockito/mockito 入门: 5分钟了解Mockito http://liuzhijun.iteye.com/blo ...

  10. [salesforce] URLFOR function finally

    While developing your Visualforce pages you may need to be able to obtain the URL of certain actions ...