C # Datagridview - цвет строки назад не работает для каждой строки

2

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

  • True, False, False - строка должна быть синей
  • False, False, False - строка должна быть желтой
  • True, True, False - строка должна быть красной
  • True, False, True - строка должна быть зеленой

Мой код ниже, кажется, работает должным образом, когда я фильтрую свою базу данных, но не когда я просматриваю все записи (он просто делает все строки одним цветом [желтым]).

Вот код, который я написал до сих пор:

private void sJDataGridView_RowPrePaint(object sender, DataGridViewRowPrePaintEventArgs e)
                {
                    Color viewModeColour = Color.White; // Default Colour
                    Color viewModeColourRGB = Color.FromArgb(viewModeColour.R, viewModeColour.G, viewModeColour.B);
                    foreach (DataGridViewRow row in sJDataGridView.Rows)
                    {
                        if (Convert.ToBoolean(row.Cells[14].Value) == true)
                        {
                            if (Convert.ToBoolean(row.Cells[15].Value) == true)
                            {
                                viewModeColour = Color.FromArgb(0xFF8787); // Red
                            }
                            else
                            {
                                if (Convert.ToBoolean(row.Cells[16].Value) == false)
                                {
                                    viewModeColour = Color.FromArgb(0xE3F7FF); // Blue
                                }
                                else
                                {
                                    viewModeColour = Color.FromArgb(0xE5FFCC); // Green
                                }
                            }
                        }
                        else
                        {
                            if (Convert.ToBoolean(row.Cells[15].Value) == false)
                            {
                                if (Convert.ToBoolean(row.Cells[16].Value) == false)
                                {
                                    viewModeColour = Color.FromArgb(0xFFFDCC); // Yellow
                                }
                            }
                        }
                        viewModeColourRGB = Color.FromArgb(viewModeColour.R, viewModeColour.G, viewModeColour.B);
                    }
         
                    for (int i = 0; i < sJDataGridView.Rows.Count; i++)
                    {
                        sJDataGridView.Rows[i].DefaultCellStyle.BackColor = viewModeColourRGB;
                    }    
                     
                }
            }
  • 0
    попробуйте переместить назначение цвета внутри первого цикла
Теги:
winforms
datagridview

1 ответ

2
Лучший ответ

Попробуйте проверить каждый из вашего состояния в различных if блок операторов.

И примените DefaultCellStyle внутри вашего блока foreach.

foreach (DataGridViewRow row in sJDataGridView.Rows)
{
    bool a = Convert.ToBoolean(row.Cells[14].Value);
    bool b = Convert.ToBoolean(row.Cells[15].Value);
    bool c = Convert.ToBoolean(row.Cells[16].Value);

    if (a == true && b == false && c == false)
        viewModeColour = Color.FromArgb(0xE3F7FF); // Blue

    if (a == false && b == false && c == false)
        viewModeColour = Color.FromArgb(0xFFFDCC); // Yellow

    if (a == true && b == true && c == false)
        viewModeColour = Color.FromArgb(0xFF8787); // Red

    if (a == true && b == false && c == true)
        viewModeColour = Color.FromArgb(0xE5FFCC); // Green

    viewModeColourRGB = Color.FromArgb(viewModeColour.R, viewModeColour.G, viewModeColour.B);
    row.DefaultCellStyle.BackColor = viewModeColourRGB;
}
  • 0
    Работает отлично, спасибо!
  • 0
    @ J.James, рад слышать, проголосуй, если возможно, нажав стрелку вверх, чтобы ответить :)

Ещё вопросы

Сообщество Overcoder
Наверх
Меню