我遇到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;
}
}
}
这有什么问题?
答案 0 :(得分: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";
答案 1 :(得分: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;
}
}
}