下面是购物车代码的简化示例。
它正在使用用户757933的答案中提供的“InsertItemTemplate”解决方案。
我发现这是一个比使用需要“虚拟”数据源的“EditItemTemplate”更优雅的解决方案。
用法:
[ASPX代码]
<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" /> |
---------------------------------------------------------------------------
</pre>
</LayoutTemplate>
<InsertItemTemplate>
| This cart is empty |
</InsertItemTemplate>
<ItemTemplate>
| <%# Container.DataItem.ToString().PadRight(17) %> | | | |
</ItemTemplate>
</asp:ListView>
[代码]
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);
}
}