Переменные группы ASP.NET ListView

61
5

Элемент управления 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>

спросил(а) 2021-01-19T22:08:35+03:00 2 месяца, 3 недели назад
1
Решение
75
ответил(а) 2021-01-19T22:08:35+03:00 2 месяца, 3 недели назад
62

Во-первых:


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

будет оцениваться только один раз для ListView, поскольку он оценивается в точке обработки страницы, а не при каждом обращении к элементу. Чтобы реализовать это, как предполагается здесь, я думаю, вам нужно будет переопределить метод Render для ListView, чтобы чередовать класс на основе GroupItemCount. Я не кодировал это, так что это предположение.

The GroupTemplate предназначен для доставки своего рода макета потока, где каждый элемент является самосодержащим элементом, то есть полным списком продуктов, и где элементы и строки не связаны (поскольку они были бы как ячейки в строке, представляющей поля в записи). Поскольку такое чередование цвета строки не делает ничего, чтобы помочь представлению данных, но является чисто эстетичным (и, возможно, сбивающим с толку для пользователей, привыкших видеть разные записи, идентифицированные таким образом, это может заставить их делать выводы о связях данных, которые на самом деле не существуют).


Думаю, вам придется много работать, чтобы получить то, что вы хотите от основного ListView, я думаю, что первый вопрос, который вы задаете себе, - это то, почему вы этого хотите, и это требование пользователя или ваше требование на основе (ничего плохого в том, что само по себе, но вы цените, что элементы управления предназначены для функции, а не для атестичности). Если это не требование пользователя, они хотят заплатить за это, чтобы решить эту проблему?

ответил(а) 2021-01-19T22:08:35+03:00 2 месяца, 3 недели назад
Ваш ответ
Введите минимум 50 символов
Чтобы , пожалуйста,
Выберите тему жалобы:

Другая проблема