Не меняется цвет текста в строке DataGridView

530
23 января 2017, 17:15

Пытаюсь поменять цвет текст в строке, но при загрузке формы строка моргнет нужным цветом и опять станет цвет по умолчанию.

private void bid_Load(object sender, EventArgs e)
{
        for (int i = 0; i < dg_bid.Rows.Count; i++)
        {
              string statusID = dg_bid.Rows[i].Cells["status"].Value.ToString();
              dg_bid.Rows[i].DefaultCellStyle.ForeColor = core.setColor(statusID);            
        }
        dg_bid.Refresh();
}

Если убрать обновление таблицы то вообще не чего не произойдет. Как это можно исправить?

public Color setColor(string status)
{
    string type = status;
    Color col;
    col = Color.FromArgb(64, 64, 64);
    switch (type)
    {
        case "0":
            col = Color.FromArgb(127, 140, 141);
            break;
        case "1":
            col = Color.FromArgb(39, 174, 96);
            break;
        case "2":
            col = Color.FromArgb(142, 68, 173);
            break;
        case "3":
            col = Color.FromArgb(52, 152, 219);
            break;
    }
    return col;
}
Answer 1

Не вникая в детали Вашей задачи, ИМХО в Вашем случае проще всего повесить изменение цвета в желаемой строке DataGrid на его событие RowPrePaint. Вот стартовая точка для Вас:

   private void dg_bid_RowPrePaint(object sender, DataGridViewRowPrePaintEventArgs e)
   {
       // i - Ваша строка в которой Вы желаете изменить цвет. Как она формируется Вы не рассказали
       if( i < dg_bid.Rows.Count )
          dg_bid.Rows[i].DefaultCellStyle.ForeColor = core.setColor(statusID);
   }        

Так все работает

В дополнение к правкам, которые Вы внесли в свой вопрос - такой код у меня отработал без проблем:

   public Color setColor(string status)
   {
       string type = status;
       Color col;
       col = Color.FromArgb(64, 64, 64);
       switch (type)
       {
           case "0":
               col = Color.FromArgb(127, 140, 141);
               break;
           case "1":
               col = Color.FromArgb(39, 174, 96);
               break;
           case "2":
               col = Color.FromArgb(142, 68, 173);
               break;
           case "3":
               col = Color.FromArgb(52, 152, 219);
               break;
       }
       return col;
   }
   private void dtGridView_RowPrePaint(object sender, DataGridViewRowPrePaintEventArgs e)
   {
       dtGridView.Rows[1].DefaultCellStyle.ForeColor = setColor("0");
       dtGridView.Rows[2].DefaultCellStyle.ForeColor = setColor("1");
       dtGridView.Rows[3].DefaultCellStyle.ForeColor = setColor("2");
       dtGridView.Rows[4].DefaultCellStyle.ForeColor = setColor("3");
   }

Я использовал без изменений Вашу функцию Color setColor(string status).

Значит Ваши проблемы в другом.

READ ALSO
Объединение массивов байтов

Объединение массивов байтов

Есть необходимость присоединять один массив байт к другому (много раз подряд)

504
Можно ли в произвольном тексте найти все, что закодировано в Base64?

Можно ли в произвольном тексте найти все, что закодировано в Base64?

Например, имеется произвольный текст, где могут встречаться последовательности, которые закодированы в base64

310
Конвертирование клавиш в ToUnicodeEx

Конвертирование клавиш в ToUnicodeEx

Как конвертировать клавиатурных хук который сможет понимать все клавиши и выводить нужный символ?!

374
.NET Производительность ReadAllText и SetBackgroundImage

.NET Производительность ReadAllText и SetBackgroundImage

Есть у меня подозрения что ReadAllText работает неприемлемо плохо, дело в том что формы у меня появляются с изменением прозрачности от нуля к единице,...

373