首页 > 解决方案 > ASP.NET Gridview 不会更改某些行的背景颜色

问题描述

我正在尝试根据其中一个单元格中的值更改 gridview 行的颜色。然而,它只是部分起作用。这是代码:

protected void attn_list_RowDataBound(object sender, GridViewRowEventArgs e)
    {
        
        if (e.Row.Cells[4].Text == "P") //change the colour of rows
        {
            e.Row.BackColor = Color.FromName("#CCDDCC");
        }
        else if (e.Row.Cells[4].Text == "L")
        {
            e.Row.BackColor = Color.FromName("#C5DAFC");
        }
        else if (e.Row.Cells[4].Text == "E")
        {
            e.Row.BackColor = Color.FromName("#FFCC66");
        }
        else if (e.Row.Cells[4].Text == "U")
        {
            e.Row.BackColor = Color.FromName("FFCECE");
        }
        else if (e.Row.Cells[4].Text == "N")
        {
            e.Row.BackColor = Color.FromName("EDC9FF");
        }
        if (e.Row.Cells[5].Text == "Yes")
        {
            e.Row.Cells[5].ForeColor = Color.FromKnownColor(KnownColor.Red); //if EL, set colour of font as red
        }
    }

结果: 结果

我尝试通过System.Diagnostic.Debug.Writeline("A")输入else if (e.Row.Cells[4].Text=="N")语句来测试条件,结果它打印了“A”,这意味着它实际上满足了条件。只是我不知道为什么颜色不会改变......

提前致谢

标签: c#asp.net

解决方案


好吧,代码越多,我们浏览的越多!

因此,将上面转换为:

        if (e.Row.RowType == DataControlRowType.DataRow)
        {
            string sColor = "";
            switch(e.Row.Cells[4].Text)
            {
              case "P": sColor = "#CCDDCC"; break;
              case "L": sColor = "#C5DAFC"; break;
              case "E": sColor = "#FFCC66"; break;
              case "U": sColor = "FFCC66"; break;
              case "N": sColor = "EDC9FF"; break;
            }
            if (sColor != "")
                e.Row.BackColor = Color.FromName(sColor);

            if (e.Row.Cells[5].Text == "Yes")
            {
                e.Row.Cells[5].ForeColor = Color.FromKnownColor(KnownColor.Red); //if EL, set colour of font as red
            }
        }

嗯,确实看起来您缺少某些颜色的“#”。

另外,请注意我们如何检查数据绑定是否实际上正在处理数据行,标题和其他类型的“行”被扔到该例程中,因此我们也应该(需要)检查行类型。

但是,到目前为止,看起来“# 不见了。


推荐阅读