[转]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不变,所以当你点击⿏标进去后,返回的datagridview数据源
当前⾏就出错了!
解决的⽅法很简单,第⼀,绑定数据集时,判断数据集是否为空,是否元素个数⼤于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对应的列,必需为可视的;