将字典绑定到转发器asp.net 4

时间:2012-02-01 21:24:34

标签: asp.net dictionary repeater

我有一个字典,字典为< int,List< CartItem>&gt ;,这个字典包含有关我的购物车项目的信息。我正在寻找一种方法来显示转发器或数据列表中的结果更好。我已经开始使用转发器而且卡住了

我想在转发器的列表中显示转发器中每个元素的信息

page.aspx.cs中的

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 个答案:

答案 0 :(得分:2)

试试这个

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 :(得分:1)

而不是在字典上使用普通的Eval(“ColumnName”),你只需要做Eval(“value”)

你可以这样做。

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