更改DataGridView行的颜色

时间:2017-05-17 06:15:09

标签: c# asp.net 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;
        }
    }
}

这有什么问题?

2 个答案:

答案 0 :(得分:0)

添加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";

答案 1 :(得分:0)

您正在检查Cell [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;
    }
 }
}