2012-02-01 78 views
1

我有这种形式的字典字典< int,列表<CartItem> >,这dictionany包含有关我的购物车项目的信息。我正在寻找一种方式来显示结果在中继器或数据专家中,哪个更好。我一直在使用一个中继器开始,我被困将字典绑定到中继器asp.net 4

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

在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> 

任何帮助和建议,以试图显示的信息将是巨大的。该网页的目的是你可以有很多购物车根据不同的商家和你在这里显示它们比有一个链接称为更多的细节它会带你到一个特定的购物车。

感谢

回答

1

试试这个

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> 

这里的事情是,你控制你的代码背后的布局。在那里抓取必要的控制和当前数据。然后就像通常那样做你的绑定。

+0

谢谢...它工作完美 – wandos 2012-02-02 05:39:07

1

,而不是在字典使用正常的eval(“的ColumnName”),你会做简单的eval(“值”)

你可以做这样的事情。

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

它没有工作,你将如何指定密钥? – wandos 2012-02-01 21:31:03

+0

刚编辑我的答案 – 2012-02-01 21:38:46

+0

基本上你查了字典的关键,如果关键的标签是匹配的,你打印出“价值”使用eval() – 2012-02-01 21:46:40