Tableadapter не удаляет программно удаленные строки данных - PullRequest
0 голосов
/ 21 января 2019

У меня есть набор данных, связанный с базой данных MYSQL через tableadpators и TableAdpaterManager (все с автографом через представление конструктора).Визуальный маршрут студии настраивал источник данных, а затем перетаскивал отдельные таблицы на форму.

Теперь я могу обновлять, вставлять и удалять записи в базе данных, если я вручную редактирую представления данных.Однако, если я удаляю datarows программно, строки не удаляются в базе данных.

Код удаления:

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

Я пробовал много вещей, включая просмотр таблицы Адаптеры в представлении дизайна набора данных, но я в недоумении.Кто-нибудь может помочь?

1 Ответ

0 голосов
/ 21 января 2019

Nevermind.Решил это.Похоже, что использование источника данных 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
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...