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

ListBoxの内容をdatasetにいれるには

環境/言語:[C# VS2005 WindowsXp]
分類:[.NET]

いつもありがとうございます。
以下について教えてください。
(以前に別件で質問していた内容の続きですが、前回のタイトルの件については解決し、別の疑問となったため別で立てさせていただきました)

C# VS2005 WindowsXpで開発しています。

ListBoxを2つ用意し複数選択して相互にデータを移す処理を行っています。
もとのデータはDBから取得するのですがデータバインドすると編集できないため、初期表示時にDBから取得したデータを一旦ArrayListにいれ、それをListBoxにAddRangeしています。
ArrayListは初期時にデータを表示するためにのみ使用しその後は使用していません。

ListBox1.DisplayMemberにValueを、ListBox1.ValueMemberにKeyを設定しています
(ListBox2も同様)

ListBox間でデータを双方向にAdd/Removeした結果、ListBox2の内容をDBに反映したいのですが、そのために一旦datasetにいれたいと思っています。

この画面で選択したコードの一覧に対し、別画面で情報を付加しており、それらの情報は保持したままデータの更新を行うため、データアダプタでのupdateを行いたいためです。

非連結のListBoxの内容をDataSetにいれることはできるのでしょうか?
DataSetにはListBoxのValueMemberのみがinsert/Update/Deleteできればいいです。
手持ちの書籍やネットで調べたりしたのですが、どうやれば実現できるのかわかりません。

なにとぞよろしくお願いします。
■No20890に返信(ゆうさんの記事)
itemかなにかでインデクサで全件DataTableに格納しなおして、DataSetに追加しては駄目ですか?

ArrayListをクラスのフィールドにもってたら、ArrayListの中身が更新されてたりするかもしれませんが。更新されてたらそっからDataTableを起こすのもありでしょうが。

さらっとサンプルも作らず考えてみただけなので、検討違いな事をいっていたら申し訳ありません。
アドバイスありがとうございます。
情けないのですが「itemかなにかでインデクサで全件DataTableに格納しなおして、DataSetに追加」を具体的にどう実現していいのかがわかりません。

申し訳ないのですがもう少しアドバイスいただけないでしょうか?
よろしくお願いします。


■No20899に返信(じゅでさんの記事)
> ■No20890に返信(ゆうさんの記事)
> itemかなにかでインデクサで全件DataTableに格納しなおして、DataSetに追加しては駄目ですか?
>
> ArrayListをクラスのフィールドにもってたら、ArrayListの中身が更新されてたりするかもしれませんが。更新されてたらそっからDataTableを起こすのもありでしょうが。
>
> さらっとサンプルも作らず考えてみただけなので、検討違いな事をいっていたら申し訳ありません。
2007/11/09(Fri) 09:37:25 編集(投稿者)
2007/11/09(Fri) 09:11:54 編集(投稿者)

■No20910に返信(ゆうさんの記事)
一番簡単そうなので、動かしてもみてないですが・・・

// DataTableの作成(DataTableのカラム設定などは、知らないのでCreateDataTable内の処理でごまかします。
DataTable dt = CreateDataTable();

// 全アイテム要素を取得し、DataRowに格納しなおす。
foreach (object obj in listBox1.Items)
{
  DataRow dr = dt.NewRow();
arraylistの中身の型 buf = (arraylistの中身の型)obj;

dr["hogeカラム"] = buf.hoge;

  dt.Rows.Add(dr);
}

DataSet ds = new DataSet();
ds.Tables.Add(dt);

こんな感じでもいいですし、前に書いてあるとおり、
ArrayListはクラスで参照渡しとしてなっているなら、
ArrayList自体のカウント分インデクサで値を取得し、
DataTableを作成するもよしです。
(こっちは、ちゃんと値更新されてるんですかね?削除とか・・・
どうやって格納してるんだろうか(´ρ`))

DataSetに突っ込む事だけを考えてとりあえず作ってみましたが
こんなんじゃ駄目ですか?

追記

SqlDataAdapter da = new SqlDataAdapter(sqlStr, connStr);
DataSet ds = new DataSet();
da.Fill(ds);

このDataSetからテーブル取得して編集するというかたちになるのかな?

追記2

InsertCommandの設定忘れると、NewRowで追加してもエラーが発生しますよ。
ありがとうございました。

理解して実際動作できるようになるまでかなり時間を取ってしまいましたが、なんとかやりたいことができました。
解決済み!

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