更改DataGridView行的颜色

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了更改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;
        }
    }
}

这有什么问题?

答案

添加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";
另一答案

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

以上是关于更改DataGridView行的颜色的主要内容,如果未能解决你的问题,请参考以下文章

如何根据条件更改 DataGridView 的行颜色以检查日期是不是过期

选中复选框后如何更改datagridview中的行颜色

如何在datagridview中设置指定行的背景颜色?

急急急!!!winform里怎么做可以使datagridview里的鼠标点击cell使整行的背景颜色改变?

DataGridView透明行选择和双击背景颜色更改

动态更改 datagridview 单元格颜色