我正在尝试向数据绑定的数据网格视图添加行
法典:
Private Sub Button2_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button2.Click
'Dim Index As Integer
'Index = DataTable1DataGridView.CurrentCell.RowIndex
Dim dt As DataTable = DataTable1DataGridView.DataSource
Dim dr As DataRow = dt.NewRow
dt.Rows.Add(dr)
End Sub
错误:无法将类型为"System.Windows.Forms.BindingSource"的对象强制转换为类型"System.Data.DataTable"。
这里
Dim dt As DataTable = DataTable1DataGridView.DataSource
你有DataSource
是对象,它指向System.Windows.Forms.BindingSource
,而不是DataTable
。
您需要了解DataSource
BindingSource
dim ds as DataSet =
DirectCast(DirectCast(DataTable1DataGridView.DataSource, BindingSource).DataSource, DataSet)
你做错了。您有BindingSource
是有原因的,因此请使用它。您根本不需要访问DataTable
。只需使用BindingSource
,您应该可以直接引用,因此您也不需要网格。
Dim rowView = DirectCast(DataTable1BindingSource.AddNew(), DataRowView)
rowView("SomeColumn") = someValue
DataTable1BindingSource.EndEdit()
当你绑定一个DataTable
时,数据实际上来自DefaultView
属性,这是一个DataView
。这就是为什么每个项目都是一个DataRowView
而不是一个DataRow
。在许多情况下,您可以像对待DataRow
一样对待DataRowView
,包括这种情况。但是,如果您有类型化的DataSet
,则可能更喜欢使用类型化的DataRow
。在这种情况下,请从DataRowView
的Row
属性中获取DataRow
,并将其转换为适当的类型:
Dim rowView = DirectCast(DataTable1BindingSource.AddNew(), DataRowView)
Dim row = DirectCast(rowView.Row, DataTable1DataRow)
rowView.SomeColumn = someValue
DataTable1BindingSource.EndEdit()