repeater嵌套问题,为什么内层的REPEATER在.CS文件中不能调用,???

解决方案 »

  1.   

    通过Repeater1_ItemDataBound
    查找Repeater2
     Repeater rep = e.Item.FindControl("Repeater2") as Repeater;
      

  2.   

    我这有个Demo
    <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
    <html xmlns="http://www.w3.org/1999/xhtml">
    <head runat="server">
        <title>Repeater嵌套</title>
    </head>
    <body>
        <form id="form1" runat="server">
        <div>
            <table style="border-collapse: collapse;" border="1">
                <tr>
                    <th>
                        订单号
                    </th>
                    <th>
                        联系人
                    </th>
                    <th>
                        下单时间
                    </th>
                    <th>
                        商品信息
                    </th>
                </tr>
                <asp:Repeater ID="Repeater1" runat="server" OnItemDataBound="Repeater1_ItemDataBound">
                    <ItemTemplate>
                        <tr>
                            <td>
                                <%#Eval("OrderID") %>
                            </td>
                            <td>
                                <%#Eval("LinkMan") %>
                            </td>
                            <td>
                                <%#Eval("SubmitTime") %>
                            </td>
                            <td>
                                <table style="border-collapse: collapse;" border="1">
                                    <tr>
                                        <th>
                                            商品编号
                                        </th>
                                        <th>
                                            数量
                                        </th>
                                    </tr>
                                    <asp:Repeater ID="subRepeater" runat="server" OnItemDataBound="subRepeater_ItemDataBound">
                                        <ItemTemplate>
                                            <tr>
                                                <td>
                                                    <%#Eval("GoodsID") %>
                                                </td>
                                                <td>
                                                    <%#Eval("Amount").ToString() %>
                                                </td>
                                            </tr>
                                        </ItemTemplate>
                                        <FooterTemplate>
                                            <tr>
                                                <td colspan="2">
                                                    <asp:Literal ID="literalSum" runat="server"></asp:Literal>
                                                </td>
                                            </tr>
                                        </FooterTemplate>
                                    </asp:Repeater>
                                </table>
                            </td>
                        </tr>
                    </ItemTemplate>
                </asp:Repeater>
            </table>
        </div>
        </form>
    </body>
    </html>引入命名空间
    using System.Collections.Generic;public partial class _Default : System.Web.UI.Page
        {
            /// <summary>
            /// 订单
            /// </summary>
            public class Order
            {
                public string OrderID { set; get; }
                public string LinkMan { set; get; }
                public DateTime SubmitTime { set; get; }
            }        /// <summary>
            /// 商品
            /// </summary>
            public class Goods
            {
                public string OrderID { set; get; }
                public string GoodsID { set; get; }
                public int Amount { set; get; }
            }        protected void Page_Load(object sender, EventArgs e)
            {
                if (!Page.IsPostBack)
                {
                    this.Repeater1.DataSource = this.GetOrderData();
                    this.Repeater1.DataBind();
                }
            }        /// <summary>
            /// 获取订单信息
            /// </summary>
            /// <returns>订单列表</returns>
            public List<Order> GetOrderData()
            {
                List<Order> orderList = new List<Order>()
                {
                    new Order(){ OrderID="s001", LinkMan="张三", SubmitTime=DateTime.Now},
                    new Order(){ OrderID="s002", LinkMan="李四", SubmitTime=DateTime.Now.AddDays(-1)},
                    new Order(){ OrderID="s003", LinkMan="王五", SubmitTime=DateTime.Now.AddHours(-8)},
                    new Order(){ OrderID="s004", LinkMan="赵六", SubmitTime=DateTime.Now.AddHours(-6.5)},
                    new Order(){ OrderID="s005", LinkMan="小七", SubmitTime=DateTime.Now.AddDays(-2)}
                };
                return orderList;
            }        /// <summary>
            /// 根据订单号获取商品信息
            /// </summary>
            /// <param name="OrderID">订单编号</param>
            /// <returns>商品信息列表</returns>
            public List<Goods> GetGoodsData(string OrderID)
            {
                List<Goods> goodsList = new List<Goods>() 
                { 
                    new Goods{ OrderID="s001", GoodsID="SC001", Amount=1},
                    new Goods{ OrderID="s001", GoodsID="SC002", Amount=1},
                    new Goods{ OrderID="s001", GoodsID="SC003", Amount=6},
                    new Goods{ OrderID="s002", GoodsID="SC001", Amount=1},
                    new Goods{ OrderID="s002", GoodsID="SC004", Amount=10},
                    new Goods{ OrderID="s002", GoodsID="SC005", Amount=1},
                    new Goods{ OrderID="s005", GoodsID="SC001", Amount=1},
                    new Goods{ OrderID="s005", GoodsID="SC005", Amount=1},
                    new Goods{ OrderID="s005", GoodsID="SC007", Amount=1},
                    new Goods{ OrderID="s005", GoodsID="SC008", Amount=2},
                    new Goods{ OrderID="s005", GoodsID="SC004", Amount=3},
                    new Goods{ OrderID="s005", GoodsID="SC009", Amount=1},
                };
                return goodsList.FindAll(delegate(Goods g) { return g.OrderID == OrderID; });
            }        protected void Repeater1_ItemDataBound(object sender, RepeaterItemEventArgs e)
            {
                if (e.Item.ItemType == ListItemType.Item || e.Item.ItemType == ListItemType.AlternatingItem)
                {
                    sum = 0;  //商品总数归零
                    Repeater subRepeater = e.Item.FindControl("subRepeater") as Repeater;
                    string OrderID = DataBinder.Eval(e.Item.DataItem, "OrderID").ToString();
                    List<Goods> goodsList = this.GetGoodsData(OrderID);
                    subRepeater.DataSource = goodsList;
                    subRepeater.DataBind();
                }
            }        int sum = 0;
            protected void subRepeater_ItemDataBound(object sender, RepeaterItemEventArgs e)
            {
                if (e.Item.ItemType == ListItemType.Item || e.Item.ItemType == ListItemType.AlternatingItem)
                {
                    int amount = Convert.ToInt32(DataBinder.Eval(e.Item.DataItem, "Amount"));
                    sum += amount;
                }
                if (e.Item.ItemType == ListItemType.Footer)
                {
                    Literal literal = e.Item.FindControl("literalSum") as Literal;
                    literal.Text = "总数:" + sum.ToString();
                }
            }
        }
      

  3.   

    用FindControl("ID")来取。
    <asp:repeater id="repeaterMain" Runat="server" OnItemDataBound="repeaterMain_ItemDataBound">
            <ItemTemplate>
            <table>
            <tr><td>
            <a href= " <%#"Details.aspx?au_id=" + DataBinder.Eval(Container,"DataItem.au_id")%> "> <%#DataBinder.Eval(Container,"DataItem.au_id")%> </a> 大类<br>
            </td>
            </tr>
                <asp:repeater ID="repeaterSub" Runat="server">
                <ItemTemplate>
                  <tr>
                  <td>
                  <a href= " <%#"Details.aspx?title_id=" + DataBinder.Eval(Container,"DataItem.title_id")%> "> <%#DataBinder.Eval(Container, "DataItem.title_id")%> </a> 小类
                  </td>
                  </tr>
                </ItemTemplate>
                </asp:repeater>
            </table>
            </ItemTemplate>
           
            </asp:repeater>protected void Page_Load(object sender, EventArgs e)
        {
            if (!IsPostBack)
            {
                BindMain();
            }
        }    private void BindMain()
        {
            SqlConnection cn = new SqlConnection(@"server=(local);uid=sa;pwd=1234567890;database=pubs");
            SqlDataAdapter da = new SqlDataAdapter("select   au_id   from   authors", cn);
            DataSet ds = new DataSet();
            cn.Open();
            da.Fill(ds);
            repeaterMain.DataSource = ds.Tables[0].DefaultView;
            repeaterMain.DataBind();
            cn.Close();
        }    protected void repeaterMain_ItemDataBound(object sender, RepeaterItemEventArgs e)
        {
            if (e.Item.ItemType == ListItemType.Item || e.Item.ItemType == ListItemType.AlternatingItem)
            {
                string au_id = ((DataRowView)e.Item.DataItem).Row["au_id"].ToString();
                Repeater repeaterSub = (Repeater)e.Item.FindControl("repeaterSub");
                if (repeaterSub != null)
                {
                    SqlConnection cn = new SqlConnection(@"server=(local);uid=sa;pwd=1234567890;database=pubs");
                    SqlCommand cmd = new SqlCommand("select   title_id   from   titleauthor   where   au_id   =   @au_id", cn);
                    cmd.Parameters.Add("@au_id", SqlDbType.VarChar, 11).Value = au_id;
                    cn.Open();
                    repeaterSub.DataSource = cmd.ExecuteReader();
                    repeaterSub.DataBind();
                    cn.Close();
                }
            }
        }参考