[英]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
。
您需要獲取BindingSource
的DataSource
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()
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.