标题:求助: DataGridView中以DataGridViewComboBoxCell方式实现下拉列表方式报错
只看楼主
XIHONGSHI
Rank: 1
等 级:新手上路
帖 子:26
专家分:0
注 册:2006-4-3
 问题点数:0 回复次数:1 
求助: 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
求大侠、大神们帮我分析一下到底咋回事吧,拜托拜托,谢谢谢谢!

[ 本帖最后由 XIHONGSHI 于 2014-12-16 13:56 编辑 ]
2014-12-16 13:53
XIHONGSHI
Rank: 1
等 级:新手上路
帖 子:26
专家分:0
注 册:2006-4-3
得分:0 
问题解决了。结论:微软的datagridview目前还不够完美!

2014-12-26 10:40



参与讨论请移步原网站贴子:https://bbs.bccn.net/thread-440003-1-1.html




关于我们 | 广告合作 | 编程中国 | 清除Cookies | TOP | 手机版

编程中国 版权所有,并保留所有权利。
Powered by Discuz, Processed in 0.104235 second(s), 8 queries.
Copyright©2004-2024, BCCN.NET, All Rights Reserved