【C#】DataGridViewのコンボボックス 表示と値を別にする方法

C#

DataGridViewのコンボボックス 表示と値を別にする方法

DataGridViewComboBoxを扱うとき、表示の値と中身の値を別にしたい場合が多い。
例えば、表示の値は文字列、中身の値はIDといった場合だ。

設定

その設定の仕方について。

1.DataTableを作成。
2.表示したい値(”Display”)と中身の値(”Value”)のカラムをそれぞれ追加。
string型のデータを格納する”Display”カラムと
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を設定

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)と違うデータが指定されたため、エラーが発生してしまう。

 

コメント

タイトルとURLをコピーしました