C# изменить цвет строки, если она не пуста

У меня есть таблица с некоторыми значениями. Если ячейка строки "Имя" не пуста, измените цвет фона на фиолетовый.

Name    ID    Customers

Niky    1     yes       // here change background to violet
        2     no
Donna   3     yes       // here change background to violet
Baka    4     no        // here change background to violet
        5     yes
        6     no

Я пробовал этот код, но я не работаю, не знаю почему:

 foreach (DataGridViewRow row1 in dataGridView1.Rows)
        {
            if (row1.Cells[0].Value != null)
            {
                row1.DefaultCellStyle.BackColor = Color.Violet;
            }
        }

4 ответа

Решение

Обычное место для размещения такого рода, если код внутри DataBindingComplete обработчик события, либо прикрепите событие, как показано ниже, либо с помощью конструктора:

dataGridView1.DataBindingComplete += new DataGridViewBindingCompleteEventHandler(dataGridView1_DataBindingComplete);

Тогда в обработчике у вас есть что-то вроде этого:

void dataGridView1_DataBindingComplete(object sender, DataGridViewBindingCompleteEventArgs e)
{
    foreach (DataGridViewRow row1 in dataGridView1.Rows)
    {
        if (row1.Cells.Cast<DataGridViewCell>().Any(c => c.Value == null || string.IsNullOrWhiteSpace(c.Value.ToString())))
        {
            row1.DefaultCellStyle.BackColor = Color.Violet;
        }
        else
        {
            row1.DefaultCellStyle.BackColor = Color.White;
        }
    }
}

В приведенном выше коде я изменил ваш исходный код, чтобы теперь он просматривал все ячейки, а не только первую.


Вы также можете поместить код в событие CellFormatting.

Хороший (но не эффективный) способ достижения этого - событие cell-formatting из сетки данных. Вы можете прочитать всю документацию в MSDN. Суть в том, что вы подписываетесь на событие форматирования, и в этом вы можете решать свои проблемы форматирования.

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

Кстати: я бы не стал делать это в событии рисования, так как я узнал, что обычно вы нарушаете что-то из автоматизированной логики рисования;)

Для получения дополнительной информации в MSDN есть статья о стилях ячеек, которая в этом случае будет излишней. Но вы никогда не можете знать, достаточно:)

Вы можете сделать это на событии связанного с строкой вида сетки

Вы также можете использовать это использование может пройти через это:

foreach(DataGridViewRow r in dataGridView1.Rows)
{
      if(r.Cells.Cast<DataGridViewCell>().Any(c => c.Value.ToString() == string.Empty)) 
      {
           r.DefaultCellStyle.BackColor = Color.Violet;
      }
}

Я не знаю, где вы положили свой цветовой код, но я всегда делал это в разделе рисования

Вот где я покрасил линию в зависимости от состояния, за исключением первого столбца, который зависел от желтого или синего цвета - это код незавершенного производства и должен быть приведен в порядок

  private void dataGridView1_CellPainting(object sender, DataGridViewCellPaintingEventArgs e)
    {
        if (e.RowIndex >= 0 && e.ColumnIndex > 0)
        {
            if (dataGridView1.Rows[e.RowIndex].Cells[].Value.ToString() == "good")
            {
                e.CellStyle.BackColor = Color.PaleGreen;
                    e.CellStyle.SelectionForeColor = Color.Black;
                    e.CellStyle.SelectionBackColor = Color.Wheat;

            }
            if (dataGridView1.Rows[e.RowIndex].Cells[3].Value.ToString() == "warning")
            {
                e.CellStyle.BackColor = Color.LightGoldenrodYellow;
                e.CellStyle.SelectionForeColor = Color.Black;
                e.CellStyle.SelectionBackColor = Color.Wheat;
            }
            if (dataGridView1.Rows[e.RowIndex].Cells[3].Value.ToString() == "error")
            {
                e.CellStyle.BackColor = Color.Salmon;
                e.CellStyle.SelectionForeColor = Color.Black;
                e.CellStyle.SelectionBackColor = Color.Wheat;
            }

                if (e.Value.ToString() == "Yellow")
                {
                    e.CellStyle.BackColor = Color.Yellow;
                }
                else
                    if (e.Value.ToString() == "Blue")
                    {
                        e.CellStyle.BackColor = Color.LightBlue;
                    }


        }
    }

Или вы можете сделать:

foreach(DataGridViewRow r in dataGridView1.Rows) 
{ 
      if(!String.IsNullOrEmpty(r.Cells[0].Value.ToString()))
      { 
           r.DefaultCellStyle.BackColor = Color.Violet; 
      } 
} 

поэтому, если все первые ячейки строки не пусты, закрасьте строку фиолетовым цветом.

Другие вопросы по тегам