ListView - Показать LayoutTemplate на пустом источнике данных - PullRequest
2 голосов
/ 21 октября 2010

Для страницы корзины покупок список товаров отображается в виде HTML-таблицы. Я использую ListView для этого, и он прекрасно работает.

Когда корзина пуста, появляется текст «Эта корзина пуста». Но он только отображает код в EmptyDataTemplate. Моя цель - отобразить заголовки таблицы («удалить», «продукт», «количество» и т. Д.), Не повторяя этот HTML-код в EmptyDataTemplate.

Пытаясь быть умным, я изменил свой EmptyDataTemplate на EditItemTemplate и использовал бит кода, показанный ниже.

Кто-нибудь может придумать более элегантное решение этой проблемы ??

[код C #]

    lvShoppingCart.DataSource = _cart.Items;
    lvShoppingCart.DataBind();


    if (_cart.ProductCount == 0)
    {
        lvShoppingCart.DataSource = new List<string>() { "dummy cart item" };
        lvShoppingCart.EditIndex = 0;
        lvShoppingCart.DataBind();
    }

[ASPX код]

    <asp:ListView ID="lvShoppingCart" runat="server">
        <LayoutTemplate>
            <table style="width: 600px;" border="0" cellspacing="0" cellpadding="0">
                <tr>
                    <td>
                        <table border="0" cellspacing="0" cellpadding="0">
                            <tr>
                                <td width="50">
                                    <strong>Delete</strong>
                                </td>
                                <td width="400">
                                    <strong>Product</strong>
                                </td>
                                <td width="100">
                                    <strong>Quantity</strong>
                                </td>
                                <td width="100">
                                    <strong>Price</strong>
                                </td>
                                <td width="100">
                                    <strong>Total</strong>
                                </td>
                            </tr>
                        </table>
                        <hr />
                    </td>
                </tr>
                <tr id="itemPlaceHolder" runat="server">
                </tr>
                <tr id="trShoppingCartUpdateBtn" runat="server">
                    <td>
                        <table width="100%" border="0" cellspacing="0" cellpadding="0">
                            <tr>
                                <td width="50">
                                    &nbsp;
                                </td>
                                <td width="400">
                                    &nbsp;
                                </td>
                                <td colspan="3" width="300">
                                    <table border="0" cellspacing="0" cellpadding="0">
                                        <tr>
                                            <td>
                                                <asp:ImageButton ID="btnImgUpdateQuantities" ImageUrl="../img/refresh.gif" AlternateText="update shopping cart"
                                                    OnClick="btnUpdateQuantities_Click" runat="server" />
                                            </td>
                                            <td>
                                                <asp:LinkButton ID="btnUpdateQuantities" Text="update cart" OnClick="btnUpdateQuantities_Click"
                                                    runat="server" />
                                            </td>
                                        </tr>
                                    </table>
                                </td>
                            </tr>
                        </table>
                    </td>
                </tr>
                <tr id="trShoppingCartTotals" runat="server">
                    <td>
                        <table width="100%" border="0" cellspacing="0" cellpadding="0">
                            <tr>
                                <td colspan="4">
                                    <div align="right">
                                        <strong>Totals: </strong>
                                    </div>
                                </td>
                                <td width="100">
                                    <asp:Label ID="lblCartTotal" runat="server" Text="0" />
                                </td>
                            </tr>
                        </table>
                    </td>
                </tr>
            </table>
        </LayoutTemplate>
        <EditItemTemplate>
            <tr>
                <td colspan="5" align="center">
                    <p>
                        <em>This cart is empty.</em>
                    </p>
                </td>
            </tr>
        </EditItemTemplate>
        <ItemTemplate>
            <tr>
                <td>
                    <table width="100%" border="0" cellspacing="0" cellpadding="0">
                        <tr>
                            <td width="50">
                                <a href='<%# ShoppingCartUrl %>?action=remove&id=<%# Eval("Product.Id") %>'>X</a>
                            </td>
                            <td width="400">
                                <%# Eval("Product.DisplayName") %>
                            </td>
                            <td width="100">
                                <label>
                                    <asp:TextBox ID="txtQuantity" Text='<%# Eval("Quantity") %>' runat="server" size="3" />
                                </label>
                            </td>
                            <td width="100">
                                <%# Eval("Price", "{0:C}") %>
                            </td>
                            <td width="100">
                                <%# Eval("TotalPrice", "{0:C}") %>
                            </td>
                        </tr>
                    </table>
                    <hr />
                </td>
            </tr>
        </ItemTemplate>
    </asp:ListView>

Ответы [ 2 ]

2 голосов
/ 17 мая 2011

Вы можете добавить пустой InsertItemTemplate и установить InsertItemPosition = "LastItem"

0 голосов
/ 18 декабря 2013

Ниже приведен упрощенный пример кода корзины покупок.Он использует решение «InsertItemTemplate», предоставленное в ответе пользователя 757933.Я считаю, что это более элегантное решение, чем использование EditItemTemplate, для которого требуется «фиктивный» источник данных.

Использование: по умолчанию вы должны увидеть пустую корзину.Когда вы раскомментируете строки для «хлеба», «яблок» и «яиц», сообщение «Эта корзина пуста» должно быть скрыто, вместо этого в корзине появятся три элемента.

[ASPX-код]

<code><asp:ListView ID="lvShoppingCart" runat="server">
    <LayoutTemplate>
        <pre>
        ---------------------------------------------------------------------------
        | Product           | Quantity           | Price           | Total        |
        ---------------------------------------------------------------------------
        <div id="itemPlaceHolder" runat="server">
        </div>
        ---------------------------------------------------------------------------
        |                                                          | <asp:Label ID="lblCartTotal" runat="server" Text="0" />    |
        ---------------------------------------------------------------------------
        
|Эта корзина пуста | |<% # Container.DataItem.ToString (). PadRight (17)%> ||||

[код C #]

    internal class Cart : IEnumerable<string>
    {
        public List<string> Items { get; set; }

        public Cart()
        {
            Items = new List<string>();
        }

        public IEnumerator<string> GetEnumerator()
        {
            return Items.GetEnumerator();
        }

        IEnumerator IEnumerable.GetEnumerator()
        {
            return GetEnumerator();
        }
    }

    protected void Page_Load(object sender, EventArgs e)
    {
        Cart _cart = new Cart();
        //_cart.Items.Add("bread");
        //_cart.Items.Add("apples");
        //_cart.Items.Add("eggs");

        lvShoppingCart.DataSource = _cart;
        // Make sure the 'InsertItemTemplate' is hidden from view when items are added to the cart.
        lvShoppingCart.InsertItemPosition = _cart.Items.Count == 0 ? InsertItemPosition.LastItem : InsertItemPosition.None;
        lvShoppingCart.DataBind();

        Label _lblCartTotal = lvShoppingCart.FindControl("lblCartTotal") as Label;
        if (_lblCartTotal != null)
        {
            _lblCartTotal.Text = string.Format("<strong>Total: </strong> {0}", _cart.Items.Count);
        }
    }
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...