假设您有一个 GridView,其中包含几列,例如:
| 福 | 酒吧 | 总计 |
并且您使用样式表使交替的行具有不同的颜色,例如浅蓝色和白色。
有没有一种好方法可以让特定的列以不同的颜色交替出现?例如,我可能希望 Total 列以中红色和浅红色交替显示,以在大网格中引起注意。
顺便说一句,我知道您可以以编程方式更改单元格的颜色。但是,如果可能的话,我想坚持使用 CSS,所以我所有的样式都在一个地方。当我在事件处理程序中时,我也看不到一种简单的方法来判断我是否处于交替行中。
如果你使用 jQuery,你可以很容易地做到这一点。
$("table#myTable col:odd").css("background-color:#ffe");
选择:odd
器在大多数当前浏览器中不可用,但 jQuery 今天为我们提供了它。
对于行,您可以使用内置的 AlternatingRowStyle 元素来完成。
编辑:为一些不同的方法找到了一个很好的资源:http ://css-discuss.incutio.com/?page=StylingColumns
我在搜索有关 WPF 的相同问题时发现了这ListView
一点GridView
。在那里,答案是使用Bea Costa 描述的StyleSelector
这样一个:
public class ListViewItemStyleSelector : StyleSelector
{
private int i = 0;
public override Style SelectStyle(object item, DependencyObject container)
{
// makes sure the first item always gets the first style, even when restyling
ItemsControl ic = ItemsControl.ItemsControlFromItemContainer(container);
if (item == ic.Items[0])
{
i = 0;
}
string styleKey;
if (i % 2 == 0)
{
styleKey = “ListViewItemStyle1″;
}
else
{
styleKey = “ListViewItemStyle2″;
}
i++;
return (Style)(ic.FindResource(styleKey));
}
}
有一些 nits 可以让这个工作非常好,所有这些都在她的博客文章中进行了描述。
无法帮助的一件事是,这仅适用于行。列似乎总是必须使用CellTemplate
/ Style
。
除了Ben 的建议之外,Matt Berseth 也有一个很好的演示,演示如何使用 GridViewControlExtender 对列进行翻转突出显示,这非常好:
还有很多其他关于如何在他的网站上增强 GridView 的内容:
http://mattberseth.com/blog/gridview/
相当多的示例使用 ASP.NET Ajax 和 Ajax Control Toolkit 位,但它们并不难移植到轻量级 jQuery 等效项。
在这里走两条切线...
PS“当我在事件处理程序中时,也没有一种简单的方法来判断我是否处于交替行中。”
Row.RowState == RowState.Alternating
此外,您始终可以在 ASP.NET 中的适当单元格上设置 CssClass,然后在您的 css 中定义该类。