- 題名: データセットからの削除、追加
- 日時: 2003/11/01 18:24:43
- ID: 1272
- この記事の返信元: - (なし)
 
- この記事への返信: - [1280] Re[1]: データセットからの削除、追加2003/11/02 16:17:31
 
- ツリーを表示
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
以上です。
いつもお世話になります。基本的なことで申し訳ないのですが...。
データセット内のデータを削除するにはどうしたらよいのでしょうか?
(特定のDataRow を DataRowState.Deleted にするにはどうしたらよいのかという質問です。)
また、同様に、データセットにデータを追加するにはどうしたらよいのでしょうか?
(例えば、3つのテキストボックス TextBox1, TextBox2, TextBox3 に入っている値が、
フォーム上のボタンを押すと DataSet の新しい行に追加され、
その行の DataRow State が DataRowState.Added ようにするには、
ボタンにどういったコマンドを書けば良いのか、という質問です。)
上記に関しては、単純に dataRowMain.Delete() と書いてみる等
いろいろしてみたのですが、上手く書けたようでも、
実行時にエラー表示されるなどし、うまくいきませんでした。
DataRowState.Added に至っては見当もつきません。
大変恐縮ですが、どなたか、よろしくお願いいたします。