Sql 通过函数从DataGridView更新多个DB表

Sql 通过函数从DataGridView更新多个DB表,sql,vb.net,datagridview,Sql,Vb.net,Datagridview,比如说,我有一个从SQL表获取数据的应用程序: Imports System.Data.SqlClient Public Class Form1 Private Sub Form1_Load(sender As System.Object, e As System.EventArgs) Handles MyBase.Load Dim dt As DataTable Dim QRY As String QRY = "SELECT * FROM Table1" dt = GetData(QRY)

比如说,我有一个从SQL表获取数据的应用程序:

Imports System.Data.SqlClient 
Public Class Form1

Private Sub Form1_Load(sender As System.Object, e As System.EventArgs) Handles MyBase.Load
Dim dt As DataTable
Dim QRY As String
QRY = "SELECT * FROM Table1"
dt = GetData(QRY)
DataGridView1.DataSource = dt
QRY = "SELECT * FROM Table2"
dt = GetData(QRY)
DataGridView2.DataSource = dt
End Sub

Public Function GetData(ByVal QRY As String) As DataTable
Dim dt As New DataTable
Dim con As New SqlConnection(connection string here)
Dim adapter As New SqlDataAdapter(QRY, con)
Try
con.Open()
adapter.Fill(dt)
con.Close()
Catch ex As Exception
MsgBox(ex.Message)
End Try
Return dt
End Function
End Class
我不知道如何通过adapter.update更新表1和表2,如果DataGridView 1和表2发生更改(添加行、删除行、编辑单元格)。
或者这是不可能的,adapter.update对通过my函数填充的DataGridView一无所知?

您可以使用adapter.update(dt)等效于使用adapter.Fill(dt)来更改dt内容。一旦dt成为DataGridView的数据源,您对它所做的更改(通过更新或任何其他方式)应该反映在DGV中。在任何情况下,请记住DGV和dt是不同的东西,因此您可能必须依赖.Refresh()来查看更改;当通过数据源影响DGV时,可能存在一些协调问题(通过数据源访问已删除的项目)。最安全/最简单的方法是直接从DGV执行任何修改。首先,我应该将DGV转换回DT,然后通过adapter.update更新DT?我知道如何对单个DT和DGV执行此操作,但对多个DT和DGV执行此操作?我应该创建几个适配器吗?您不能转换“将DGV转换回DT”。它们是不同的对象,执行完全不同的操作。数据表只包含信息。DGV以不同的方式获取信息(它拥有的东西之一,但也有一个执行许多其他操作的接口),其中一种方式是将dt设置为数据源。DGV中的内容受DataTable中内容更改的影响,但不是相反。请阅读我之前的评论,并稍微澄清一下您的想法:首先,您有一个DataTable(您可以逐行、逐列或使用适配器填充它),在未将DataGridView设置为数据源之前,对该DataTable所做的任何操作都不会影响DataGridView。即使这样做了,也可能会出现一些“协调问题”,正如我在原始信息中所解释的,因此我建议您甚至不要影响dt,而是直接影响DGV。一旦你清楚了这些想法(3种不同的东西,最终相关:适配器、dt和dgv),请准确地说出你想要什么。>一旦你清楚了这些想法(3种不同的东西,最终相关:适配器、dt和dgv),请准确地说出你想要什么。我明白这一点(或者只是认为我明白)。我有2个或更多的DGV(在我的第一条消息中),我想将更新的数据发送回DB。我找不到“adapter.update(dt)”的位置。我知道我的解释仍然很糟糕。很抱歉:/