DOBON.NET DOBON.NETプログラミング掲示板過去ログ

データセットからの削除、追加

分類:[.NET]

いつもお世話になります。基本的なことで申し訳ないのですが...。

データセット内のデータを削除するにはどうしたらよいのでしょうか?
(特定のDataRow を DataRowState.Deleted にするにはどうしたらよいのかという質問です。)

また、同様に、データセットにデータを追加するにはどうしたらよいのでしょうか?
(例えば、3つのテキストボックス TextBox1, TextBox2, TextBox3 に入っている値が、
フォーム上のボタンを押すと DataSet の新しい行に追加され、
その行の DataRow State が DataRowState.Added ようにするには、
ボタンにどういったコマンドを書けば良いのか、という質問です。)

上記に関しては、単純に dataRowMain.Delete() と書いてみる等
いろいろしてみたのですが、上手く書けたようでも、
実行時にエラー表示されるなどし、うまくいきませんでした。
DataRowState.Added に至っては見当もつきません。

大変恐縮ですが、どなたか、よろしくお願いいたします。
fukuです。説明するのが大変ですのでサンプルを作ってみました。
DataSetの「m_MyDataSet」は、メンバー変数で中身は「テストテーブル」
というテーブル(DataTable)が設定してあります。


    Private Sub 行の削除(ByVal pi_intRowNumber As Integer)
        Dim myDataTable As DataTable
        Dim myDataRowCollection As DataRowCollection
        Dim myDataRow As DataRow

        'DataSetにはテーブルが入っているとします
        myDataTable = m_MyDataSet.Tables("テストテーブル")
        'テーブルの行全てを取得
        myDataRowCollection = myDataTable.Rows
        '対象の行を取得 インデックスは0から
        myDataRow = myDataRowCollection.Item(pi_intRowNumber)
        '注 行のRowState が Added の場合は、行がテーブルから削除されます。
        myDataRow.Delete()

        'これでもいけます
        'myDataTable.Rows(pi_intRowNumber).Delete()

        myDataRow = Nothing
        myDataRowCollection = Nothing
        myDataTable = Nothing

    End Sub

    Private Sub 行の追加()
        Dim myDataTable As DataTable
        Dim myDataRow As DataRow

        myDataTable = m_MyDataSet.Tables("テストテーブル")

        'DataRowオブジェクトを生成
        'テーブルオブジェクトのNewRowを使うことによりフィールドも定義されます
        myDataRow = myDataTable.NewRow
        '列に値を追加
        myDataRow.Item(0) = Me.TextBox1.Text
        myDataRow.Item(1) = Me.TextBox2.Text
        'テーブルに行を追加
        myDataTable.Rows.Add(myDataRow)

        myDataRow = Nothing
        myDataTable = Nothing

    End Sub

    Private Sub 行のステータスを確認()
        Dim myDataTable As DataTable
        Dim strState As String
        Dim intRowCount As Integer

        myDataTable = m_MyDataSet.Tables("テストテーブル")

        For intRowCount = 0 To myDataTable.Rows.Count - 1 Step 1

            If myDataTable.Rows(intRowCount).RowState = DataRowState.Added Then
                strState = "行が DataRowCollection に追加されましたが、 AcceptChanges が呼び出されていません。"

            ElseIf myDataTable.Rows(intRowCount).RowState = DataRowState.Deleted Then
                strState = "DataRow の Delete メソッドを使用して行が削除されました。"

            ElseIf myDataTable.Rows(intRowCount).RowState = DataRowState.Detached Then
                strState = "行が作成されましたが、どの DataRowCollection にも追加されていません。 DataRow は、作成された直後からコレクションに追加されるまでの間、またはコレクションから削除された場合に、この状態になります。"

            ElseIf myDataTable.Rows(intRowCount).RowState = DataRowState.Modified Then
                strState = "行が変更されましたが、 AcceptChanges が呼び出されていません。"

            ElseIf myDataTable.Rows(intRowCount).RowState = DataRowState.Unchanged Then
                strState = "前回 AcceptChanges が呼び出されて以降、この行は変更されていません。"
            End If

            Debug.WriteLine(intRowCount.ToString & ":" & strState)
        Next intRowCount

    End Sub

以上です。
fukuさん、わざわざサンプルを作っていただいて、ありがとうございました。
体調を崩しており、パソコンに触れる状態でなく、お返事遅れてしまいました。

今日やっといただいたサンプルを動かしました。
詳細は勉強不足でまだ理解しきれていませんが、無事に動作させて
感じがつかめました。

どうもありがとうございました。
これからもよろしくおねがいいたします。
解決済み!

DOBON.NET | プログラミング道 | プログラミング掲示板