【问题标题】:ASP.NET gridview dynamic changing cell backgroundASP.NET gridview 动态变化的单元格背景
【发布时间】:2011-04-13 22:19:40
【问题描述】:
我有一个绑定到 sqldatasource 并动态更改的 griview。如何根据值更改背景单元格颜色?比如0-0.5绿色,0.5-1红色,诸如此类。
<asp:GridView ID="grid1" runat="server" AutoGenerateColumns="False"
DataSourceID="SqlDataSource3">
【问题讨论】:
标签:
c#
asp.net
gridview
background
datasource
【解决方案1】:
您可能希望使用 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 属性,但您可能需要进行额外的解析或从字符串中获取您想要比较的任何值。
【解决方案2】:
一种解决方案是创建一个您可以在数据绑定期间调用的服务器方法,该方法将返回一个 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";
}