updateAll方法不保存第一条记录

时间:2013-07-06 16:20:57

标签: .net vb.net

我有一个主表单,其中可以找到连接到绑定源的DataGridView,以及第二个表单,用户可以在其中输入DataGridView的新记录(并将更改保存到Access数据库)。

显然,它工作正常,因为DGV已刷新并添加了新行。但是,当我调用UpdateAll TableAdpapterManager方法时,数据不会发送到数据库。

然后发生了一件奇怪的事情:如果我尝试添加多条记录,之前的“添加”记录将被发送到DB。 (换句话说:如果我添加2条新记录,则只发送第一条记录,这意味着最后一条记录总是丢失)

主要表单代码:

Private Sub Button1_Click(sender As Object, e As EventArgs) Handles Button1.Click

    NovaPesquisa.ShowDialog(FilaDeEsperaBindingSource)
    GuardarFilaDeEspera()
End Sub

Public Sub GuardarFilaDeEspera()

    Me.Validate()
    FilaDeEsperaBindingSource.EndEdit()
    Me.TableAdapterManager.UpdateAll(Me.QuaerereDataSet)
End Sub

我已经找到了这样的问题,发现UpdateAll方法的返回值非常重要。在这种情况下,在第一个记录上,返回的值为0,并且从它的1开始(因为它正在更新前一个记录)

第二个表单代码:

Private WithEvents myBindingSource As BindingSource

Public Overloads Sub ShowDialog(ByVal bindingsource As BindingSource)

    myBindingSource = bindingsource
    Me.ShowDialog()
End Sub

Private Sub btnConfirmar_Click(sender As Object, e As EventArgs) Handles btnConfirmar.Click

    If String.IsNullOrWhiteSpace(comboActividade.Text) And _
       String.IsNullOrWhiteSpace(comboLocalização.Text) Then
        MessageBox.Show("Formulário inválido.", "Quaerere", _
                         MessageBoxButtons.OK, _
                         MessageBoxIcon.Exclamation)
    Else
        myBindingSource.AddNew()
        Me.Close()
    End If
End Sub

Private Sub AddingNew_Handler(ByVal sender As Object, e As System.ComponentModel.AddingNewEventArgs) Handles myBindingSource.AddingNew

    Dim dataTableView As DataView = TryCast(myBindingSource.List, DataView)
    Dim row As DataRowView = dataTableView.AddNew()
    row(COLUNA_PAÍS) = comboPaís.Text
    row(COLUNA_ACTIVIDADE) = comboActividade.Text
    row(COLUNA_LOCALIZAÇÃO) = comboLocalização.Text
    row(COLUNA_ESTADO) = _PESQUISA_EM_ESPERA
    e.NewObject = row
End Sub

我不知道为什么会这样,如果它保存了第二条记录的数据,为什么它也不会添加第一条记录呢?

有人看到我做错了吗?

谢谢!

1 个答案:

答案 0 :(得分:0)

您需要在DataGridView上使用EndEdit,以便在执行updateall之前让最后一行进入DataSet。