Как изменить цвет строки в datagridview? - PullRequest
127 голосов
/ 03 февраля 2010

Я хотел бы изменить цвет определенной строки в моем представлении данных. Строка должна быть изменена на красный, если значение columncell 7 меньше значения в columncell 10. Есть предложения о том, как этого добиться?

Ответы [ 17 ]

0 голосов
/ 08 июня 2018

Я приземлился здесь в поисках решения для случая, когда я не использую привязку данных. У меня ничего не получалось, но я получил в итоге:

dataGridView.Columns.Clear(); 
dataGridView.Rows.Clear();
dataGridView.Refresh();
0 голосов
/ 17 августа 2017

int counter = gridEstimateSales.Rows.Count;

        for (int i = 0; i < counter; i++)
        {
            if (i == counter-1)
            {
                //this is where your LAST LINE code goes
                //row.DefaultCellStyle.BackColor = Color.Yellow;
                gridEstimateSales.Rows[i].DefaultCellStyle.BackColor = Color.Red;
            }
            else
            {
                //this is your normal code NOT LAST LINE
                //row.DefaultCellStyle.BackColor = Color.Red;
                gridEstimateSales.Rows[i].DefaultCellStyle.BackColor = Color.White;
            }
        }
0 голосов
/ 03 февраля 2017

Просто примечание о настройке DefaultCellStyle.BackColor ... вы не можете установить для него любое прозрачное значение, кроме Color.Empty. Это значение по умолчанию. Это ложно подразумевает (для меня, во всяком случае), что прозрачные цвета в порядке. Они не. Каждая строка, которую я установил для прозрачного цвета, просто рисует цвет выделенных строк.

Я потратил слишком много времени на то, чтобы бить головой об стену из-за этой проблемы.

0 голосов
/ 30 августа 2016

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

       foreach (DataGridViewRow row in dataGridView1.Rows)
                {
                    if (row.Cells["columnname"].Value != null)
                    {
                        dataGridView1.AlternatingRowsDefaultCellStyle.BackColor = Color.MistyRose;
                    }
                 }
0 голосов
/ 19 декабря 2014

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

Использование CellEndEdit Событие просмотра данных.

private void dgMapTable_CellEndEdit(object sender, DataGridViewCellEventArgs e)
{
    double newInteger;

    if (double.TryParse(dgMapTable[e.ColumnIndex,e.RowIndex].Value.ToString(), out newInteger)
    {
        if (newInteger < 0 || newInteger > 50)
        {
            dgMapTable[e.ColumnIndex, e.RowIndex].Style.BackColor = Color.Red; 

            dgMapTable[e.ColumnIndex, e.RowIndex].ErrorText 
                = "Keep value in Range:" + "0 to " + "50";
        }
    }                               
}

Вы можете добавить логику для очистки уведомления об ошибке аналогичным образом.

Если в вашем случае, если данные загружаются программно, то событие CellLeave может использоваться с тем же кодом.

0 голосов
/ 29 октября 2014

Работает на Visual Studio 2010. (Я пробовал, и это работает!) Он раскрасит весь ваш ряд.

  1. Создать кнопку для datagridview.
  2. Создайте событие CellClick и поместите в него следующую строку кода.

if (dataGridView3.Columns[e.ColumnIndex].Index.Equals(0)    
{
    dataGridView3.Rows[e.RowIndex].DefaultCellStyle.BackColor = Color.Beige;
}
0 голосов
/ 04 февраля 2010

Я обычно хотел бы использовать для этого событие Event GridView.RowDataBound.

protected void OrdersGridView_RowDataBound(object sender, GridViewRowEventArgs e)
{
    if (e.Row.RowType == DataControlRowType.DataRow)
    {
        e.Row.ForeColor = System.Drawing.Color.Red;
    }
}
...