Переменные группы ASP.NET ListView
Элемент управления ListView ASP.NET, как и большинство элементов управления ASP.NET с привязкой к базе данных, имеет AlternatingItemTemplate, который вы можете использовать, например, для визуализации другого класса css для нечетных и четных строк. Элемент управления также имеет GroupTemplate, который вы можете использовать для группировки элементов и отображения, например, трех элементов в TD, которые сгруппированы в TR. Однако нет альтернативного группового шаблона. Мой вопрос заключается в том, как чередовать атрибут класса tr в GroupTemplate. В принципе, я хочу иметь 3 элемента в TR и чередующихся стилях на нечетных и даже TR.
Я хочу избежать вложения одного элемента управления привязкой в другой, и я уже пытался привязать класс TR к выражению databinding <%# Alternate() %>
, но кажется, что выражения привязки данных вызываются только в 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>
Во-первых:
<GroupTemplate>
<tr class='<%# GetAlternatingCssClass() %>'>
<asp:PlaceHolder ID="itemPlaceholder" runat="server"></asp:PlaceHolder>
</tr>
</GroupTemplate>
будет оцениваться только один раз для ListView, поскольку он оценивается в точке обработки страницы, а не при каждом обращении к элементу. Чтобы реализовать это, как предполагается здесь, я думаю, вам нужно будет переопределить метод Render для ListView, чтобы чередовать класс на основе GroupItemCount. Я не кодировал это, так что это предположение.
The GroupTemplate предназначен для доставки своего рода макета потока, где каждый элемент является самосодержащим элементом, то есть полным списком продуктов, и где элементы и строки не связаны (поскольку они были бы как ячейки в строке, представляющей поля в записи). Поскольку такое чередование цвета строки не делает ничего, чтобы помочь представлению данных, но является чисто эстетичным (и, возможно, сбивающим с толку для пользователей, привыкших видеть разные записи, идентифицированные таким образом, это может заставить их делать выводы о связях данных, которые на самом деле не существуют).
Думаю, вам придется много работать, чтобы получить то, что вы хотите от основного ListView, я думаю, что первый вопрос, который вы задаете себе, - это то, почему вы этого хотите, и это требование пользователя или ваше требование на основе (ничего плохого в том, что само по себе, но вы цените, что элементы управления предназначены для функции, а не для атестичности). Если это не требование пользователя, они хотят заплатить за это, чтобы решить эту проблему?