- PR -

Winアプリ データバインディングしたComboBoxへのデータ追加

1
投稿者投稿内容
Micky
大ベテラン
会議室デビュー日: 2002/09/04
投稿数: 137
投稿日時: 2004-01-29 10:45
Mickyでございます。
各所でお世話になっております。

表題の件ですが、一旦データバインディングにより
データを設定したComboBoxに「未選択」等のデータを
後で追加する方法を模索しています。

ASP.Netのドロップダウンでは簡単に出来たのですが、
同じ様には行かないみたいですね

表示したいマスタテーブルから一旦DataViewを取得して
これに「未選択」行を追加した後、バインディングする方法を
考えたのですが、追加したデータはどうも一番下に表示されて
しまうみたいでうまくいきませんでした。
(ソートしても一番下に来てしまうみたい・・・)

最後の手段として、一番最初に「未選択」データを追加して
あとは、マスターデータをコピーした、新規のDataTableを
作成してバインドしようかと思っていますが、
もし、もっとスマートな方法をご存知の方がいらしたら…と思い、
書き込みさせていただきました。

よろしくお願いいたします。
karajan
ベテラン
会議室デビュー日: 2002/07/05
投稿数: 89
投稿日時: 2004-01-29 15:13
お世話になります。
karajanです。

DataTable.Rows.InsertAt(row, 0);
で先頭に追加する方法はだめですか?

Micky
大ベテラン
会議室デビュー日: 2002/09/04
投稿数: 137
投稿日時: 2004-01-29 16:06
Mickyでございます。
karajanさん書き込みありがとうございました。

引用:

karajanさんの書き込み (2004-01-29 15:13) より:
DataTable.Rows.InsertAt(row, 0);
で先頭に追加する方法はだめですか?



おぉ〜〜、これは見落としていました
元ネタのDataTableにもちゃんとInsertがあったのですね。
ComboBoxのInsertがだめだったもので、AddしてSortする事ばかりに
気をとられてしまいました。反省反省・・・

で、結果ですがどうも元ネタのDataTableまたはDataViewに
新規行を追加して、ComboBoxに表示すると一番下に表示される
という仕様なのではないか?と思うんですよ。

DataGridでもそうですよね?
なんかそれが踏襲されているような感じです。
じゃ、AcceptChangesメソッドで、RowStateを変えちゃえば、いいじゃん!
(なんかすっきりしないのは否めませんが・・・
ってなわけで、やってみましたがやっぱり一番下に来ちゃいます。
タハハ・・・

Rowsの中身としては確かにIndex==0にちゃんと追加されてますし、
RowStateも変更されています。

どうやら、このあたりのリスト表示するコントロールは
RowIDとやらを参照して表示順を決めているのではないか?
と思い始めているところです。
同じ理由でDataViewを使って追加した時もだめだったんですね。
Jitta
ぬし
会議室デビュー日: 2002/07/05
投稿数: 6267
お住まい・勤務地: 兵庫県・海手
投稿日時: 2004-01-29 16:42
実験しました。
結果:
1.この場合はNG
 dim dv as dataview = datatable.defaultview
 datatable.rows.insert(rowdata, 0)

2.この場合はOK
 datatable.rows.insert(rowdata, 0)
 dim dv as dataview = datatable.defaultview

追加してから、DataViewを取ってください。


↓↓↓↓↓↓
引用:

「データバインディングしたComboBoxへのデータ追加」
とした時点で、局所的にしか見えなくなっていたようです。


人間なんてそんなもんです。だから、他の開発メンバーとのコミュニケーションや息抜きが大切。
XPのペアプログラミングも、こういうところで大いに有効かも。。。

[ メッセージ編集済み 編集者: Jitta 編集日時 2004-01-29 18:36 ]
Micky
大ベテラン
会議室デビュー日: 2002/09/04
投稿数: 137
投稿日時: 2004-01-29 18:17
Mickyでございます。

Jittaさんこんばんは!
いつもありがとうございます。

引用:

Jittaさんの書き込み (2004-01-29 16:42) より:

追加してから、DataViewを取ってください。



う〜〜ん・・思わずうなってしまいました。(^^)

「データバインディングしたComboBoxへのデータ追加」
とした時点で、局所的にしか見えなくなっていたようです。
で、Jittaさんの方法で出来ましたので、追加情報も含めて
まとめておきます。

・WinアプリのComboBoxへ「未選択」などの行を追加したい場合は
表示させたいマスター等のDataTableを取得した時点で
InsertAtメソッドにより0番目データとして追加しておく。
(最初に一度設定してしまう)

・ただ表示するだけの場合はこのDataTableをそのままバインドする

・抽出処理等がある場合はDataViewをバインドする

・複数のComboBoxにより連携が必要な場合は
(Combo1の選択データにより、Combo2の内容が変わるような場合)
Combo1の選択イベント時に設定される条件で、確実に抽出される
データを元のDataTable.Rows[0]の該当カラムに設定する。

と、こんな感じでやりたい事が実現できました。
ありがとうございました。m(__)m
1

スキルアップ/キャリアアップ(JOB@IT)