C# と VB.NET の質問掲示板

ASP.NET、C++/CLI、Java 何でもどうぞ

C# と VB.NET の入門サイト

Re[2]: DataGridViewのComboBoxの使い方


(過去ログ 117 を表示中)

[トピック内 3 記事 (1 - 3 表示)]  << 0 >>

■68833 / inTopicNo.1)  DataGridViewのComboBoxの使い方
  
□投稿者/ りん (1回)-(2013/11/20(Wed) 14:46:04)

分類:[.NET 全般] 

VS2008 C#3.5

こんにちは。
DataGridViewのComboBoxColumnの使い方について教えて頂けますでしょうか。

通常のComboBoxであればItemに任意のオブジェクトを追加しても
SelectedItemでそのまま選択されているものをオブジェクトとして取得できるかと思いますが、
同様のことはDataGridViewComboBoxColumnではできないのでしょうか。
試に以下のような記述をした場合、DataGridViewComboBoxColumnのValueとして
意図したオブジェクトではなくstringが取得されました。


■コンボボックスアイテム構築時
DataGridViewComboBoxColumn combo = (DataGridViewComboBoxColumn)dataGrid.Columns[0];
combo.DisplayMember = "Name";
combo.Items.AddRange(<任意ObjectのList>.ToArray());

■コンボボックス選択項目取得時
this.gridSeries[CHART_AREA_COLUMN, e.RowIndex].Value
→Valueの値が意図している「任意Object型」ではない


型の種類がわからなくなっているのかと思い、
構築時にcombo.ValueType = typeof(<任意ObjectのList>)というように書いても見ましたが
エラーが発生してダメでした。

どなたかご存知の方がいらっしゃいましたら御教示ください。
宜しくお願い致します。
引用返信 編集キー/
■68836 / inTopicNo.2)  Re[1]: DataGridViewのComboBoxの使い方
□投稿者/ ぽん (7回)-(2013/11/21(Thu) 00:19:10)
努力の割にはッて感じですがこれで出来ると思います。
問題としてはcolumnのItemsにオブジェクトをそのまま突っ込むと、該当セル編集中にDataErrorが出ると思いますが、出ませんでしたか?

1,DataGridViewのEditingControlShowingイベントハンドラを登録
2,その中で、e.ControlがComboBoxだった場合、SelectedIndexChangedイベントハンドラを登録
3,SelectedIndexChangedイベントで、SelectedIndexをメンバーに保存
4,DataGridViewのCellEndEditイベントで対象セルをDataGridViewComboBoxCellにキャスト。
5,キャストされたメンバのItems[SelectedIndex]でオブジェクトを取得
6,ComboBoxのSelectedIndexChangedイベントを消去

で取得できると思います。
それか、Items全部をToStringして、Valueと比較でも行けるような気もします。
引用返信 編集キー/
■68837 / inTopicNo.3)  Re[2]: DataGridViewのComboBoxの使い方
□投稿者/ りん (3回)-(2013/11/21(Thu) 13:40:34)
>>ぽんさん
回答ありがとうございます。
おっしゃる通りやはり手を加えないとできないみたいですね。
EditingControlShowingイベントを使ったインデックス変更イベントの使い方が参考になったので、
SelectedIndexChangedイベントの中でそのセルのTagプロパティに
選択されたオブジェクトを格納しておく方法を試してみようと思います。

大変助かりました。ありがとうございました。

解決済み
引用返信 編集キー/


トピック内ページ移動 / << 0 >>

このトピックに書きこむ

過去ログには書き込み不可

管理者用

- Child Tree -