Изменить задний цвет элемента ListView при определенном условии

У меня есть список, состоящий из трех столбцов, один из которых - столбец «статус». Я хочу, чтобы задний цвет ячейки в этом столбце окрашивался либо в зеленый, либо в красный цвет в зависимости от значения, которое там есть, но до сих пор я не смог найти правильное решение.

Я нашел много информации о применении заднего цвета к полной строке, но пока ничего о том, как сделать это для ячейки с определенным значением. По крайней мере, ничего похожего на то, что работает.

if (emp.SubItems[2].ToString() == "AANWEZIG")
                {
                    emp.BackColor = Color.Green;
                }

person Tom    schedule 15.10.2019    source источник
comment
попробуйте изменить его, когда он нарисован   -  person BugFinder    schedule 15.10.2019
comment
Это то, что он уже делает; это внутри метода, который вызывается при запуске. Или это не то, что вы имеете в виду?   -  person Tom    schedule 15.10.2019
comment
Нет, есть метод drawitem, там нормально менять цвета и т.д.   -  person BugFinder    schedule 15.10.2019


Ответы (1)


Во-первых, при создании экземпляров ListViewItem необходимо установить ListViewItem.UseItemStyleForSubItems на false. Таким образом, Font, ForeColor и BackColor ListViewItem не будут использоваться для всех подэлементов.

Во-вторых, ваш оператор if должен проверять свойство ListViewSubItem.Text, а не результат ToString. ToString не просто возвращает текст.

Наконец, установите ListViewSubItem.BackColor на основе текста.

private void LoadListView()
{
   // Build up the ListViewItem that you're calling emp in your original question...
   emp.UseItemStyleForSubItems = false;
   if (emp.SubItems[2].Text == "AANWEZIG")
   {
      emp.SubItems[2].BackColor = Color.Green;
   }
}
person Joshua Robinson    schedule 15.10.2019