ASP.NET ListView交替组

时间:2009-06-16 12:30:33

标签: asp.net

与大多数数据绑定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>

2 个答案:

答案 0 :(得分:2)

答案 1 :(得分:1)

首先:

<GroupTemplate>
    <tr class='<%# GetAlternatingCssClass() %>'>
        <asp:PlaceHolder ID="itemPlaceholder" runat="server"></asp:PlaceHolder>
    </tr>
</GroupTemplate>

只会对ListView进行一次评估,因为它是在处理页面时评估的,而不是每次访问元素时都是如此。为了按照这里的意图实现这一点,我认为你需要重写ListView的Render方法,以便根据GroupItemCount来替换类。我没有编码,所以这是假设。

GroupTemplate旨在提供一种流布局,其中每个项目都是一个自包含的元素,即完整的产品列表,以及项目和行没有连接的位置(就像表示字段的行中的单元格一样)在一个记录)。因此,行颜色无助于数据表示,但纯粹是错误的(并且可能会让用户看到以这种方式识别的不同记录的用户感到困惑,这可能会导致他们对实际不存在的数据关系做出推断)

我认为你需要做很多工作才能从基本的ListView中得到你想要的东西,我想第一个问题就是问你自己为什么要这个,这是用户要求还是基于你的要求美学(这本身并没有错,但你明白控制是为功能设计的,而不是审美的)。如果它不是用户要求,他们是否愿意为解决此问题付出代价?