我有一个gridview,它绑定到一个sql数据源并动态更改。如何根据值更改背景单元格颜色?例如,0-0.5绿色,0.5-1红色,像那样。
<asp:GridView ID="grid1" runat="server" AutoGenerateColumns="False"
DataSourceID="SqlDataSource3">
答案 0 :(得分:3)
您可能希望使用GridView的RowDataBound事件,如下所示:
<asp:GridView ID="grid1" runat="server" AutoGenerateColumns="False"
DataSourceID="SqlDataSource3" OnRowDataBound="ChangeRowColor">
protected void ChangeRowColor(object sender, GridViewRowEventArgs e)
{
if( ((DataRow)e.Row.DataItem)[1] == .5)
{
e.Row.Cell[1].BackColor = Colors.Green;
}
}
在我的示例中,我假设用于填充网格的数据是DataRows(即来自数据表),但实质上的想法是将当前行的DataItem强制转换为绑定到的任何类型的对象,检查所需属性的值,然后设置相应单元格的BackColor。
您还可以检查Cell的text属性,但是您可能需要进行额外的解析,或者不要从字符串中获取要比较的任何值。
答案 1 :(得分:1)
一种解决方案是创建一个可以在数据绑定期间调用的服务器方法,该方法将返回一个css类名。
将css类属性绑定到对此方法的调用,并传入适当的数据元素。
这是这个概念的一个例子,您必须根据自己的需要进行调整。
... Css文件
.NegativeMoneyText
{
color: #FF0000;
}
... Aspx文件
<asp:Label ID="lblPaid" runat="server" CssClass='<%# getMoneyCssClass(Eval("PAID_AMOUNT").ToString()) %>' Text='<%# formatMoney(Eval("PAID_AMOUNT").ToString()) %>'></asp:Label>
......背后的代码
public string getMoneyCssClass(string amount)
{
if (!string.IsNullOrEmpty(amount))
{
double val = double.Parse(amount);
if (val < 0)
return "NegativeMoneyTextCss";
}
return return "PositiveMoneyTextCss";
}