数据网格视图更新,在 vb.net windows 窗体中编辑和删除,使用多个表来填充 datagridview

Posted

技术标签:

【中文标题】数据网格视图更新,在 vb.net windows 窗体中编辑和删除,使用多个表来填充 datagridview【英文标题】:data grid view update ,Edit and delete in vb.net windows form that using multiple table to populate datagridview 【发布时间】:2014-01-06 07:20:13 【问题描述】:

我是 Windows 窗体应用程序的新手...

我正在使用 VB.NET windows 窗体并处理 DataGridView...

我已经从两个表中填充了那个 DataGridView

请告诉我如何将 DATAGridview 的记录添加、删除和编辑/更新回数据库。

我正在使用 SQLSERVER 2008 数据库

我有两个表1->CompanyMaster_tbl 在这有两个字段。 Cid and CompanyName,

cid是这个表的主键

2->DepartmentMaster_tbl 在这个有 4 个字段。 dtid,dtname,dtphon,dtmail,Cid

dtid 是主键,Cid 是外键.. 我的数据网格视图如下所示:

Dim adapter As SqlDataAdapter
Private Sub Form1_Load(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles MyBase.Load

  'NOTE: I removed the Using statements to ease your tests/understanding, but you shouldn't let the connections opened (or, at least, set connection-release part somewhere)
  Dim con As SqlConnection = New SqlConnection() 'SET THE CONNECTION STRING
  con.Open()

  adapter = New SqlDataAdapter("select c.CompanyName,d.dtName,d.dtPhone,d.dtEmail  from CompanyMaster_tbl c join  DepartmentMaster_tbl d on c.Cid=d.cId", con)

  Dim dt As DataTable = New DataTable()
  adapter.Fill(dt) 'Filling dt with the information from the DB
  gv.DataSource = dt 'Populating gv with the values in dt

End Sub

在更新按钮中我写了这样的代码:

Dim dt1 As DataTable = DirectCast(gv.DataSource, DataTable)
adapter.Update(dt1)

但在gridview中编辑任何内容后,我点击更新按钮,但我在这一行出现错误

da.Update(dt1)

错误: 当传递带有修改行的 DataRow 集合时,更新需要有效的 UpdateCommand。

提前致谢

【问题讨论】:

【参考方案1】:

如果您想在DataGridView 和数据库之间保持一些同步,则不应手动添加列/行,而应依赖DataSource 属性。适合您的案例的示例代码:

Using con As SqlConnection = New SqlConnection() 'You have to set the CONNECTION STRING
    con.Open()

    Using adapter As SqlDataAdapter = New SqlDataAdapter("select c.CompanyName,d.dtName,d.dtPhone,d.dtEmail  from CompanyMaster_tbl c join  DepartmentMaster_tbl d on c.Cid=d.cId", con)

        Dim dt As DataTable = New DataTable()
        adapter.Fill(dt) 'Filling dt with the information from the DB
        gv.DataSource = dt 'Populating gv with the values in dt

    End Using
End Using

上面的代码从数据库中提取你想要的所有信息,将其放入DataTable (dt),然后将其作为DataSource 提供给DataGridViewgv 现在拥有来自 dt 的所有值; dt 中的任何更改也会反映在 gv 中,反之亦然(这种耦合几乎是完美的,至少在更新值时;删除行/列或更改其基本配置时可能会出现一些问题)。您甚至可以将adapter 保留为全局变量(在Using 语句之外)并依靠它定期更新数据库(例如通过adapter.Update(dt))。

相当多的选择;但是,无论如何,在您的条件下,依靠DataSource 肯定更好。

【讨论】:

@user3106114 如果您有任何疑问,请随时询问。 我可以在加载事件中编写此代码,如何在更新按钮中编写代码 @user3106114 我在 SO 中编写的代码的重点是帮助您理解这个想法;从您的评论来看,您似乎不理解这个想法。让我做一个新的尝试:现在你正在逐行(和逐列)填充你的 gv,大概是在开始时。我的建议是,将所有行/列添加到 gv,将它们添加到 DataTable (dt),然后将此数据表设置为 gv 的数据源。这样,您就可以从任何地方访问 dt(例如:Dim dt as DataTable = Directcast(gv.DataSource, DataTable))然后您可以使用此 dt 来更新... @user3106114 你的数据库。我还写了一个关于此的示例:adapter.Update(dt) -> 如果您调用此代码(并且适配器已启动,如我的代码所示),您的数据库将使用 dt 中的所有更改(这是数据源)进行更新gv 的变化,因此将包括 gv 的所有更改)。如果您在理解所有这些想法时遇到问题,请发布您尝试过的代码,我可能会给您一些指示(上次;如前所述,我不是来提供自定义解决方案的)。 先生,我明白你做了什么..但我在更新网格视图中的特定列时感到困惑,如何在 sql server 中更新

以上是关于数据网格视图更新,在 vb.net windows 窗体中编辑和删除,使用多个表来填充 datagridview的主要内容,如果未能解决你的问题,请参考以下文章

Vb.net 编辑 DatagridView

将数据网格视图行添加到 vb.net 中的 sql 表

SQL 在 VB.NET 中更新数据库,遇到问题

无法使用 vb.net 将数据网格更新为 dbf

VB.net 中的 DataGridView 不允许我更新

在 vb.net 的 datagridview 中添加行号