我有一個主要表單可以找到連接到綁定源的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
我不知道這是爲什麼如果它保存了第二條記錄的數據,爲什麼它不會添加第一條記錄呢?
有人看到我做錯了嗎?
謝謝!
爲什麼選擇C#?這是VB.NET代碼。 – Tim
C#和vb.net是非常接近的語言,他們理解vb.net很容易理解C#...我使用該標籤,以便C#程序員也可以幫助我! –
@RafaelGil它在使用.NET的意義上類似。你應該標記.NET。 –