我正在使用兩個gridviews按鈕來交換兩者之間的行。現在我想要做的是,對GridView進行更改,嘗試將它們轉換爲數據表,然後使用dataadapter.update(datatable)命令更新數據庫。但更改不會在數據庫中發生。這是我的代碼。提前致謝。無法使用adapter.update命令獲取基於綁定到gridview的數據表中更改的數據庫更新
Private Sub SubmitToDbButton_Click(sender As Object, e As EventArgs) Handles SubmitToDbButton.Click
Dim con As New SqlConnection
Dim dt1 As New DataTable
Dim dt2 As New DataTable
Dim ds As New DataSet
Dim da1 As New SqlDataAdapter("Select * from Table_1", con)
Dim builder1 As New SqlCommandBuilder(da1)
Try
con.ConnectionString = "Data Source=N0PCRIM9L3RYX1;Initial Catalog=RandomFormDB;Integrated Security=True"
con.Open()
da1.Fill(dt1)
dt1 = TryCast(DataGridView1.DataSource, DataTable) 'datatable gets new rows here
dt1.AcceptChanges()
da1.Update(dt1)
con.Close()
Catch ex As System.Data.SqlClient.SqlException
MsgBox(ex.Message)
End Try
End Sub
這裏是完整的代碼。我是vb的新手,所以這真的讓我失望了。數據表和從查詢返回的表具有相同的列。但不知何故,dataadapter無法理解這一點。怎麼做?
Imports System.Data.SqlClient
Public Class Form1
Dim L As Load_Data
Public Sub LoadButton_Click(sender As Object, e As EventArgs) Handles LoadButton.Click
L = New Load_Data()
L.Load()
End Sub
Private Sub LTRButton_Click(sender As Object, e As EventArgs) Handles LTRButton.Click
Dim dt1 As DataTable 'moves selected row from left gridview to right one
Dim dt2 As DataTable
Dim str As String = Nothing
dt1 = TryCast(DataGridView1.DataSource, DataTable)
dt2 = TryCast(DataGridView2.DataSource, DataTable)
Dim selecetedId As String = DataGridView1.SelectedRows(0).Cells(1).Value
Dim row As DataRow
For Each row In dt1.Rows
If row.Item("ID") = selecetedId Then
dt2.ImportRow(row)
dt1.Rows.Remove(row)
Exit For
End If
Next
End Sub
Private Sub RTLButton_Click(sender As Object, e As EventArgs) Handles RTLButton.Click
Dim dt1 As DataTable 'moves selected row from right gridview to left one
Dim dt2 As DataTable
Dim str As String = Nothing
dt1 = TryCast(DataGridView1.DataSource, DataTable)
dt2 = TryCast(DataGridView2.DataSource, DataTable)
Dim selecetedId As String = DataGridView2.SelectedRows(0).Cells(1).Value
Dim row As DataRow
For Each row In dt2.Rows
If row.Item("ID") = selecetedId Then
dt1.ImportRow(row)
dt2.Rows.Remove(row)
Exit For
End If
Next
End Sub
Private Sub SubmitToDbButton_Click(sender As Object, e As EventArgs) Handles SubmitToDbButton.Click
Dim con As New SqlConnection 'this sub submits changes to database
Dim dt1 As New DataTable 'problem lies in this function
Dim dt2 As New DataTable
Dim ds As New DataSet
Dim da1 As New SqlDataAdapter("Select * from Table_1", con)
Dim builder1 As New SqlCommandBuilder(da1)
Try
con.ConnectionString = "Data Source=N0PCRIM9L3RYX1;Initial Catalog=RandomFormDB;Integrated Security=True"
con.Open()
da1.Fill(dt1)
dt1 = TryCast(DataGridView1.DataSource, DataTable)
'dt1.AcceptChanges()
da1.Fill(dt1)
da1.Update(dt1)
con.Close()
Catch ex As System.Data.SqlClient.SqlException
MsgBox(ex.Message)
End Try
End Sub
End Class
Public Class Load_Data
Public Sub Load()
Dim con As New SqlConnection
Dim da As New SqlDataAdapter("Select * from Table_1; Select * from Table_2", con)
Dim ds As New DataSet()
Try
con.ConnectionString = "Data Source=N0PCRIM9L3RYX1;Initial Catalog=RandomFormDB;Integrated Security=True"
con.Open()
da.Fill(ds)
Form1.DataGridView1.DataSource = ds.Tables(0)
Form1.DataGridView2.DataSource = ds.Tables(1)
Catch ex As System.Data.SqlClient.SqlException
MsgBox(ex.Message)
End Try
con.Close()
End Sub
End Class
爲什麼TryCast會添加一個新行? – NoChance 2015-02-11 06:09:57
plz查看完整的代碼,我現在已經發布。由於兩個GridView之間的多次交換,數據表經歷了多行更改。直接從gridview的trycasting給我改變的表。但da.update(dt1)不適用於此。如果不是這樣,我該怎麼做這個任務? – 2015-02-11 10:13:20