将样式应用于符合特定条件的GridView

时间:2010-12-26 11:11:48

标签: c# asp.net

我对ASP.Net相当陌生,所以可能只是我有点愚蠢,但我无法弄清楚为什么这不起作用。

基本上,我在一个从数据库读取的页面上有一个GridView控件(GridView1)。我已经将一种CSS样式应用于GridView,我想要做的就是更改样式中应用的背景图像,具体取决于某个单元格中是否包含数据。

我尝试处理此更改的方法是更新通过C#应用于每一行的CSS类。我有以下代码执行此操作:

protected void GridView1_RowDataBound(object sender, GridViewRowEventArgs e)
{
    GridViewRow row = e.Row;
    string s = row.Cells[7].Text;

    if (s.Length > 0)
    {
        row.CssClass = "newRowBackground";
    }
    else
    {
        row.CssClass = "oldRowBackground";
    }
}

理论上,来自Cell [7]的数据将为null或为字符串(在这种情况下,可能是一个人的名字)。

问题在于,当页面加载时,GridView中的每一行都应用了新的样式,无论它是否为空。但是,当我将其更改为使用硬编码示例时,它可以正常工作。例如,下面的内容将完全符合我的要求:

protected void GridView1_RowDataBound(object sender, GridViewRowEventArgs e)
{
    GridViewRow row = e.Row;
    string s = row.Cells[7].Text;

    if (s == "Smith") //Matching a name in one of the rows
    {
        row.CssClass = "newRowBackground";
    }
    else
    {
        row.CssClass = "oldRowBackground";
    }
}

好像最上面的代码总是返回值大于0的字符串,但是当我检查数据库时,字段都是空的(除了我的测试记录" Smith" )。

我可能会做一些非常简单的事情,但我无法理解。就像我说的那样,我对此仍然很陌生。我尝试过的一件事是将if语句中的参数更改为:if (s != null)if (s != "")if (s == string.empty)这些都没有运气。

非常感谢任何帮助,如果我在这里愚蠢,请不要犹豫告诉我。 :)

3 个答案:

答案 0 :(得分:0)

您可能想尝试以下代码。

if(String.IsNullOrEmpty(s.trim()))
{

}

希望这有帮助。

答案 1 :(得分:0)

还要确保只在DataRows上设置CssClass。

检查

if(e.Row.RowType == DataControlRowType.DataRow)
{

}

你也可以看看scartags答案。

如果上述内容没有任何作用,请将断点设置到与字符串匹配的行中,并查看实际值

答案 2 :(得分:0)

试试这个:

if((e.Row.RowType != DataControlRowType.DataRow) || String.IsNullOrEmpty(s.trim()))
{
     return;
}
row.CssClass = "newRowBackground";

这假定默认情况下将应用oldRowBackground CSS类。