2013-07-06 54 views
0

我有一個主要表單可以找到連接到綁定源的DataGridView,以及第二個表單,用戶可以將新記錄輸入到DataGridView(並將更改保存到Access數據庫)。updateAll方法不保存第一條記錄

顯然,它工作正常,因爲DGV被刷新並添加了一個新行。但是,當我撥打UpdateAll方法TableAdpapterManager時,數據不會發送到數據庫。

然後會發生一件奇怪的事情:如果我嘗試添加多個記錄,則先前的「添加」記錄被髮送到數據庫。 (換句話說:如果我添加了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 

我不知道這是爲什麼如果它保存了第二條記錄的數據,爲什麼它不會添加第一條記錄呢?

有人看到我做錯了嗎?

謝謝!

+2

爲什麼選擇C#?這是VB.NET代碼。 – Tim

+0

C#和vb.net是非常接近的語言,他們理解vb.net很容易理解C#...我使用該標籤,以便C#程序員也可以幫助我! –

+1

@RafaelGil它在使用.NET的意義上類似。你應該標記.NET。 –

回答

0

您需要在DataGridView上進行EndEdit,以便在執行updateall之前讓最後一行進入DataSet。

+0

沒有解決...仍然是同樣的問題... 謝謝! –

+0

在這種情況下,我會進入調試模式並在調用UpdateAll之前檢​​查包含我的數據的DataTable。這將確認該行是否確實在DataTable中。如果沒有,那麼你就知道你必須集中精力在EndEdit上,或者將焦點以編程方式移動到另一行。 – Tarik