【问题标题】:updateAll method not saving the first recordupdateAll 方法不保存第一条记录
【发布时间】:2013-07-06 16:20:56
【问题描述】:

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

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

然后发生了一件奇怪的事情:如果我尝试添加多条记录,则先前“添加”的记录被发送到 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

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

有人看出我做错了吗?

谢谢!

【问题讨论】:

  • 为什么选择 C#?这是 VB.NET 代码。
  • C#和vb.net是很相近的语言,懂vb.net的人很容易懂C#...我用那个标签是为了让C#程序员也能帮帮我!
  • @RafaelGil 它在使用 .NET 的意义上是相似的。您应该标记 .NET。
  • 我原以为您拨打FilaDeEsperaBindingSource.EndEdit 就足够了,但请尝试在AddingNew_Handler 中添加row.EndEdit
  • @SimonBelanger:有些人只阅读符合他们标签偏好的问题。如果您将 C# 作为您最喜欢的标签,而没有 .NET,那么您将永远不会在这种情况下看到这个问题。

标签: .net vb.net


【解决方案1】:

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

【讨论】:

  • 没有解决...还是同样的问题...谢谢!
  • 在这种情况下,我会进入调试模式并在调用 UpdateAll 之前检查包含我的数据的 DataTable。这将确认该行是否确实在 DataTable 中。如果不是,那么您知道您必须将精力集中在 EndEdit 上,或者可能以编程方式将焦点转移到另一行。
猜你喜欢
  • 2015-09-06
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2018-03-02
  • 1970-01-01
  • 2023-04-07
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多