tableadapter不删除以编程方式删除的数据表行

时间:2019-01-20 23:11:38

标签: mysql delete-row datarow tableadapter

我有一个通过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,但是很茫然。有人可以帮忙吗?

1 个答案:

答案 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