簡體   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