我有一个通过tableadpators和TableAdpaterManager与MYSQL数据库链接的数据集(均通过设计器视图签名)。视觉工作室的路线是设置数据源,然后将各个表拖到表单上。
现在,如果我手动编辑datagridviews,则可以更新,插入和删除数据库中的记录。但是,如果我以编程方式删除数据行,则不会在数据库中删除行。
删除代码:
Public Shared Sub RemoveDuplicateRowsViaField(dt As DataTable, RowName As String)
Dim rowList As New List(Of String)
Dim dr As DataRow
For i = dt.Rows.Count - 1 To 0 Step -1
dr = dt(i)
If rowList.Contains(dr.Item(RowName)) Then
dt.Rows.Remove(dr)
Else
rowList.Add(dr.Item(RowName))
End If
Next
dt.DataSet.AcceptChanges()
End Sub
和“保存”代码:
Private Sub SaveOrganisationsBT_Click(sender As Object, e As EventArgs) Handles SaveOrganisationsBT.Click
Me.Validate()
Me.Gi_usersBindingSource.EndEdit()
Me.TableAdapterManager.UpdateAll(Me.dbDS)
End Sub
我已经尝试了很多事情,包括在数据集设计视图中查看tableAdapters,但是很茫然。有人可以帮忙吗?
答案 0 :(得分:0)
没关系。解决了。它似乎与在数据源上使用AcceptChanges
有关。下面的代码有效。我已经读过datarow.remove既删除行又接受更改。我猜测如果接受更改,则表适配器无法识别出它是否需要从其非“脏”状态中删除,因为更改已被接受,从而清除了行的状态?只是假设。工作代码:
Public Shared Sub RemoveDuplicateRowsViaField(dt As DataTable, RowName As String)
Dim rowList As New List(Of String)
Dim dr As DataRow
For i = dt.Rows.Count - 1 To 0 Step -1
dr = dt(i)
If rowList.Contains(dr.Item(RowName)) Then
dr.Delete()
Else
rowList.Add(dr.Item(RowName))
End If
Next
End Sub