ASP.NET gridview动态更改单元格背景

时间:2010-09-17 20:56:08

标签: c# asp.net gridview background datasource

我有一个gridview,它绑定到一个sql数据源并动态更改。如何根据值更改背景单元格颜色?例如,0-0.5绿色,0.5-1红色,像那样。

   <asp:GridView ID="grid1" runat="server" AutoGenerateColumns="False" 
        DataSourceID="SqlDataSource3">

2 个答案:

答案 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";
}