繁体   English   中英

如何将 Databound Gridview 转换为 Datatable?

[英]How to cast Databound Gridview to Datatable?

我正在尝试向数据绑定datagridview添加行

代码:

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”的 object 转换为类型“System.Data.DataTable”。

这里

Dim dt As DataTable = DataTable1DataGridView.DataSource

你有DataSource是 object 它指向System.Windows.Forms.BindingSource ,而不是DataTable

您需要获取BindingSourceDataSource

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 在这种情况下,从DataRowViewRow属性中获取DataRow并将其转换为适当的类型:

Dim rowView = DirectCast(DataTable1BindingSource.AddNew(), DataRowView)
Dim row = DirectCast(rowView.Row, DataTable1DataRow)

rowView.SomeColumn = someValue
DataTable1BindingSource.EndEdit()

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM