DataGridView DataError 未从第一行抛出
Posted
技术标签:
【中文标题】DataGridView DataError 未从第一行抛出【英文标题】:DataGridView DataError not thrown from first row 【发布时间】:2013-06-14 09:38:22 【问题描述】:我有一个绑定到DataTable
的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
事件确实不会在第一行触发。但是,行标题中有一个红色感叹号,声称“标准表达式中的数据类型不匹配”。
为什么第一行的行为与其他行不同?还请提出更好的方法来解决这个问题。
【问题讨论】:
我不确定,但任何表格的第一行大多是标题行。这不会造成什么吗? 我查过了。第一行(索引 0)是包含数据的第一行,而不是标题。 【参考方案1】:尝试引用 DataGridViewComboBoxCell 而不是 DataGridViewComboBoxColumn。在我自己的情况下,将组合框列绑定到数据表,只有在引用单元格后,我才能让它将第一行更新为适当的新值。您可能只需要像我在下面最后一行代码中所做的那样重新分配值。
Dim comboCell As DataGridViewComboBoxCell = DirectCast(targetGrid.Rows(e.RowIndex).Cells(e.ColumnIndex), DataGridViewComboBoxCell)
Dim comboData As DataTable = DirectCast(comboCell.DataSource, DataTable)
Dim oRow As DataRowView = comboData.DefaultView.AddNew()
oRow(oComboCol.DataPropertyName) = targetValue
oRow.EndEdit()
comboData.AcceptChanges()
comboCell.Value = targetValue
【讨论】:
以上是关于DataGridView DataError 未从第一行抛出的主要内容,如果未能解决你的问题,请参考以下文章
DataGridViewComboBoxColumn值无效解决方法
DataGridView中的ComboboxCell报了System.ArgumentException:DagaGridViewComboBoxCell值无效错误
在C#的WinForm中,怎么在datagridview中插入复选框?