Изменение цвета ячейки datagridview динамически
У меня есть объект dataGridView, который заполнен данными. Я хочу нажать кнопку и изменить цвет фона ячейки. Это то, что я сейчас имею
foreach(DataGridViewRow row in dataGridView1.Rows) { foreach(DataGridViewColumn col in dataGridView1.Columns) { //row.Cells[col.Index].Style.BackColor = Color.Green; //doesn't work //col.Cells[row.Index].Style.BackColor = Color.Green; //doesn't work dataGridView1[col.Index, row.Index].Style.BackColor = Color.Green; //doesn't work } }
ВСЕ эти три причины перерисовывают таблицу поверх себя с перекрытием, и попытка resize таблиц становится беспорядочной. при нажатии на ячейку значение остается выделенным, а цвет обратной стороны не изменяется.
В: Как изменить цвет обратной линии отдельной ячейки после того, как таблица существует?
- Динамическое преобразование параметров в вариативные функции
- Программно создавать и добавлять композитный компонент в бэк-файл
- Android - динамически добавлять виды в представление
- Динамическая форма с повторяющейся формой
- Создание динамического количества элементов ввода с помощью R / Shiny
- R: rvest: соскабливание динамической страницы электронной торговли
- Как десериализовать дочерний объект с динамическими (числовыми) именами клавиш?
- Автозаполнение jQuery для динамически создаваемых входов
- Функция для динамического выделения матрицы
- Как динамически создавать столбцы в DataGrid WPF?
- Как правильно настроить, получить доступ и получить multidimensional array в C?
- как создать анимированный gif в .net
- Angular2 - динамически загружать компонент из модуля
Это работает для меня
dataGridView1.Rows[rowIndex].Cells[columnIndex].Style.BackColor = Color.Red;
Внедрите свое собственное расширение DataGridViewTextBoxCell и переопределите метод Paint следующим образом:
class MyDataGridViewTextBoxCell : DataGridViewTextBoxCell { protected override void Paint(Graphics graphics, Rectangle clipBounds, Rectangle cellBounds, int rowIndex, DataGridViewElementStates cellState, object value, object formattedValue, string errorText, DataGridViewCellStyle cellStyle, DataGridViewAdvancedBorderStyle advancedBorderStyle, DataGridViewPaintParts paintParts) { if (value != null) { if ((bool) value) { cellStyle.BackColor = Color.LightGreen; } else { cellStyle.BackColor = Color.OrangeRed; } } base.Paint(graphics, clipBounds, cellBounds, rowIndex, cellState, value, formattedValue, errorText, cellStyle, advancedBorderStyle, paintParts); }
}
Затем в коде установите свойство CellTemplate вашего столбца на экземпляр вашего classа
columns.Add(new DataGridViewTextBoxColumn() {CellTemplate = new MyDataGridViewTextBoxCell()});
Спасибо, что он работает
здесь я закончил с этим полем qty, ноль означает, что он показал, что клетки окрашены в красный цвет
int count = 0; foreach (DataGridViewRow row in ItemDg.Rows) { int qtyEntered = Convert.ToInt16(row.Cells[1].Value); if (qtyEntered <= 0) { ItemDg[0, count].Style.BackColor = Color.Red;//to color the row ItemDg[1, count].Style.BackColor = Color.Red; ItemDg[0, count].ReadOnly = true;//qty should not be enter for 0 inventory } ItemDg[0, count].Value = "0";//assign a default value to quantity enter count++; } }