: DataGridView中以DataGridViewComboBoxCell方式实现下拉列表方式报错
求助: DataGridView中以DataGridViewComboBoxCell方式实现下拉列表方式报错
我希望在DataGridView中单击【性别】列某单元格,下拉出备选项:"","男","女",用此方式完成表格的编辑。代码如下:
Private Sub DataGridView1_CellBeginEdit(ByVal sender As System.Object, ByVal e As System.Windows.Forms.DataGridViewCellCancelEventArgs) Handles DataGridView1.CellBeginEdit
Dim a As Integer = DataGridView1.CurrentCell.RowIndex, b As Integer = DataGridView1.CurrentCell.ColumnIndex
Dim Cell As New DataGridViewComboBoxCell
Select Case DataGridView1.Columns(e.ColumnIndex).HeaderText
Case "性别"
Cell.Items.AddRange(New Object() {"", "男", "女"}) '也可以在此处读表,动态循环添加字段值
Cell.MaxDropDownItems = 40
Cell.DisplayStyle = DataGridViewComboBoxDisplayStyle.Nothing '确保离开当前单元格后恢复为文本框显示状态
DataGridView1.Rows(a).Cells(b) = Cell
End Select
End Sub
运行时效果符合预期,但是偶尔会报错退出,报错信息如下:
未处理 InvalidOperationException
操作无效,原因是它导致对 SetCurrentCellAddressCore 函数的可重入调用。
排查了很久,起初误以为是大量的历史数据中或许存在null值造成的,
后来发现:如果【性别】列是第3列的话,那么只有在第3行的位置点击单元格才会出错,也就是 a = b 时报错。我的VS版本2010
求大侠、大神们帮我分析一下到底咋回事吧,拜托拜托,谢谢谢谢!
------解决思路----------------------
单看代码无问题,代码单独测试也没问题,应该是你其他地方写的东西联动产生了问题
参考下面链接http://www..net/c-sharp/626065.html
------解决思路----------------------
把绑定附表的datatable copy一份
DataTable dt1=dt.Copy();
然后再绑定,不要绑定同一个数据源
而且你要把DataGridViewComboBoxColumn列绑定dt1,不要循环每行去绑定
------解决思路----------------------
VS的DATAGRIDVIEW的确有BUG。。。
我希望在DataGridView中单击【性别】列某单元格,下拉出备选项:"","男","女",用此方式完成表格的编辑。代码如下:
Private Sub DataGridView1_CellBeginEdit(ByVal sender As System.Object, ByVal e As System.Windows.Forms.DataGridViewCellCancelEventArgs) Handles DataGridView1.CellBeginEdit
Dim a As Integer = DataGridView1.CurrentCell.RowIndex, b As Integer = DataGridView1.CurrentCell.ColumnIndex
Dim Cell As New DataGridViewComboBoxCell
Select Case DataGridView1.Columns(e.ColumnIndex).HeaderText
Case "性别"
Cell.Items.AddRange(New Object() {"", "男", "女"}) '也可以在此处读表,动态循环添加字段值
Cell.MaxDropDownItems = 40
Cell.DisplayStyle = DataGridViewComboBoxDisplayStyle.Nothing '确保离开当前单元格后恢复为文本框显示状态
DataGridView1.Rows(a).Cells(b) = Cell
End Select
End Sub
运行时效果符合预期,但是偶尔会报错退出,报错信息如下:
未处理 InvalidOperationException
操作无效,原因是它导致对 SetCurrentCellAddressCore 函数的可重入调用。
排查了很久,起初误以为是大量的历史数据中或许存在null值造成的,
后来发现:如果【性别】列是第3列的话,那么只有在第3行的位置点击单元格才会出错,也就是 a = b 时报错。我的VS版本2010
求大侠、大神们帮我分析一下到底咋回事吧,拜托拜托,谢谢谢谢!
------解决思路----------------------
单看代码无问题,代码单独测试也没问题,应该是你其他地方写的东西联动产生了问题
参考下面链接http://www..net/c-sharp/626065.html
------解决思路----------------------
把绑定附表的datatable copy一份
DataTable dt1=dt.Copy();
然后再绑定,不要绑定同一个数据源
而且你要把DataGridViewComboBoxColumn列绑定dt1,不要循环每行去绑定
------解决思路----------------------
VS的DATAGRIDVIEW的确有BUG。。。