我有一个DataGridView
绑定到的一个DataTable
,而后者又是从数据库中填充的。在这个网格中,我有几个DataGridViewComboBoxColumn
s,数据绑定到ArrayList
s,如下所示:
Dim ComboBoxData As ArrayList = New ArrayList(New String() {"",
"Default",
"User-set"})
Dim ComboBoxBS As BindingSource = New BindingSource
ComboBoxBS.DataSource = ComboBoxData
SomeDataGridViewComboBoxColumn.DataSource = ComboBoxBS
我想允许 中的字段DataTable
可能具有其他值而不是ComboBoxData
. 我通过处理DataError
事件并将缺失值添加到ComboBox
:
Private Sub grid_DataError(ByVal sender As System.Object,
ByVal e As System.Windows.Forms.DataGridViewDataErrorEventArgs
) Handles grid.DataError
If TypeOf grid.Columns(e.ColumnIndex) Is DataGridViewComboBoxColumn Then
Dim value = grid.Rows(e.RowIndex).Cell(e.ColumnIndex).Value
Dim cboCol As DataGridViewComboBoxColumn = CType(grdDataGrid2.Columns(e.ColumnIndex), DataGridViewComboBoxColumn)
Dim bs As BindingSource = CType(cboCol.DataSource, BindingSource)
If Not bs.Contains(value) Then
bs.Add(value)
bs.Position = bs.IndexOf(value)
End If
e.Cancel = False
Return
End If
End Sub
这适用于除第一行之外的所有行。通过调试,我已经确认该DataError
事件确实不会在第一行触发。但是,行标题中有一个红色感叹号,声称“标准表达式中的数据类型不匹配”。
为什么第一行不像其他行那样表现?还请提出更好的方法来解决这个问题。