[转]C# dataGridview 报“索引-1没有值”的解决办法

摘要:
在DataGridView的开发中,许多WINFORM开发人员都会遇到“索引-1没有价值”这一恼人的问题。事实上,我早就知道这个问题并找到了解决方案,但我还没有时间深入研究它。今天,我做了一个测试,发现了问题。我不知道这个问题是否应该是MS的bug,但至少我个人认为这个问题不应该发生!

很多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没有值”的解决办法》仅用于学习参考。如对内容有疑问,请及时联系本站处理。

上篇ZYNQ Linux 移植:包含petalinux移植和手动移植debian9mysql分区方案的研究下篇

宿迁高防,2C2G15M,22元/月;香港BGP,2C5G5M,25元/月 雨云优惠码:MjYwNzM=

相关文章

c# datagridview 相关操作。

string[] newRow ={"long","d","b"}; Gridview.Rows.Insert(Gridview.Rows.Count, newRow); datagridview 设置某行某列的单元格可修改: private voidSetGridCellEdit() { if (repgr...

C#winform解析marc显示在datagridview中以及marc卡片显示

结果显示:marc显示: 卡片显示: 程序一个类: public class MARC { #region 界面上要显示的元素 public string ztm = "";//正题名 public string ftm = "";//副题名 public string fcm = "";//分册(辑)名 public string fch = "";...

C#窗体控件DataGridView常用设置

C#窗体控件DataGridView常用设置 在默认情况下,datagridview的显示效果: 1.禁用最后一行空白。   默认情况下,最后一行空白表示自动新增行,对于需要在控件中进行编辑,可以保留 dataGridView1.AllowUserToAddRows = false;   上述禁用,仅是将用户界面交互的自动新增行禁了,但还是可以通过代码:...

c#读取xml文件到datagridview中

using System; using System.Collections.Generic; using System.ComponentModel; using System.Data; using System.Drawing; using System.Linq; using System.Text; using System.Windows.Fo...

DataGridView 隐藏行头

1.去除表格行头,设置RowHeaderVisible=false; 2.去除最后一行(空行),绑定对象就不显示空行。 3.绑定List<T>列表,需要将T类型的字段设置为属性,否则不显示数据。 4.绑定对象(T)后,选中行,DataBoundItem可以强制转换为T对象。 (T)dataGridView1.SelectedRows[0].Da...

C# datagridview 的属性及事件

1.CellPainting: 在datagridview重绘的时候触发此事件 2。RowPostPaint: 在单元格重绘之后触发此事件 3.DataGridView.GetCellDisplayRectangle 方法 :返回表示单元格的显示区域的矩形。 public Rectangle GetCellDisplayRectangle( int co...