[转]C# dataGridview 报“索引-1没有值”的解决办法
很多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没有值”的解决办法的更多相关文章
- ORA-01461: 仅可以为插入 LONG 列的 LONG 值赋值”解决办法
ORA-01461: 仅可以为插入 LONG 列的 LONG 值赋值”解决办法 今天遇到的一个问题: 直接修改数据表中的某些字段数据内容时报错: ORA-01461: 仅可以为插入 LONG 列的 L ...
- Centos命令行报bash:.....:command not found的解决办法
命令行报bash:.....:command not found的解决办法(几乎所有命令) 命令行输入命令执行后报“bash:....:command not found”这是由于系统PATH设置 ...
- electron-vue中使用iview 报错this. is readonly的解决办法
title: electron-vue中使用iview 报错this. is readonly的解决办法 toc: false date: 2019-02-12 19:33:28 categories ...
- Intellij里检出svn报错找不到svn解决办法
Intellij里检出svn报错找不到,解决办法: 1. 安装svn客户端: 2. 去掉settings->version control->subversion里的use command ...
- Map 转 json格式 保留null值的解决办法
Map 转 json格式 保留null值的解决办法 开发中遇到将map数据转json格式,然后map中含null值的键值对都被转没了,所以记录一下,以下是解决方法 使用fastJson进行转换 imp ...
- 记32位Oracle客户端登录报12560协议适配器错误的解决办法
国庆买了一台新电脑ThinkPad E431,i5双核CPU,8G内存,硬盘比较坑爹5400转的500G,重点是预装win8的64位简体中文版.大学时买了第一台电脑神舟笔记本,因为神舟电脑便宜,所以没 ...
- ORACLE 查询不走索引的原因分析,解决办法通过强制索引或动态执行SQL语句提高查询速度
(一)索引失效的原因分析: <>或者单独的>,<,(有时会用到,有时不会) 有时间范围查询:oracle 时间条件值范围越大就不走索引 like "%_" ...
- Django中ajax发送post请求,报403错误CSRF验证失败解决办法
今天学习Django框架,用ajax向后台发送post请求,直接报了403错误,说CSRF验证失败:先前用模板的话都是在里面加一个 {% csrf_token %} 就直接搞定了CSRF的问题了:很显 ...
- dbstart和dbshut启动、关闭数据库报错ORACLE_HOME_LISTNER is not SET解决办法
dbstart启动数据库报错,如下: [oracle@wen ~]$ dbstartORACLE_HOME_LISTNER is not SET, unable to auto-start Oracl ...
随机推荐
- JavaScript-冒泡排序
随机生成10个不重复的100以内的整数放入数组,并排序后进行打印<br /> 如: for(var i=0;i<9;i++) { for(var j=i+1;j<9;j++) ...
- atitit.RESTful服务的概览and框架选型
atitit.RESTful服务的概览and框架选型 1. REST基础概念: 1 2. URL说明: 1 3. 1 4. RESTful框架选型 2 1. spring mvc( recomm) ...
- paip.输入法编程--英文ati化By音标原理与中文atiEn处理流程 python 代码为例
paip.输入法编程--英文ati化By音标原理与中文atiEn处理流程 python 代码为例 #---目标 1. en vs enPHati 2.en vs enPhAtiSmp 3.cn vs ...
- jQuery/javascript实现网页注册的表单验证
<html> <head> <meta charset="utf-8"> <title>注册表单验证</title> & ...
- 指定的参数错误。Vim.Host.DiskPartitionInfo.-spec VSPHERE.LOCAL\Administrator WIN-DOPGQVRRU2C
ESXI5.5 工作需要,最近在研究虚拟化的东西. 项目做分布式开发需要很多开发服务器,公司没钱只好拿一台之前使用的Dell的服务器做虚拟机.质询了一下公司IT部门,他们使用的是vmware的一套方案 ...
- mysql优化之表建设
就拿常见的用户表.文章类的表.日志表来分析如下 CREATE TABLE `user` ( `id` int(11) unsigned NOT NULL AUTO_INCREMENT COMMEN ...
- 更改Windows系统的密码之后,SQL Server 2008服务无法启动
问题:更改Windows操作系统的密码之后,SQL Server 2008服务无法启动. 原因:SQL Server服务需要使用操作系统的某个登录账户. 解决:需要在服务的属性窗口中修改账户密码,然后 ...
- DotNetMQ的一个小demo
DotNetMQ是一个新的.独立的.开源的,完全基于C#和.NET Framework3.5的消息队列系统 下载源代码 - 1.28 MB 下载二进制文件 - 933 KB 下载例子 - 534 KB ...
- IE6-IE11兼容性问题列表及解决办法总结
相比IE6-IE9那版,主要添加IE10和IE11的新变化. 以下是目录及下载链接: 目录 概述 2 第一章:HTML 3 第一节:IE7-IE8更新 3 1. 如果缺少结束标记的 P 元素后跟 TA ...
- 机器学习编程语言之争,Python 夺魁【转载+整理】
原文地址 en cn 本文内容 表现平平的 MATLAB 貌似强大的 Julia 本身无错的 R 语言 逐渐没落的 Perl 老而弥坚的 Python 我个人很喜欢 Python~ 随着科技的发展,拥 ...