我在Repeater里面又套了个Repeater。。。
为什么在第一个Repeater里面绑定第二个Repeater,只能绑定一行?
<asp:Repeater ID="rptShopList" runat="server" OnItemDataBound="rptShopList_OnItemDataBound"> <ItemTemplate> <div class="Itme"> <div class="ItmeT"> <ul> <li class="check"> <input type="checkbox" /></li> <li id="liCompany" runat="server" class="MJname">卖家店名:<%#Eval("Company")%></li> <li class="MJdz">店铺地址:教工路445号45楼455室 (孙眈眈 15756365725)</li> </ul> </div> <div class="ItmeC"> <ul> <asp:Repeater ID="rptProductList" runat="server" OnItemDataBound="rptProductList_OnItemDataBound"> <ItemTemplate> <li class="ImgName"> <div class="Img"> <img src="../ProductImg/50x50/20140102001.png" /></div> <div class="Name"> <a href="#"> <%#Eval("ProductName") %> </a> </div> </li> <li class="gmSl"> <a class="addNum" onclick="UpdateProductNum(1,<%#Eval("RowIndex") %>,<%#Eval("Price")%>)"> </a> <input id="txtBuyNum" type="text" value='<%#Eval("Count") %>' runat="server" /> <a class="romNum" onclick="UpdateProductNum(2,<%#Eval("RowIndex") %>,<%#Eval("Price")%>)"></a> </li> <li class="gmJg" id="liPrice" runat="server">¥<%#Eval("Price")%></li> <li class="szJf"> <%#Eval("Bonus")%></li> <li class="cz"><a id="aDel" runat="server">删除</a></li> </ItemTemplate> </asp:Repeater> </ul> </div> </div> </ItemTemplate> </asp:Repeater>
/// <summary> /// 购物车产品列表 /// </summary> public DataTable ProductsList { get { DataTable dt = new DataTable(); dt.Columns.Add(new DataColumn("RowIndex")); dt.Columns.Add(new DataColumn("Company")); dt.Columns.Add(new DataColumn("ProductName")); dt.Columns.Add(new DataColumn("Price")); dt.Columns.Add(new DataColumn("Bonus")); dt.Columns.Add(new DataColumn("Count")); int n = 0; for (int i = 0; i < 5; i++) { for (int j = 0; j < 5; j++) { DataRow dr = dt.NewRow(); if (i == 0 && j == 0) n = 0; else n += 1; dr["RowIndex"] = n; dr["Company"] = "商店" + (j + 1); dr["ProductName"] = "产品" + (i + 1); dr["Price"] = "1.00"; dr["Bonus"] = "1"; dr["Count"] = "1"; dt.Rows.Add(dr); } } if (hidIndex.Value != string.Empty) dt.Rows.RemoveAt(int.Parse(hidIndex.Value)); return dt; } }
/// <summary> /// 购物车商品列表绑定事件 /// </summary> /// <param name="sender"></param> /// <param name="e"></param> protected void rptShopList_OnItemDataBound(object sender, RepeaterItemEventArgs e) { if (e.Item.ItemType == ListItemType.Item || e.Item.ItemType == ListItemType.AlternatingItem) { HtmlGenericControl liCompany = e.Item.FindControl("liCompany") as HtmlGenericControl; Repeater rptProductList = e.Item.FindControl("rptProductList") as Repeater; DataRow[] dr = ProductsList.Select(string.Format("Company='{0}'", liCompany.InnerText.Replace("卖家店名:", ""))); rptProductList.DataSource = dr.CopyToDataTable(); rptProductList.DataBind(); foreach (RepeaterItem item in rptProductList.Items) { HtmlAnchor aDel = item.FindControl("aDel") as HtmlAnchor; aDel.Attributes.Add("class", "a3"); aDel.Attributes.Add("style", "cursor:pointer"); aDel.Attributes.Add("onclick", string.Format("javascript:DelProduct('{0}');", e.Item.ItemIndex)); HtmlInputText txtBuyNum = item.FindControl("txtBuyNum") as HtmlInputText; HtmlGenericControl liPrice = item.FindControl("liPrice") as HtmlGenericControl; Sum += decimal.Parse(txtBuyNum.Value) * decimal.Parse(liPrice.InnerText.Replace("¥", "")); stgSum.InnerText = Sum.ToString("¥0.00"); } } }
http://www.cnblogs.com/axing/archive/2011/05/12/Repeater.html 我之前做的,参考下
额,谢谢,我只是想知道为什么我的只能绑定一行。。。。
@以便以谢: 我看你上面往table中添加数据的时候是这样:
dr["RowIndex"] = n; dr["Company"] = "商店" + (j + 1); dr["ProductName"] = "产品" + (i + 1); dr["Price"] = "1.00"; dr["Bonus"] = "1"; dr["Count"] = "1"; dt.Rows.Add(dr);
5条数据的Company名字都不一样.
下面给内嵌的reapeter的数据源绑定的是:
DataRow[] dr = ProductsList.Select(string.Format("Company='{0}'", liCompany.InnerText.Replace("卖家店名:", "")));
这个dr内容肯定只有一条,所有你绑定内嵌Reapeter肯定只有一条啊~ 你调试下看看这个dr是不是只有一条。
@-Stephen: 是双循环。。。^_^
@以便以谢: rptProductList.DataSource = dr.CopyToDataTable();这个里面有多条数据,显示的时候只有一条?
@-Stephen: 对- -!
@以便以谢:这样。先把rptProductList.DataSource = dr.CopyToDataTable(); rptProductList.DataBind();下面的代码屏蔽掉。看下是否显示正常。因为不清楚你内嵌的Reaeter时间中是否还有其他操作。一步一步调试看看。
@-Stephen: 后面只是给里面的reapeter里面的控件绑定事件。。。
@以便以谢: 我的意思是,单独把绑定内嵌Reapeter那部分独立出来调试。这样才能一步一步排除问题。
@-Stephen: 额。。刚才已经把后面的代码注释了,还是不行,跟后面的代码没关系的。。- -
@以便以谢: 直接自定义一个DataTable,里面随便放上几条数据,然后绑定上去,看是否能全部显示
@-Stephen: 后来我把dr.CopyToDataTable<DataRow>()换成了一个自己定义的DataTable还是不行,我郁闷了
/// <summary> /// 购物车产品列表 /// </summary> public DataTable ProductsList { get { DataTable dt = new DataTable(); dt.Columns.Add(new DataColumn("RowIndex")); dt.Columns.Add(new DataColumn("Company")); dt.Columns.Add(new DataColumn("ProductID")); dt.Columns.Add(new DataColumn("ProductName")); dt.Columns.Add(new DataColumn("SaleUserID")); dt.Columns.Add(new DataColumn("ProductImg")); dt.Columns.Add(new DataColumn("Price")); dt.Columns.Add(new DataColumn("Bonus")); dt.Columns.Add(new DataColumn("Count")); int n = 0; for (int i = 0; i < 5; i++) { for (int j = 0; j < 5; j++) { DataRow dr = dt.NewRow(); if (i == 0 && j == 0) n = 0; else n += 1; dr["RowIndex"] = n; dr["Company"] = "商店" + (j + 1); dr["ProductID"] = j + 1; dr["ProductName"] = "产品" + (i + 1); dr["SaleUserID"] = j + 1; dr["ProductImg"] = "../ProductImg/50x50/20140102001.png"; dr["Price"] = "1.00"; dr["Bonus"] = "1"; dr["Count"] = "1"; dt.Rows.Add(dr); } } if (hidIndex.Value != string.Empty) dt.Rows.RemoveAt(int.Parse(hidIndex.Value)); return dt; } } rptProductList.DataSource = ProductsList;
@以便以谢:新的 DataTable中也是多条数据,然后界面只显示1条???这么奇怪,你搜索下代码看是不是还有其他地方在处理那个内嵌的Reapeter~~
@-Stephen: 就是在行绑定里面处理,其他地方没有。。。
@-Stephen: 原来是样式里面把高度设定死了。。。下面的行没显示出来。。。本来应该循环div,我循环的ul,ul的高度是死的。。。