Смена цвета ячеека dataGridView

256
14 апреля 2017, 19:07
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;
         }
     }
}
Answer 1

Так не работает для ячейки, нужно указывать конкретную ячейку в 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;
        }
    }
}
READ ALSO
Привязка ListBox к переменой в другом потоке

Привязка ListBox к переменой в другом потоке

Есть экземпляр класса в другом потоке, это сервер который имеет изменяющийся список клиентовКак привязать этот список клиентов к компоненту...

233
База данных без базы данных

База данных без базы данных

Здравствуйте, задача у меня страннаяНеобходимо сделать форму регистрации пассажиров, без использования баз данных, чисто C#

175
Функция из DLL (на Си) не работает в C#

Функция из DLL (на Си) не работает в C#

Как передать буфер для заполнения в функцию (функция в DLL-ке напна Си , исходника нету) я делаю так

206
Десериализация коллекции объектов JSON

Десериализация коллекции объектов JSON

Есть базовый класс и несколько его потомков:

223