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

DataGridViewComboBoxColumnによるID取得

環境/言語:[VB2008、Win7]
分類:[.NET]

お世話になります。
データベースプログラムを作成しております。

具体的には、DataGridViewにて生徒を複数名選択するというものです。

DataGridViewは生徒ID,氏名のテーブルをデータソースにセットし、
氏名列をDataGridViewComboBoxColumnに置き換えて選択できるようにしています。
DataGridViewComboBoxColumnのデータソースは生徒情報(生徒ID,氏名,生年月日,性別)をセットしています。

コンボボックスより生徒を選択する際の挙動ですが、
複数名の同名の生徒がリストに存在する場合、DataGridViewの生徒ID列に正しいIDがセットされない現象に困っています。

具体的なコードは以下の通りです。

dgv.DataSource = GetTableFromSQL("SELECT 生徒ID, 氏名 FROM 選択リスト")
Dim Column As New DataGridViewComboBoxColumn()
Column.DisplayStyleForCurrentCellOnly = True
Column.DisplayMember = "氏名"
Column.ValueMember = "生徒ID"
Column.DataSource = GetTableFromSQL("SELECT 生徒ID, 氏名, 生年月日, 性別 FROM 生徒テーブル")
Column.DataPropertyName = "生徒ID"
Column.SortMode = DataGridViewColumnSortMode.Automatic
dgv.Columns.Insert(dgv.Columns("氏名").Index, Column)
'dgv.Columns.Remove("氏名")
Column.Name = "氏名"

コードが悪いのでしょうか?
解決策への知恵をお貸しいただけると幸いです。

どうぞよろしくお願いします。
■No31747に返信(雨河童さんの記事)
> 具体的には、DataGridViewにて生徒を複数名選択するというものです。
生徒名だけから選ばせるのではなく、「31747:雨河童」のようにした
IDと名前の組み合わせとなる列を用意するのが、手っ取り早いかとおもいます。

> 複数名の同名の生徒がリストに存在する場合、
同名だった場合、いずれの生徒IDを指しているのか曖昧になので、
位置だけで判断させるのではなく、アイテムの内容を工夫した方が良いでしょう。

後ろ向きな回答ではありますが、「同名を作らない」ようにすることをお勧めします。


> DataGridViewの生徒ID列に正しいIDがセットされない現象に困っています。
DataGridViewComboBoxColumn … というか、DataGridViewComboBoxCell についていえば、
そもそも SelectedIndex プロパティや SelectedValue プロパティがありません。
現在のセルテキストから、コンボボックスのアイテムが逆選択されことになるため、
同名アイテムがある場合、必ずしも望むべき生徒IDが選択される保証はありません。

一応、コンボボックスそのもの(DataGridViewComboBoxEditingControl)を
EditingControlShowing 等から得ることは出来ますが、そこから SelectedIndex を
得たところで、直接の回避策にはなりえないでしょうね。

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