- 題名: 既に値がセットされているDataSetに列を新規で追加
- 日時: 2005/03/14 18:01:34
- ID: 9782
- この記事の返信元:
- (なし)
- この記事への返信:
- [9790] Re[1]: 既に値がセットされているDataSetに列を新規で追加2005/03/15 8:47:56
- ツリーを表示
> DataTableオブジェクトの > ImportRow・LoadDataRow・NewRowメソッド > を調べてみてください。 追加したいのは、値が入っていない部分の列の内容であって、 行ではないので、この場合、関係ないと思いますが。 質問の意図は、 読み込み済みのデータに、新しく追加した列の分の値を各行に割り付けたい(合成したい) が簡単にできないか、ってことではないですか? ●Datatableを書き換えしてなくて行状態がリセットされてもよいのであれば、 単にFillしてください。 他の方法を採る意味は、(滅多に)ないです。 もちろん、Datatableにキーを設定してあれば、クリアはしなくていいです。 ●それまで一生懸命編集した内容を維持したいのであれば、根性です。 同じ条件で比較用のキーの列と追加したい値の列を別の仮DatatableにFillして、 地道にFor each rowでループしながらキーで一致したRowに代入していくしか ないのかな、と思います。 ※両方のDatatableにきちんと主キーを付けてあるのが前提です。 例えばキーが二つだとして・・・ tmpTable_forAppendNewColValue:比較用のキーと追加したい項目だけのDatatable orgTable:新しい列の定義だけを追加済みの元のDatatable For Each rw_forAppend As DataRow In _ tmpTable_forAppendNewColValue.Select("", "", DataViewRowState.CurrentRows) Dim orgrw As DataRow = _ orgTable.Rows.Find(New Object() {rw_forAppend("col1_k"), rw_forAppend("col2_k")}) If Not (orgrw Is Nothing) Then orgrw("newcol1") = rw_forAppend("newcol1") End If Next みたいな? DataViewRowState.CurrentRowsにしたのは、削除(予定)のは、いいや、と思ったからです。 全部やるならSELECTでなくてRowsと書けば良いです。 ※埋めるためのSQLは、キー列群と増える列の分だけにしてください。メモリの無駄です。 また、終わったらすぐDispose。邪魔なので。 なお、全ての行が「Modified」になりますので、行ステートでDB更新処理を 振り分けているのであれば、更新実行時にUpdateばかりが大量に発生しますからご注意を・・・。
分類:[.NET]
始めまして、いつも拝見させていただいております。
Luckと申します。
現在OleDbDataAdapterのFillメソッドを利用して
DataSetに取得した内容が格納されております。
---->
Adapter= New System.Data.OleDb.OleDbDataAdapter(("SELECT * FROM AAA", oleCon)
Adapter.Fill(Dataset, 0, STRDTLCNT, "W_HATTYU")
<----
テーブルAAAに発行したクエリが出力した内容がDataSetに入っております。
このDataSetに新たに列を追加したいのですが、
なかなか解決策が見つかりません。
皆様のお知恵をお借りできないでしょうか
また、何かヒントがあればご教授願います。
よろしくお願いします。
テーブル:AAA
|Column1|Column2|Column3|
|a1 |b1 |c1 |
|a2 |b2 |c2 |
|a3 |b3 |c3 |
をデータセットにセットし、
データセット:Dataset
|Column1|Column2|Column3|
|a1 |b1 |c1 |
|a2 |b2 |c2 |
|a3 |b3 |c3 |
ソースから列を追加したい
新たなデータセット:Dataset
|Column1|Column2|Column3|NewColumn
|a1 |b1 |c1 |D1
|a2 |b2 |c2 |D2
|a3 |b3 |c3 |D3