Как изменить задний цвет строки в DataGridView на основе значения ячейки? - PullRequest
2 голосов
/ 10 октября 2008

У меня есть DataGridView, который показывает содержимое DataTable.

Я хочу установить задний цвет строки на основе значения ячейки в этой строке.

Обратите внимание, что рассматриваемая ячейка находится в столбце, который не отображается в DataGridView (Visible = False).

Ответы [ 3 ]

1 голос
/ 10 октября 2008

RowDataBound, как уже упоминалось; Вы также можете проверить значения ваших объектов данных, а также текст в самой сетке:

void gridView_DataBound(object sender, GridViewEventArgs e)
{
  if (e.Row.RowType == DataControlRowType.DataRow)
  {
    var myObject = (myObject)e.DataItem;
    if (myObject.IsOverdue())
    {
      e.Row.CssClass = "overdue";
    }
  }
}
1 голос
/ 10 октября 2008

Если вы обрабатываете событие RowDataBound, вы можете проверить значение данных и изменить атрибуты ячейки или применить другой стиль в этом обработчике событий.

protected void Page_Load(object sender, EventArgs e)
{
    GridView g1 = new GridView();
    g1.RowDataBound += new GridViewRowEventHandler(g1_RowDataBound);
}

void g1_RowDataBound(object sender, GridViewRowEventArgs e)
{
    if(e.Row.RowType == DataControlRowType.DataRow)
    {
        // Check the Value
        if(e.Row.Cells[1].Text = someValue)
        {
            e.Row.Cells[1].CssClass = "colorCellRed";
        }

    }
}

Это должно дать вам то, что вы ищете. Дайте мне знать, если вам это нужно в VB, а не в C #.

Удачи!

0 голосов
/ 14 июля 2010

Другой вариант - использовать событие CellFormatting. Первый вариант показывает доступ к связанному элементу данных и полезен, если у вас нет настроенного столбца для данных. Второй вариант работает, если есть столбец, видимый он или нет.

    private void dataGridView_CellFormatting(object sender, DataGridViewCellFormattingEventArgs e)
        {
            if (((MyDataObject)dataGridView.Rows[e.RowIndex].DataBoundItem).Condition == Value)
            {
                e.CellStyle.BackColor = System.Drawing.Color.Gold;

            }
        }

// Второй вариант - можно использовать ColumnIndex вместо ColumnName

    private void dataGridView_CellFormatting(object sender, DataGridViewCellFormattingEventArgs e)
        {
            if (dataGridView["ColumnName", e.RowIndex].Value).Condition == TargetValue)
            {
                e.CellStyle.BackColor = System.Drawing.Color.Gold;

            }
        }
...