🐱

データグリッドビューのコンボボックスセルの背景色を値によって変更する

に公開

はじめに

最近のプロジェクトで
データグリッドビューのコンボボックスの背景色を値によって制御したかったので、
下記のように実装してみました。

コード

// FlatStyleをFlatに設定
((DataGridViewComboBoxColumn)Dgv.Columns[0]).FlatStyle = FlatStyle.Flat;

/// <summary>
/// 値編集時イベント
/// </summary>
/// <param name="sender"></param>
/// <param name="e"></param>
private void Dgv_CellValueChanged(object sender, DataGridViewCellEventArgs e)
{
	if (Dgv[e.ColumnIndex, e.RowIndex].Value != null)
	{
		if (Dgv[e.ColumnIndex, e.RowIndex].Value.ToString() == "×")
		{
			// 背景色を赤に変更
			Dgv[e.ColumnIndex, e.RowIndex].Style.BackColor = Color.Red;
		}
		else
		{
			// 背景色をデフォルトに戻す
			Dgv[e.ColumnIndex, e.RowIndex].Style.BackColor = SystemColors.Window;
		}
	}
}

解説

まず、データグリッドビューのコンボボックスのFlatStyleをFlatに設定します。
これを設定しないと背景色を設定しても、見た目が変わりません。
次にデータグリッドビューCellValueChangedに値によって背景色をさせる処理を記述します。
今回はコンボボックスで選択された値が×の場合は背景色を赤に、
それ以外の場合はデフォルト色にするよう記述しています。

参考にしたサイト

https://h-chillax.com/c-sharp-how-to-set-color-to-combo-box-in-dgv/
https://docs.mescius.jp/help/inputman-winforms-8/GcComboBox_Appearance.html

Discussion