与大多数数据绑定ASP.NET控件一样,ASP.NET ListView控件有一个AlternatingItemTemplate,您可以使用它来为奇数行和偶数行呈现不同的css类。该控件还具有GroupTemplate,您可以使用该组对项目进行分组并显示TD中分组的3个项目。但是没有交替的组模板。我的问题是如何在GroupTemplate中交替tr的class属性。基本上我想在TR中有3个项目,在奇数和偶数TR上交替使用样式。
我想避免将一个数据绑定控件嵌套在另一个中,我已经尝试在数据绑定表达式<%# Alternate() %>
中绑定TR的类,但似乎只在itemtemplate中调用数据绑定表达式(显然它们是在数据绑定事件中使用,并且不为组模板调用
有什么想法吗?
示例代码:
<asp:ListView ID="lv1" runat="server" EnableViewState="false" GroupItemCount="3">
<LayoutTemplate>
<table class="asd">
<asp:PlaceHolder ID="groupPlaceholder" runat="server"></asp:PlaceHolder>
</table>
</LayoutTemplate>
<GroupTemplate>
<tr class='<%# GetAlternatingCssClass() %>'>
<asp:PlaceHolder ID="itemPlaceholder" runat="server"></asp:PlaceHolder>
</tr>
</GroupTemplate>
<ItemTemplate>
<td>
<asp:HyperLink runat="server" NavigateUrl='<%# Eval("Url") %>'> <%# Eval("Text") %> </asp:HyperLink>
</td>
</ItemTemplate>
</asp:ListView>
答案 0 :(得分:2)
答案 1 :(得分:1)
首先:
<GroupTemplate>
<tr class='<%# GetAlternatingCssClass() %>'>
<asp:PlaceHolder ID="itemPlaceholder" runat="server"></asp:PlaceHolder>
</tr>
</GroupTemplate>
只会对ListView进行一次评估,因为它是在处理页面时评估的,而不是每次访问元素时都是如此。为了按照这里的意图实现这一点,我认为你需要重写ListView的Render方法,以便根据GroupItemCount来替换类。我没有编码,所以这是假设。
GroupTemplate旨在提供一种流布局,其中每个项目都是一个自包含的元素,即完整的产品列表,以及项目和行没有连接的位置(就像表示字段的行中的单元格一样)在一个记录)。因此,行颜色无助于数据表示,但纯粹是错误的(并且可能会让用户看到以这种方式识别的不同记录的用户感到困惑,这可能会导致他们对实际不存在的数据关系做出推断)
我认为你需要做很多工作才能从基本的ListView中得到你想要的东西,我想第一个问题就是问你自己为什么要这个,这是用户要求还是基于你的要求美学(这本身并没有错,但你明白控制是为功能设计的,而不是审美的)。如果它不是用户要求,他们是否愿意为解决此问题付出代价?