webForm中数据绑定控件的嵌套
2012-11-14 14:06
531 查看
有时候不得不在数据绑定控件中嵌套数据绑定控件来完成要求的数据显示效果 .公司在做一个商城的项目,有个页面的要求如图所示.
我很使劲儿的想了想,貌似只能嵌套数据控件了.外部的控件(简称为Repeater1)直接指定DataSource就可以了,但是内部数据控件(Repeater2)的DataSource的在父控件每次迭代时都需要变化,就不是单纯的指定一下就可以的事了.
我有很使劲儿的想了想, 数据绑定控件貌似都有一个ItemDataBound事件,每次迭代数据前都会触发,只要在Repeater1的ItemDataBound事件中, 按照当前迭代的Item,指定Repeater2的DataSource就可以了.
可以通过e.Item.ItemType判断当前迭代的是哪一项(Item或者HeaderItem或其他.)
e.Item.FindControl("[id]")可以获得指定的Repeater1中的控件.
e.Item.DataItem可以得到当前项的数据.可以是DataRow,也可以是一个类的实体.
演示的代码如下:
先定义两个用于展示数据的实体:
aspx页面:
在OnPageLoad中模拟数据,并且绑定Repeater1的数据源:
在Repeater1的ItemDataBound事件中,切换Repeater2的DataSource:
我很使劲儿的想了想,貌似只能嵌套数据控件了.外部的控件(简称为Repeater1)直接指定DataSource就可以了,但是内部数据控件(Repeater2)的DataSource的在父控件每次迭代时都需要变化,就不是单纯的指定一下就可以的事了.
我有很使劲儿的想了想, 数据绑定控件貌似都有一个ItemDataBound事件,每次迭代数据前都会触发,只要在Repeater1的ItemDataBound事件中, 按照当前迭代的Item,指定Repeater2的DataSource就可以了.
可以通过e.Item.ItemType判断当前迭代的是哪一项(Item或者HeaderItem或其他.)
e.Item.FindControl("[id]")可以获得指定的Repeater1中的控件.
e.Item.DataItem可以得到当前项的数据.可以是DataRow,也可以是一个类的实体.
演示的代码如下:
先定义两个用于展示数据的实体:
/// <summary> /// 订单实体类 /// </summary> public class ModelOrder { public string OrderId { get; set; } public string OrderNum { get; set; } public string OrderTime { get; set; } public string OrderPrice { get; set; } public string ShouPeople { get; set; } public string OrderState { get; set; } } /// <summary> /// 物品实体类 /// </summary> public class ModelGood { public string OrderId { get; set; } public string GoodImg { get; set; } public string GoodName { get; set; } public string GoodType { get; set; } public string GoodPrice { get; set; } public string GoodQuantity { get; set; } }
aspx页面:
<asp:Repeater ID="rpOrder" runat="server" OnItemDataBound="rpOrder_ItemDataBound"> <ItemTemplate> <table border="0" cellpadding="0" cellspacing="0" class="OrderTable"> <tr> <td width="268" height="31" class="t1" colspan="3"> <div class="p_box"> <p class="p1"> 订单编号:<%#Eval("OrderNum") %></p> <p class="p1"> 下单时间:<%#Eval("OrderTime") %></p> <p class="p1"> 订单金额:<span class="redBold"><%#Eval("OrderPrice") %></span></p> <p class="p2"> 收货人:<%#Eval("ShouPeople") %></p> <div class="clear"> </div> </div> </td> </tr> <tr> <td width="546" class="brt"> <table border="0" cellpadding="0" cellspacing="0" class="OrderTable_child"> <asp:Repeater ID="rpGoods" runat="server"> <ItemTemplate> <tr> <td width="72" height="90"> <div class="imgBox"> <img src='<%#Eval("GoodImg") %>' /></div> </td> <td width="196" class="brt"> <div class="a1"> <a href="#"> <%#Eval("GoodName") %></a></div> </td> <td width="96" class="brt"> <%#Eval("GoodType") %> </td> <td width="92" class="brt"> <%#Eval("GoodPrice") %> </td> <td> <%#Eval("GoodQuantity") %> </td> </tr> </ItemTemplate> </asp:Repeater> </table> </td> <td width="186" class="brt"> <%#Eval("OrderState") %> </td> <td width="81"> <p class="P_style"> <a href="#">付款</a></p> <p class="P_style"> <a href="#">查看订单</a></p> <p class="P_style"> <a href="#">取消订单</a></p> </td> </tr> </table> </ItemTemplate> </asp:Repeater>
在OnPageLoad中模拟数据,并且绑定Repeater1的数据源:
protected void Page_Load(object sender, EventArgs e) { //用于展示数据 listOrder.Add(new ModelOrder() { OrderId = "1", OrderNum = "123456", OrderTime = "2012-10-26 8:40", OrderPrice = "384:00", ShouPeople = "张小三", OrderState = "手机出库,待收货付款" }); listOrder.Add(new ModelOrder() { OrderId = "2", OrderNum = "123456", OrderTime = "2012-10-26 8:40", OrderPrice = "384:00", ShouPeople = "张小三", OrderState = "手机出库,待收货付款" }); //用于展示数据 listGood.Add(new ModelGood() { OrderId = "1", GoodImg = @"images/goods_50x50.jpg", GoodName ="移动电源5200mAh,LED显示灯", GoodType = "普通", GoodPrice = "199.00", GoodQuantity = "1" }); listGood.Add(new ModelGood() { OrderId = "1", GoodImg = @"images/goods_50x50.jpg", GoodName a04f = "移动电源5200mAh,LED显示灯", GoodType = "普通", GoodPrice = "199.00", GoodQuantity = "1" }); listGood.Add(new ModelGood() { OrderId = "1", GoodImg = @"images/goods_50x50.jpg", GoodName = "移动电源5200mAh,LED显示灯", GoodType = "普通", GoodPrice = "199.00", GoodQuantity = "1" }); listGood.Add(new ModelGood() { OrderId = "2", GoodImg = @"images/goods_50x50.jpg", GoodName = "移动电源5200mAh,LED显示灯", GoodType = "普通", GoodPrice = "199.00", GoodQuantity = "1" }); listGood.Add(new ModelGood() { OrderId = "2", GoodImg = @"images/goods_50x50.jpg", GoodName = "移动电源5200mAh,LED显示灯", GoodType = "普通", GoodPrice = "199.00", GoodQuantity = "1" }); rpOrder.DataSource = listOrder; rpOrder.DataBind(); }
在Repeater1的ItemDataBound事件中,切换Repeater2的DataSource:
/// <summary> /// 订单Repeater的ItemDataBound事件 /// </summary> /// <param name="sender"></param> /// <param name="e"></param> protected void rpOrder_ItemDataBound(object sender, RepeaterItemEventArgs e) { if (e.Item.ItemType == ListItemType.Item || e.Item.ItemType == ListItemType.AlternatingItem) { Repeater rp = e.Item.FindControl("rpGoods") as Repeater; //取得与当前RepeaterItem关联的数据项 ModelOrder modelOrder = e.Item.DataItem as ModelOrder; var list = from good in listGood where good.OrderId == modelOrder.OrderId select good; rp.DataSource = list.ToList<ModelGood>(); rp.DataBind(); } }
相关文章推荐
- webForm数据绑定控件的嵌套
- .NET各大平台数据列表控件绑定原理及比较(WebForm、Winform、WPF)
- .NET各大平台数据列表控件绑定原理及比较(WebForm、Winform、WPF)
- WebForm简单控件数据绑定
- .NET各大平台数据列表控件绑定原理及比较(WebForm、Winform、WPF)
- 在FormView控件中嵌套数据绑定控件的问题,以及从一个对象中反射获取属性值的简单办法
- .NET各大平台数据列表控件绑定原理及比较(WebForm、Winform、WPF)
- 今日学习心得:如何做解决数据绑定控件嵌套问题
- 叠代三层数据绑定(嵌套DataList子控件事件的激发)
- 《ASP.NET1200例》嵌套在DataLisT控件中的其他服务器控件---DropDownList控件的数据绑定
- 关于webform中控件的列表数据的绑定
- Repeater控件多个嵌套的数据绑定之简单实现
- VS2013从头开始创建Web Form--ASP.NET数据源和数据绑定控件
- CYQ.Data 轻量数据访问层(九) 自定义数据表实现绑定常用的数据控件(下)
- CYQ.Data 轻量数据访问层(七) 自定义数据表实现绑定常用的数据控件(上)
- ASP.NET 2.0:通过SqlDataSource绑定数据到普通控件
- 数据绑定多记录 Web 服务器控件
- treeview 控件动态绑定数据部分实例代码
- 如何解决FormView中实现DropDownList连动选择时出现 "Eval()、XPath() 和 Bind() 这类数据绑定方法只能在数据绑定控件的上下文中使用" 的错误
- sqlconnection 与 repeater等数据控件的绑定