我对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)
这些都没有运气。
非常感谢任何帮助,如果我在这里愚蠢,请不要犹豫告诉我。 :)
答案 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类。