DataGridViewのコンボボックス 表示と値を別にする方法
DataGridViewComboBoxを扱うとき、表示の値と中身の値を別にしたい場合が多い。
例えば、表示の値は文字列、中身の値はIDといった場合だ。
設定
その設定の仕方について。
1.DataTableを作成。
2.表示したい値(”Display”)と中身の値(”Value”)のカラムをそれぞれ追加。
2.表示したい値(”Display”)と中身の値(”Value”)のカラムをそれぞれ追加。
string型のデータを格納する”Display”カラムと
int型のデータを格納する”Value”カラムを追加する。
int型のデータを格納する”Value”カラムを追加する。
// 1.DataTableを作成
var dt = new DataTable();
// 2.表示したい値(”Display”)と中身の値(”Value”)のカラムをそれぞれ追加
dt.Columns.Add("Display", typeof(string));
dt.Columns.Add("Value", typeof(int));
3.追加したカラムの順に値を設定し、行を追加。
// 3.追加したカラムの順に値を設定し、行を追加
dt.Rows.Add("Vn", 0);
dt.Rows.Add("Va", 1);
dt.Rows.Add("Vc", 2);
dt.Rows.Add("Cb", 3);
4.作成したDataTableをDataGridViewComboBoxColumnにバインド
5.DisplayMemberとValueMemberを設定
5.DisplayMemberとValueMemberを設定
DisplayMemberが表示される文字列、ValueMemberが値となる。
// コンボボックスカラム設定
var column = new DataGridViewComboBoxColumn();
column.DataSource = dt;
column.DisplayMember = "Display";
column.ValueMember = "Value";
// カラム追加
dataGridView1.Columns.Add(column);
これで、表示される文字列は、”Display”カラムに追加した『Vn』『Va』『Vc』『Cb』となり
中身の値としては”Value”カラムに追加した『0』『1』『2』『3』となる。
コンボボックスの値を指定
では、コード上で特定のコンボボックスの値を指定したい場合。
その時は、Valueを指定する。
たとえば[0, 0]のセルに『Va』と表示させたい場合は、『Va』に対応するValueの『1』を指定する。
dataGridView1[0, 0].Value = 1;
【結果】
もしもここで、Displayの”Va”を指定した場合
dataGridView1[0, 0].Value = "Va";
【結果】
値(Value)と違うデータが指定されたため、エラーが発生してしまう。
コメント