Изменение стиля (переднего цвета) выбранного элемента 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, нет прямого подхода к достижению вашей цели.

  1. Создайте пользовательские классы "Столбец", "Ячейка" и "EditingControl". Создать кастом DataGridViewComboBoxEditingControl и переопределить OnDrawItem способ нарисовать элемент с помощью пользовательских цветов.

  2. Создайте необходимый столбец со списком ComboBoxColumn классы, добавить его в сетку и привязать данные. Если вы установите DataPropertyName свойство вашего столбца, то когда ваши данные связаны, этот столбец данных будет привязан к вашему столбцу сетки. DataGridView автоматически сгенерирует другие столбцы.

Другие вопросы по тегам