Подсчет ItemTemplate в ListView из XmlDataSource в ASP.net - PullRequest
0 голосов
/ 03 сентября 2011

У меня есть следующий код.Это работает, как есть, но ... Я не всегда буду иметь четное количество элементов в RSS-канале. Итак, в конце таблицы у меня может быть только одна ячейка таблицы в последней строке.Итак, есть ли способ подсчитать количество ItemTemplates и AlternatingItemTemplate, поэтому, если это нечетное число, я смогу добавить еще одну ячейку <td>&nbsp;</td></tr> и закрыть строку таблицы?

<asp:XmlDataSource ID="SomeFeed" DataFile="TestSomeRSS.xml" XPath="rss/channel/item" runat="server"></asp:XmlDataSource>

<asp:ListView ID="SomeFeedScroller" DataSourceID="SomeFeed" ItemPlaceholderID="SomePlcID" runat="server">

<LayoutTemplate>

<table id="ListingsTable" cellpadding="0" cellspacing="0" align="center">
    <asp:PlaceHolder ID="SomePlcID" runat="server"></asp:PlaceHolder>
</table>

</LayoutTemplate>

<ItemTemplate>
    <tr style="vertical-align:top;">
    <td class="bnotes" style="width:325px;padding:5px;">
        <%# XPath("title")%><br />
        <%# XPath("description")%><br />
    </td>
</ItemTemplate>

<AlternatingItemTemplate>
    <td class="bnotes" style="width:325px;padding:5px;">
        <%# XPath("title")%><br />
        <%# XPath("description")%><br />
    </td>
    </tr>
</AlternatingItemTemplate>

</asp:ListView>

Заранее благодарим за помощь.

1 Ответ

1 голос
/ 03 сентября 2011

Я не уверен, что вы спрашиваете, но почему бы просто не поместить полную строку в ItemTemplate и AlternatingItemTemplate, например так:

<ItemTemplate>
    <tr style="vertical-align:top;">
        <td class="bnotes" style="width:325px;padding:5px;">         
            <%# XPath("title")%><br />         
            <%# XPath("description")%><br />     
        </td>
    </tr> 
</ItemTemplate>  
<AlternatingItemTemplate>
    <tr style="vertical-align:top;">     
        <td class="bnotes" style="width:325px;padding:5px;">         
            <%# XPath("title")%><br />         
            <%# XPath("description")%><br />     
        </td>     
    </tr> 
</AlternatingItemTemplate>

Таким образом, вам не нужно разбираться с этим самим - просто дайте элементу управления визуализироваться.

ИЗМЕНЕНО ДЛЯ ДОБАВЛЕНИЯ

Снова посмотрев на ваш опубликованный код, похоже, вы пытались выполнить один ряд чередующихся стилей ячеек. Я думаю, что вы неправильно поняли цель ItemTemplate и AlternatingItemTemplates; они обычно имеют дело с полями (столбцами) данной записи.

В этом случае у вас будет первый элемент RSS-канала в ItemTemplate, затем второй элемент RSS-канала в AlternateItemTemplate (то есть, в другой строке), затем третий элемент RSS-канала в ItemTemplate и т. Д.

Надеюсь, это поможет - если я неправильно понял, что вы пытаетесь сделать, дайте мне знать.

2-е редактирование

Исходя из примера макета, размещенного в комментариях, я думаю, что Класс DataList будет лучшим вариантом, так как вы можете легко указать несколько столбцов (используя свойство RepeatColumns). Примерно так:

<asp:XmlDataSource ID="SomeFeed" DataFile="TestSomeRSS.xml" XPath="rss/channel/item" runat="server">
</asp:XmlDataSource>

<asp:DataList ID="SomeFeedScroller" DataSourceID="SomeFeed" 
              RepeatColumns="2" RepeatDirection="Horizontal" 
              RepeatLayout="Table" runat="server">
    <ItemStyle CssClass="bnotes" Vertical-Align="top" Width="325px" />
    <AlternatingItemStyle CssClass="bnotes" vertical-Align="top" Width="325px" />
    <ItemTemplate>
        <%# XPath("title")%><br />
        <%# XPath("description")%>
    </ItemTemplate>
    <AlternatingItemTemplate>
        <%# XPath("title")%><br />
        <%# XPath("description")%>
    </AlternatingItemTemplate>
</asp:DataList>

Выше не проверено, но общая идея состояла в том, чтобы форматирование было как можно ближе к тому, что было в ListView.

Другим возможным подходом может быть что-то похожее на этот поток при наличии нескольких столбцов в элементе управления Repeater: Несколько столбцов в повторителе .

Элемент управления DataList поддерживает редактирование, выбор, обновление и т. Д., Например, ListView. Регулятор Repeater не работает.

...