List<CriticalError> troubles = new List<CriticalError>(); // связывается с таблицей
this.dataGridView.DataSource =
troubles.GetRange(0,troubles.Count); //чтобы не выдавало ошибку индекс -1
for (int i = 0; i < this.dataGridView.Rows.Count - 1; i++)
{
if (Convert.ToBoolean(this.dataGridView.Rows[i].Cells["Reaction"].Value) == false) // если CheckBox == false , тогда красим в красный
{
this.dataGridView.Rows[i].DefaultCellStyle.BackColor = Color.Red;
}
}
Проблема в том , что в цикле dataGridView.Rows[i].DefaultCellStyle.BackColor принимает желаемый цвет, а после выхода с цикла все по дефолту. Подскажите, пожалуйста , где ошибка
for (int i = 0; i < this.dataGridView.Rows.Count - 1; i++)
{
if (Convert.ToBoolean(this.dataGridView.Rows[i].Cells["Reaction"].Value) == false)
{
for (int j = 0; j <this.dataGridView.Rows[i].Cells.Count - 1; j++)
{
this.dataGridView.Rows[i].Cells[j].Style.BackColor = Color.Red;
}
}
}
Так не работает для ячейки, нужно указывать конкретную ячейку в Cells, не только строку. Вот так поменяет строку в красный:
this.dataGridView.Rows[i].DefaultCellStyle.BackColor = Color.Red;
В Вашем случае, для окраски ячейки писать так:
for (int i = 0; i < this.dataGridView.Rows.Count - 1; i++)
{
if (Convert.ToBoolean(this.dataGridView.Rows[i].Cells["Reaction"].Value) == false)
{
this.dataGridView.Rows[i].Cells["Reaction"].Style.BackColor = Color.Red;
}
}
Чтобы смена цвета работала для DataSource необходимо повесть метод на событие DataBindingComplete, получится такой код:
private void dataGridView1_DataBindingComplete(
object sender, DataGridViewBindingCompleteEventArgs e)
{
for (int i = 0; i < this.dataGridView1.Rows.Count - 1; i++)
{
if (Convert.ToBoolean(this.dataGridView1.Rows[i].Cells["Reaction"].Value) == false)
{
this.dataGridView1.Rows[i].Cells["Reaction"].Style.BackColor = Color.Red;
}
}
}
Апостиль в Лос-Анджелесе без лишних нервов и бумажной волокиты
Основные этапы разработки сайта для стоматологической клиники
Продвижение своими сайтами как стратегия роста и независимости