Datagridview 中的更改未保存在表 SQLite vb.net 中

Posted

技术标签:

【中文标题】Datagridview 中的更改未保存在表 SQLite vb.net 中【英文标题】:Changes in Datagridview not saving in table SQLite vb.net 【发布时间】:2017-05-30 04:57:13 【问题描述】:

我正在尝试将对 datagridview 所做的更改保存到表 tbl_invent 中,我对 datagridview 所做的更改但它没有保存到表(数据库)中,它也没有任何错误,我收到的只是一条消息说“记录更新= 0”。谁能指出我正确的方向?

    Dim da As New SQLiteDataAdapter("select * from tbl_Invent", connection)
    Dim ds As New DataSet
    'Dim cmdbuilder As New SQLite.SQLiteCommandBuilder(da)

    Dim i As Integer
    da.TableMappings.Add("tbl_Invent", "tbl_Invent") 'add due to error unable to Update unable to find TableMapping['Table'] or DataTable 'Table'
    Try
        i = da.Update(ds, "tbl_Invent")
        MsgBox("Records Updated= " & i)

    Catch ex As Exception
        MsgBox(ex.Message)
    End Try
    connection.Close()

我已经查看了这个帖子: How to save changes from DataGridView to the database?

-和-

Datagridview save changes to Database vb.net

非常感谢您。

【问题讨论】:

根据该代码,您正在创建一个新的,即 EMPTY,DataSet,然后尝试将其中包含的更改保存回您的数据库。如果DataSet 根本不包含任何内容,那么显然它不包含任何更改,因此没有什么可保存的。您需要先创建一个DataTable 并将其绑定到网格,然后在网格中进行更改,然后将该DataTable 传递给您的Update 调用。 我添加了 dim dt 作为新的数据表,da.Fill(dt),DataGridView1.DataSource = dt 然后更改 da.update(ds,"dt")。仍然没有保存。我想我在 da.update 中犯了一个错误……或者我所做的都是错的? @jmcilhinney 在 vbforums 中阅读了您的答案后(我假设它是您的同名),我还添加了 Dim dt As DataTable = ds.Tables("tbl_Invent"),仍然没有任何保存 【参考方案1】:

很明显,如果您在创建/填充DataTable 和尝试保存更改之间不进行任何更改,您将不会保存任何更改。您需要创建DataTable,将其填充并以一种方法绑定(可能是表单的Load 事件处理程序),然后用户进行更改,然后将相同DataTable 的更改保存在另一个方法(可能是ButtonClick 事件处理程序。例如

Private table As New DataTable
Private adapter As New SqlDataAdapter("SQL query here", "connection string here")
Private builder As New SqlCommandBuilder(adapter)

Private Sub Form1_Load(sender As Object, e As EventArgs) Handles MyBase.Load
    adapter.Fill(table)
    BindingSource1.DataSource = table
    DataGridView1.DataSource = BindingSource1
End Sub

Private Sub Button1_Click(sender As Object, e As EventArgs) Handles Button1.Click
    BindingSource1.EndEdit()
    adapter.Update(table)
End Sub

DataTable 是在表单创建时创建的,用户在网格中进行更改并单击Button,然后您从相同的DataTable 保存更改,而不是您刚刚创建的新更改不包含任何更改。

【讨论】:

谢谢你。我在 VB 中编码非常生锈,现在我正在尝试重新学习所有内容(我停止编码 vb 6 仍然是新的)。快速提问虽然我有 5 个相同形式的数据网格视图(每个选项卡中有 1 个),我猜我将为每个数据表创建一个数据表,它可以放在 tabpage_enter() 事件中吗?还是必须在 onload 事件上?

以上是关于Datagridview 中的更改未保存在表 SQLite vb.net 中的主要内容,如果未能解决你的问题,请参考以下文章

关于DataGridView修改后保存的问题

使用PLSQL过程记录未保存在表中

Datagridview编辑/保存按钮

记录未使用 PLSQL 过程保存在表中

C# 问题:如何将在 DataGridView 中所做的更改保存回使用的 DataTable?

每次更新 datagridview 时如何创建历史日志