Ограничить количество результатов в вложенном ASP.NET ListView - PullRequest
0 голосов
/ 19 июня 2009

Похоже на мой другой вопрос :

У меня ListView привязан к словарю. Затем у меня есть вложенный ListView для целых значений словаря.

Мне нужно ограничить количество элементов, связанных с вложенным списком, чем-то вроде 5, и показать еще одну кнопку в шаблоне.

Я не могу найти способ заставить работать еще одну кнопку и одновременно правильно ограничить число. У меня это работает как тот или другой прямо сейчас.

Есть идеи? Спасибо!

ОБНОВЛЕНИЕ:

Разметка выглядит примерно так:

<asp:ListView runat="server" ID="MainListView" ItemPlaceholderID="PlaceHolder2">
    <LayoutTemplate>
        <asp:PlaceHolder runat="server" ID="PlaceHolder2" />
    </LayoutTemplate>
    <ItemTemplate>
        <h1>My Main ListView - <%# Eval("Key") %></h1>
        <asp:ListView runat="server" ID="NestedListView" ItemPlaceholderID="PlaceHolder3"
        DataSource='<%# Eval("Value") %>' >
        <LayoutTemplate>
            <h2>One of many Nested ListViews</h2>
            <asp:PlaceHolder runat="server" ID="PlaceHolder3" />
        </LayoutTemplate>
        <ItemTemplate>
                <asp:LinkButton runat="server" ID="AnInteger" Text='<%# Eval("value") %>'></asp:LinkButton>
                <br />
        </ItemTemplate>
        </asp:ListView>
        <asp:LinkButton runat="server" ID="uxMoreIntegers" Text="More..." Visible="false" OnClick="uxMoreIntegers_Click"></asp:LinkButton>
    </ItemTemplate>
</asp:ListView>

Ответы [ 2 ]

1 голос
/ 19 июня 2009
  1. Привязка данных к основному ListView в любом случае.
  2. DataBind программно вложенный ListView в событии ItemDataBound для основного ListView

Код:

protected void uxListView_ItemDataBound(object sender, ListViewItemEventArgs e)
{
    if (e.Item.ItemType == ListViewItemType.DataItem)
    {
        ListViewDataItem item = (ListViewDataItem)e.Item;

        // Get the bound object (KeyValuePair from the dictionary)
        KeyValuePair<string, List<int>> nestedIntegerList = (KeyValuePair<string, List<int>>)item.DataItem;

        // Get our nested ListView for this Item
        ListView nestedListView = (ListView)e.Item.FindControl("uxNestedListView");

        // Check the number of items
        if (nestedIntegerList.Value.Count > 5)
        {
            // There are more items than we want to show, so show the "More..." button
            LinkButton button = (LinkButton)item.FindControl("uxMore");
            button.Visible = true;
        }

        // Bind the nestedListView to wahtever you want 
        nestedListView.DataSource = nestedIntegerList.Value.Take(5);
        nestedListView.DataBind();
    }
}
0 голосов
/ 19 июня 2009

Метод Take вернет первые 5 элементов в вашем списке, но не изменит сам список. Затем вы можете просто проверить количество элементов в списке, чтобы определить, нужно ли активировать кнопку «more».

someList.Take(5); //use these items in your ListView
moreButton.Enabled = (someList.Count > 5);
...