我正在使用两个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