0

DataTable からレコードを削除し、接続されているデータベースを更新しようとしています。

DataGridView の行を削除してから、次を使用してデータセットを更新します。

                Me.Tab2_DGVDuty.Rows.RemoveAt(Me.Tab2_DGVDuty.CurrentRow.Index)
                ds1.AcceptChanges()
                Tab2_DGVDuty.Refresh()

次に、次のように adapter.update を呼び出します。

            Dim adapter As New SqlDataAdapter
            Dim cmdBuilder As New SqlCommandBuilder(adapter)
            Dim DutyDetails As String = "SELECT * from MyTable"

            adapter.SelectCommand = New SqlCommand(DutyDetails, SQLConn)
            adapter.UpdateCommand = cmdBuilder.GetUpdateCommand
            adapter.DeleteCommand = cmdBuilder.GetDeleteCommand

            Dim cb As SqlCommandBuilder = New SqlCommandBuilder(adapter)

            adapter.Update(ds1.Tables("DT_Table"))

しかし、データをリロードすると、レコードはまだそこにあります。値を変更して更新すると、これは正常に機能しますが、何らかの理由で削除されません。

どんな助けでも大歓迎です。

編集:OK、以下に提案するように削除を次のように変更しました:

ds1.Tables("DT_Table").Rows(Tab2_DGVDuty.CurrentRow.Index).Delete()

これはボタンに取り付けられており、最初は問題なく削除されますが、別のレコードを削除するために 2 回目に押すと何も起こりません。私が使用する場合

ds1.AcceptChanges()

その後、正常に動作します。ただし、上記を使用すると、以下のコードはデータベースから何も削除しません。

            Dim adapter As New SqlDataAdapter
            Dim cmdBuilder As New SqlCommandBuilder(adapter)
            Dim DutyDetails As String = "SELECT * from MyTable"

            adapter.SelectCommand = New SqlCommand(DutyDetails, SQLConn)
            adapter.UpdateCommand = cmdBuilder.GetUpdateCommand
            adapter.DeleteCommand = cmdBuilder.GetDeleteCommand

            Dim cb As SqlCommandBuilder = New SqlCommandBuilder(adapter)

            adapter.Update(ds1.Tables("DT_Table"))
4

1 に答える 1

2
  1. DataRowから削除したくない、削除しDataTableたいDelete

    ds1.Tables("DT_Table").Rows(Tab2_DGVDuty.CurrentRow.Index).Delete()
    
  2. は、この行がに変更されるため、この行が変更されたことを認識しないためds1.AcceptChanges()、後で呼び出さないでください。 あなたではなく、暗黙のうちに最後のステップとして呼び出します。UpdateRowStateUnchangedDataAdapter.UpdateAcceptChanges

  3. 私はそれTab2_DGVDutyがであり、DataGridViewではないと思いDataTableます、私はそれを上記で考慮しました。

于 2013-02-12T12:55:40.663 に答える