Изменение стиля (переднего цвета) выбранного элемента DataGridViewComboBoxCell
Я бы очень хотел изменить стиль выбранного элемента одного элемента управления DataGridVeiwComboBox.
Есть база данных, которая передает информацию в мой DataGridView, и если по какой-то причине данные являются недействительными, я бы хотел как-то уведомить пользователя. Я решил сделать шрифт выпадающего текста красным, а фон синим, чтобы он выделялся в списке из сотен строк.
Когда есть недопустимые данные (то есть данные, поступающие из базы данных, не являются одним из параметров в раскрывающемся списке), вызывается обратный вызов DataError:
private void OnDataError(object sender, DataGridViewDataErrorEventArgs e)
{
DataGridViewCellStyle style = new DataGridViewCellStyle();
style.ForeColor = Color.Red;
style.BackColor = Color.Blue;
((DataGridViewComboBoxCell)(((DataGridView)(sender))[e.ColumnIndex, e.RowIndex])).Style = style;
e.Cancel = true;
}
Однако это приводит к следующему:
Я не хочу, чтобы выпадающее меню изменяло, я хочу, чтобы '0' изменило выбранное значение.
Есть ли другой способ уведомить пользователя о том, что значение является недействительным? Я не хочу создавать список и представлять его пользователю, количество строк может быть довольно большим.
1 ответ
AFAIK, нет прямого подхода к достижению вашей цели.
Создайте пользовательские классы "Столбец", "Ячейка" и "EditingControl". Создать кастом
DataGridViewComboBoxEditingControl
и переопределитьOnDrawItem
способ нарисовать элемент с помощью пользовательских цветов.Создайте необходимый столбец со списком
ComboBoxColumn
классы, добавить его в сетку и привязать данные. Если вы установитеDataPropertyName
свойство вашего столбца, то когда ваши данные связаны, этот столбец данных будет привязан к вашему столбцу сетки. DataGridView автоматически сгенерирует другие столбцы.