【问题标题】:DataGridView Save to Database on CellValueChanged EventDataGridView 在 CellValueChanged 事件上保存到数据库
【发布时间】:2016-07-17 12:22:01
【问题描述】:

当用户进行更改时,我正在尝试将多个数据网格视图上的更改自动保存回我的数据库。如果我将它绑定到按钮单击事件,我的代码可以正常工作,但当我将它绑定到 cellvaluechanged 事件时则不行。有任何想法吗?它仍然单步执行代码,没有抛出任何错误,只是没有更新数据库。

Private dgv1_Source As New BindingSource()
Private dgv1_Adapter As New MySql.Data.MySqlClient.MySqlDataAdapter()
Private dgv2_Source As New BindingSource()
Private dgv2_Adapter As New MySql.Data.MySqlClient.MySqlDataAdapter()
Private dgv3_Source As New BindingSource()
Private dgv3_Adapter As New MySql.Data.MySqlClient.MySqlDataAdapter()
Private dgv4_Source As New BindingSource()
Private dgv4_Adapter As New MySql.Data.MySqlClient.MySqlDataAdapter()

Private Sub MainLoad(sender As Object, e As EventArgs) Handles MyBase.Load

    'Grid 1
    dgv1.DataSource = dgv1_Source
    Dim selectCommand As String = "SELECT * FROM Table1"
    dgv1_Adapter = New MySql.Data.MySqlClient.MySqlDataAdapter(selectCommand, SQL_ConnectionString)
    Dim commandBuilder As New MySql.Data.MySqlClient.MySqlCommandBuilder(dgv1_Adapter)
    Dim table As New DataTable()
    table.Locale = System.Globalization.CultureInfo.InvariantCulture
    dgv1_Adapter.Fill(table)
    dgv1_Source.DataSource = table

    'Grid 2
    dgv2.DataSource = dgv2_Source
    selectCommand = "SELECT * FROM Table2"
    dgv2_Adapter = New MySql.Data.MySqlClient.MySqlDataAdapter(selectCommand, SQL_ConnectionString)
    commandBuilder = New MySql.Data.MySqlClient.MySqlCommandBuilder(dgv2_Adapter)
    table = New DataTable()
    table.Locale = System.Globalization.CultureInfo.InvariantCulture
    dgv2_Adapter.Fill(table)
    dgv2_Source.DataSource = table

    'Grid 3
    dgv3.DataSource = dgv3_Source
    selectCommand = "SELECT * FROM Table3"
    dgv3_Adapter = New MySql.Data.MySqlClient.MySqlDataAdapter(selectCommand, SQL_ConnectionString)
    commandBuilder = New MySql.Data.MySqlClient.MySqlCommandBuilder(dgv3_Adapter)
    table = New DataTable()
    table.Locale = System.Globalization.CultureInfo.InvariantCulture
    dgv3_Adapter.Fill(table)
    dgv3_Source.DataSource = table

    'Grid 4
    dgv4.DataSource = dgv4_Source
    selectCommand = "SELECT * FROM Table4"
    dgv4_Adapter = New MySql.Data.MySqlClient.MySqlDataAdapter(selectCommand, SQL_ConnectionString)
    commandBuilder = New MySql.Data.MySqlClient.MySqlCommandBuilder(dgv4_Adapter)
    table = New DataTable()
    table.Locale = System.Globalization.CultureInfo.InvariantCulture
    dgv4_Adapter.Fill(table)
    dgv4_Source.DataSource = table

End Sub
Private Sub CellValueChangedEvent(ByVal sender As DataGridView, e As DataGridViewCellEventArgs) Handles dgv1.CellValueChanged, dgv2.CellValueChanged, _
    dgv3.CellValueChanged, dgv4.CellValueChanged

    Try
        'Perform Calculations
        SaveAll() 'This one does not work.  No errors are thrown.
    Catch ex As Exception
        MsgBox(ex.Message)
    End Try

End Sub
Private Sub ButtonClickEvent() Handles Button1.Click
    SaveAll() 'This one works
End Sub
Private Sub SaveAll()
    dgv1_Adapter.Update(CType(dgv1_Source.DataSource, DataTable))
    dgv2_Adapter.Update(CType(dgv2_Source.DataSource, DataTable))
    dgv3_Adapter.Update(CType(dgv3_Source.DataSource, DataTable))
    dgv4_Adapter.Update(CType(dgv4_Source.DataSource, DataTable))
End Sub

【问题讨论】:

    标签: vb.net datagridview ado.net


    【解决方案1】:

    添加此代码并解决了问题。

    Private Sub SaveAll()
        dgv1_Source.EndEdit()
        dgv2_Source.EndEdit()
        dgv3_Source.EndEdit()
        dgv4_Source.EndEdit()
    
        dgv1_Adapter.Update(CType(dgv1_Source.DataSource, DataTable))
        dgv2_Adapter.Update(CType(dgv2_Source.DataSource, DataTable))
        dgv3_Adapter.Update(CType(dgv3_Source.DataSource, DataTable))
        dgv4_Adapter.Update(CType(dgv4_Source.DataSource, DataTable))
    End Sub
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2017-01-27
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2013-08-03
      • 2018-02-01
      • 1970-01-01
      相关资源
      最近更新 更多