Привязка словаря к повторителю asp.net 4 - PullRequest
1 голос
/ 02 февраля 2012

у меня есть словарь в этой форме СловарьЭтот словарь содержит информацию о моей корзине.Я ищу способ показать результат в ретрансляторе или в списке данных, что когда-либо будет лучше.я начал использовать ретранслятор и застрял

Я хочу отобразить информацию в списке в ретрансляторе для каждого элемента в ретрансляторе

на странице.

void bindinfo()
{
        ShoppingCart cart = ShoppingCart.GetShoppingCart();
        RepeaterCustomerShoppingCarts.DataSource = cart.dictionaryShoppingCart;
        RepeaterCustomerShoppingCarts.DataBind();
}

в page.aspx

<asp:Repeater id="RepeaterCustomerShoppingCarts" onitemdatabound="RepeaterCustomerShoppingCarts_ItemDataBound" runat="server">
            <HeaderTemplate>
                 <table width="100%" border="0" cellspacing="0" cellpadding="0" class="shopping-table">
                    <tr>
                        <th>&nbsp;</th>
                        <th>Merchant Name</th>
                        <th>Quantity</th>
                        <th>Total Amount</th>
                        <th>&nbsp;</th>
                    </tr>
            </HeaderTemplate>
            <ItemTemplate>
               <tr>

                <td class="first"><asp:Image ID="MerchantLogo" runat="server" width="52" height="46"/></td>
                <td>
                    <b><asp:Label ID="lblTitle" runat="server" Text=""></asp:Label></b>
                    <p> <asp:Label ID="lblDetails" runat="server" Text=""></asp:Label> </p>
                </td>
                <td>
                    <div class="dropdown">
                            <asp:Label ID="lblQuantity" runat="server" Text=""></asp:Label>
                    </div>
                </td>
                <td><b><asp:Label ID="lblTotalPrice" runat="server" Text=""></asp:Label> </b></td>
                <td><asp:HyperLink ID="hlShopDetails" CssClass="remove" runat="server">More Details</asp:HyperLink></td>
            </tr>
            </ItemTemplate>
            <FooterTemplate>
                </table>
            </FooterTemplate>
        </asp:Repeater>

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

Ответы [ 2 ]

2 голосов
/ 02 февраля 2012

Попробуйте это

protected void RepeaterCustomerShoppingCarts_ItemDataBound(Object Sender, RepeaterItemEventArgs e) {
    if (e.Item.ItemType == ItemType.AlternatingItem || e.Item.ItemType == ItemType.Item){
         // Grab all your controls like this
         var lblQuantity = e.Item.FindControl("lblQuantity") as Label;
         var NestedRepeater = e.Item.FindControl("NestedRepeater") as Repeater;
         // Get the current data
         var data = (KeyValuePair<Int32, List<CartItem>>)e.Item.DataItem;
         //Bind the values
         lblQuantity.Text = data.Value.Count.ToString();
         NestedRepeater.DataSource = data.Value;
         NestedRepeater.DataBind();
    }
}

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

<asp:Repeater id="RepeaterCustomerShoppingCarts" onitemdatabound="RepeaterCustomerShoppingCarts_ItemDataBound" runat="server">     
        <ItemTemplate>     
            <asp:Label id="lblQuantity" runat="server" />
            <asp:Repeater runat="server" id="NestedRepeater">
                <ItemTemplate>
                    <!-- whatever your controls -->
                </ItemTemplate>
            </asp:Repeater>
        </ItemTemplate>
</asp:Repeater>

Дело в том, что вы управляете своим макетом в коде.Возьмите там необходимые элементы управления и текущие данные.Тогда просто делайте привязки как обычно.

1 голос
/ 02 февраля 2012

Вместо использования обычного Eval ("ColumnName") в словаре вы просто сделаете Eval ("value")

Вы могли бы сделать что-то вроде этого.

<asp:Label ID="lblQuantity" runat="server" Text='<%#(Eval("key")=="Quantity" ? Eval("value") : "") %>' />
...