Изменение цвета строк DataGridView

У меня проблема с onDataRowBound. Кажется, что он поместил цвет на весь столбец ячейки [0]. В других ячейках есть значения, но они все равно окрашивают мою ячейку. Вот мой код.

protected void GridUserMessage_RowDataBound(object sender, GridViewRowEventArgs e)
{
    if (e.Row.RowType == DataControlRowType.DataRow)
    {
        if (String.IsNullOrWhiteSpace(e.Row.Cells[0].Text))
        {
            e.Row.BackColor = System.Drawing.Color.Red;
        }
    }
}

Что в этом плохого?


person EnzoZow    schedule 17.05.2017    source источник


Ответы (2)


Добавьте блок else, в котором вы устанавливаете белый цвет ячейки (или какой-либо другой цвет, который ваша сетка имеет по умолчанию)

protected void GridUserMessage_RowDataBound(object sender, GridViewRowEventArgs e)
{
    if (e.Row.RowType == DataControlRowType.DataRow)
    {
        if (String.IsNullOrWhiteSpace(e.Row.Cells[0].Text))
        {
            e.Row.BackColor = System.Drawing.Color.Red;
        }
        else
        {
            e.Row.BackColor = System.Drawing.Color.White;
        }
    }
}

РЕДАКТИРОВАТЬ: Я думаю, что стиль CSS был бы лучшим подходом для этого. В вашей разметке установите класс CSS для ваших строк, а в событии RowDataBound установите другой класс по мере необходимости. Что-то вроде этого:

определить "нормальный" стиль в разметке

<asp:GridView runat="server" RowStyle="normal-row" ...>

и в вашем методе RowDataBound установите другой класс, если значения ячейки являются пустой строкой, например:

e.Row.CssClass = "red-row";
person Nino    schedule 17.05.2017

Вы проверяете значения ячейки [0], что, если вы изменяете в своей внутренней хранимой процедуре базы данных и переставляете имя столбца в списке выбора, например, у вас есть

ДО

SELECT Id,FirstName,LastName FROM EMPLOYEE

ПОСЛЕ того, как вы / кто-то другой измените его на

SELECT Id,LastName,FirstName FROM EMPLOYEE

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

 protected void GridUserMessage_RowDataBound(object sender, GridViewRowEventArgs e)
{
if (e.Row.RowType == DataControlRowType.DataRow)
{
  // Check database column has value or not.  
  if(String.IsNullOrEmpty(Convert.ToString(DataBinder.Eval(e.Row.DataItem, "ColumnNameOfDataYouWantToCheck")))
    {
        e.Row.BackColor = System.Drawing.Color.Red;
    }
 }
}
person yogesh keraliya    schedule 17.05.2017