求: VB.NET 的 DataGridView 控件中如何灵活使用 DataGridViewComboBoxCell
我习惯于在窗体上加入DataGridView1控件,直接获取数据库表的数据,点击编辑按钮进入DataGridView1控件的增、删、改,然后保存。数据库里面有2个表:
仓单表(进出货日期、订单编码,客户,物品名称,规格,重量,单价,客户单号)
客户表(客户简称,联络人,联系方式,地址)
在DataGridView1中显示仓单表进出货记录,其中客户列在编辑状态下希望做成为下拉组合框方式选择客户表的客户简称字段内容,避免DataGridView1编辑仓单记录时造成客户名称输入有误。
请问各位高手是如何灵活控制DataGridView单元格DataGridViewComboBoxCell从数据库表中获取备选项的呢?
现在我的做法是:
DataGridView1_CellBeginEdit事件中构造DataGridViewComboBoxCell组合框显示状态
Dim a As Integer = DataGridView1.CurrentCell.RowIndex, b As Integer = DataGridView1.CurrentCell.ColumnIndex
Dim Cell As New DataGridViewComboBoxCell
If DataGridView1.Columns(e.ColumnIndex).HeaderText="客户" Then
For Each Row0 As DataRow In DataTable4.Rows
If Not (Cell.Items.Contains(Row0(0))) Then Cell.Items.Add(Row0(0)) '防止重复写入items,只要当前项不在items之中则Add
Next Row0
Cell.MaxDropDownItems = 50
Cell.DisplayStyle = DataGridViewComboBoxDisplayStyle.Nothing '加入此设置就不用DataGridView1_CellEndEdit事件恢复单元格的文本框显示方式了 2014-12-16优化
DataGridView1.Rows(a).Cells(b) = Cell
End If
可以正常运行,符合预期,但是在运行过程中,偶尔会报错:
未处理 InvalidOperationException
操作无效,原因是它导致对 SetCurrentCellAddressCore 函数的可重入调用。
请各位高手给些建议,并提供些此类问题可靠的处理方式,不胜感激!
2014-12-16发现此错误是在 a=b 的情况下发生的,求各位高手帮忙分析一下吧
[ 本帖最后由 XIHONGSHI 于 2014-12-16 13:01 编辑 ]