更改DataGridView行的颜色

问题描述 投票:0回答:2

我遇到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;
        }
    }
}

这有什么问题?

c# asp.net datagridview
2个回答
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";

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;
    }
 }
}
© www.soinside.com 2019 - 2024. All rights reserved.