- - PR -
Winアプリ データバインディングしたComboBoxへのデータ追加
1
投稿者 | 投稿内容 | ||||
---|---|---|---|---|---|
|
投稿日時: 2004-01-29 10:45
Mickyでございます。
各所でお世話になっております。 表題の件ですが、一旦データバインディングにより データを設定したComboBoxに「未選択」等のデータを 後で追加する方法を模索しています。 ASP.Netのドロップダウンでは簡単に出来たのですが、 同じ様には行かないみたいですね 表示したいマスタテーブルから一旦DataViewを取得して これに「未選択」行を追加した後、バインディングする方法を 考えたのですが、追加したデータはどうも一番下に表示されて しまうみたいでうまくいきませんでした。 (ソートしても一番下に来てしまうみたい・・・) 最後の手段として、一番最初に「未選択」データを追加して あとは、マスターデータをコピーした、新規のDataTableを 作成してバインドしようかと思っていますが、 もし、もっとスマートな方法をご存知の方がいらしたら…と思い、 書き込みさせていただきました。 よろしくお願いいたします。 | ||||
|
投稿日時: 2004-01-29 15:13
お世話になります。
karajanです。 DataTable.Rows.InsertAt(row, 0); で先頭に追加する方法はだめですか? | ||||
|
投稿日時: 2004-01-29 16:06
Mickyでございます。
karajanさん書き込みありがとうございました。
おぉ〜〜、これは見落としていました 元ネタのDataTableにもちゃんとInsertがあったのですね。 ComboBoxのInsertがだめだったもので、AddしてSortする事ばかりに 気をとられてしまいました。反省反省・・・ で、結果ですがどうも元ネタのDataTableまたはDataViewに 新規行を追加して、ComboBoxに表示すると一番下に表示される という仕様なのではないか?と思うんですよ。 DataGridでもそうですよね? なんかそれが踏襲されているような感じです。 じゃ、AcceptChangesメソッドで、RowStateを変えちゃえば、いいじゃん! (なんかすっきりしないのは否めませんが・・・) ってなわけで、やってみましたがやっぱり一番下に来ちゃいます。 タハハ・・・ Rowsの中身としては確かにIndex==0にちゃんと追加されてますし、 RowStateも変更されています。 どうやら、このあたりのリスト表示するコントロールは RowIDとやらを参照して表示順を決めているのではないか? と思い始めているところです。 同じ理由でDataViewを使って追加した時もだめだったんですね。 | ||||
|
投稿日時: 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を取ってください。 ↓↓↓↓↓↓
人間なんてそんなもんです。だから、他の開発メンバーとのコミュニケーションや息抜きが大切。 XPのペアプログラミングも、こういうところで大いに有効かも。。。 [ メッセージ編集済み 編集者: Jitta 編集日時 2004-01-29 18:36 ] | ||||
|
投稿日時: 2004-01-29 18:17
Mickyでございます。
Jittaさんこんばんは! いつもありがとうございます。
う〜〜ん・・思わずうなってしまいました。(^^) 「データバインディングしたComboBoxへのデータ追加」 とした時点で、局所的にしか見えなくなっていたようです。 で、Jittaさんの方法で出来ましたので、追加情報も含めて まとめておきます。 ・WinアプリのComboBoxへ「未選択」などの行を追加したい場合は 表示させたいマスター等のDataTableを取得した時点で InsertAtメソッドにより0番目データとして追加しておく。 (最初に一度設定してしまう) ・ただ表示するだけの場合はこのDataTableをそのままバインドする ・抽出処理等がある場合はDataViewをバインドする ・複数のComboBoxにより連携が必要な場合は (Combo1の選択データにより、Combo2の内容が変わるような場合) Combo1の選択イベント時に設定される条件で、確実に抽出される データを元のDataTable.Rows[0]の該当カラムに設定する。 と、こんな感じでやりたい事が実現できました。 ありがとうございました。m(__)m |
1