有一个商品订单的IList泛型类,我现在要把商品订单全部呈现出来,
IList<Order> orderList=new List<Order>();//声明
orderList=GetOrderList();//获取订单列表
repeater.DataSource=orderList;//绑定到repeater控件但是orderList类下还有一个成员,orderList.ProductList,这个成员变量是IList类型,是指订单里的产品列表,也就是说一个产品订单里有多个商品.
现在我要把它们用嵌套Repeater显示出来,大家给个方法
示意图如下:                          订单一用户名:XX
运送地址:XX
产品列表:
产品1
产品2
……                          订单二用户名:XX
运送地址:XX
产品列表:
产品1
产品2
……

解决方案 »

  1.   

    不一定用欠套吧,你可以在鼠标移动到某个订单时,弹出一个悬浮的DIV 来显示商品列表嘛
      

  2.   

     所有的订单是一个Repeater,每个订单的产品列表是个Repeater 订单一 用户名:XX 
    运送地址:XX 
    产品列表: 
    产品1 
    产品2 
    ……                                                     订单二 用户名:XX 
    运送地址:XX 
    产品列表: 
    产品1 
    产品2 
    …… 
      

  3.   

    嵌套就嵌套啦<repeater>
     <itemtemplate>
         用户名:<%# Eval("X") %>
         运送地址:<%# Eval("X") %>
         产品列表:<%# Eval("X") %>
         <repeater>
              <itemtemplate>
                   产品<%# Eval("X") %>////楼主是不是在这里不知道绑定谁?怎么绑定了? 因为数据源不定?
              </itemtemplate>
         </repeater> 
     </itemtemplate>
    </repeater>
      

  4.   

     产品 <%#   Eval("X")   %> ////楼主是不是在这里不知道绑定谁?怎么绑定了?   因为数据源不定? 这个数据源就是orderList.ProductList,但是不知具体如何写了
      

  5.   

    给你一个实例吧  照着做即可,我这里的Repeater1 中嵌套了RadioButtonList 注意用到了   DataSource='<%# ((System.Data.DataRowView)Container.DataItem).CreateChildView("myrelation") %>'做嵌套记录集,后台注意
      ds.Relations.Add("myrelation",
            ds.Tables["questions"].Columns["id"],
            ds.Tables["answers"].Columns["questionsid"]);        //Bind the Authors table to the parent Repeater control, and call DataBind.
            Repeater1.DataSource = ds.Tables["questions"];
            Page.DataBind();
    建立父子关系
     <asp:Repeater ID="Repeater1" runat="server" OnItemDataBound="Repeater1_ItemDataBound">
                <HeaderTemplate>
                </HeaderTemplate>
                <ItemTemplate>
                    <a>
                        <%#Container.ItemIndex + 1%>
                        .</a><asp:Label ID="Label1" runat="server" Text='<%# Eval("subject") %>'></asp:Label>
                    <a>
                        <asp:RadioButtonList runat="server" ID="rblsss" RepeatLayout="Table" RepeatDirection="Horizontal"
                            DataSource='<%# ((System.Data.DataRowView)Container.DataItem).CreateChildView("myrelation") %>'>
                            
                        </asp:RadioButtonList>
                    </a>
                </ItemTemplate>
                <AlternatingItemTemplate>
                    <a>
                        <%#Container.ItemIndex + 1%>
                        .</a><asp:Label ID="Label1" runat="server" Text='<%# Eval("subject") %>'></asp:Label>
                    <asp:RadioButtonList runat="server" ID="rblsss" RepeatLayout="Table" RepeatDirection="Horizontal"
                        DataSource='<%# ((System.Data.DataRowView)Container.DataItem).CreateChildView("myrelation") %>'>
                        
                    </asp:RadioButtonList>
                    </a>
                </AlternatingItemTemplate>
                <SeparatorTemplate>
                    <br />
                </SeparatorTemplate>
                <FooterTemplate>
                </FooterTemplate>
            </asp:Repeater>using System;
    using System.Data;
    using System.Configuration;
    using System.Collections;
    using System.Web;
    using System.Web.Security;
    using System.Web.UI;
    using System.Web.UI.WebControls;
    using System.Web.UI.WebControls.WebParts;
    using System.Web.UI.HtmlControls;
    using liuyan;
    using System.Data.OleDb;
    public partial class exam_demo_testpaper : System.Web.UI.Page
    {
        #region 属性字段
        
        public string strWhere = "";
        #endregion    protected void Page_Load(object sender, EventArgs e)
        {        if (!IsPostBack)
            {
                Bind_rptFiles();
            }
        }    private void Bind_rptFiles()
        {
            //Create the connection and DataAdapter for the Authors table.
            string connectionString = @"Provider=Microsoft.Jet.OLEDB.4.0;Data Source=|DataDirectory|db.mdb;Persist Security Info=True";
            OleDbConnection cnn = new OleDbConnection(connectionString);
            OleDbDataAdapter cmd1 = new OleDbDataAdapter("select * from questions", cnn);        //Create and fill the DataSet.
            DataSet ds = new DataSet();
            cmd1.Fill(ds, "questions");        //Create a second DataAdapter for the Titles table.
            OleDbDataAdapter cmd2 = new OleDbDataAdapter("select * from answers", cnn);
            cmd2.Fill(ds, "answers");        //Create the relation bewtween the Authors and Titles tables.
            ds.Relations.Add("myrelation",
            ds.Tables["questions"].Columns["id"],
            ds.Tables["answers"].Columns["questionsid"]);        //Bind the Authors table to the parent Repeater control, and call DataBind.
            Repeater1.DataSource = ds.Tables["questions"];
            Page.DataBind();
            //Close the connection.
            cnn.Close();
        }
        protected void Repeater1_ItemDataBound(object sender, RepeaterItemEventArgs e)
        {
            if(e.Item.ItemType==ListItemType.Item||e.Item.ItemType==ListItemType.AlternatingItem)
            {
                RadioButtonList rda = e.Item.FindControl("rblsss") as RadioButtonList;
                rda.DataTextField = "result";
                rda.DataValueField = "id";
                rda.DataBind();
            }
        }
        protected void Button1_Click(object sender, EventArgs e)
        {
            string str = "";
            for(int i=0; i< this.Repeater1.Items.Count; i++)
            {
                RadioButtonList rda = this.Repeater1.Items[i].FindControl("rblsss") as RadioButtonList;
                
                 str = str + "|"+ rda.SelectedValue.ToString();
            }
            this.Label1.Text = str;
        }
    }
      

  6.   

    按照楼主的大体意思,写了个页面;<%@ Page Language="C#" AutoEventWireup="true"  CodeFile="Default.aspx.cs" Inherits="_Default" Trace="false" %><!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>无标题页</title>
    </head>
    <body>
        <form id="form1" runat="server">
        <div>
            <asp:Repeater ID="Repeater1" runat="server"  OnItemCreated="Repeater1_ItemCreated" OnItemDataBound="Repeater1_ItemDataBound">
            <ItemTemplate>
                <p>用户名:<%# Eval("UserName") %></p>
                <p>地址:<%#Eval("Address") %></p>
                <p>产品列表</p>
                <asp:Repeater ID="Repeater2" runat="server" OnItemDataBound="Repeater2_ItemDataBound">
                    <ItemTemplate>
                    <p>&nbsp;&nbsp; 产品<%# Container.DataItem %></p>
                    </ItemTemplate>
                </asp:Repeater>
            </ItemTemplate>
            </asp:Repeater>
        </div>
        </form>
    </body>
    </html>
    using System;
    using System.Data;
    using System.Configuration;
    using System.Web;
    using System.Web.Security;
    using System.Web.UI;
    using System.Web.UI.WebControls;
    using System.Web.UI.WebControls.WebParts;
    using System.Web.UI.HtmlControls;public partial class _Default : System.Web.UI.Page 
    {
        protected void Page_Load(object sender, EventArgs e)
        {
            Repeater1.DataSource = getOrderList();
            Repeater1.DataBind();    }    protected void Repeater1_ItemDataBound(object sender, RepeaterItemEventArgs e)
        {
            Trace.Warn("Repeater1_ItemDataBound");
            System.Web.UI.WebControls.Repeater repeater2 = (System.Web.UI.WebControls.Repeater)e.Item.FindControl("Repeater2");
            repeater2.DataSource = ((Order)e.Item.DataItem).ProductList;
            repeater2.DataBind();
            
        }    protected void Repeater2_ItemDataBound(object sender, RepeaterItemEventArgs e)
        {
            Trace.Warn("Repeater1_ItemDataBound");
        }    public System.Collections.Generic.IList<Order> getOrderList()
        {
            System.Collections.Generic.IList<Order> orderList = new System.Collections.Generic.List<Order>();
            Order ord;        ord = new Order();
            ord.UserName = "UserA";
            ord.Address = "UserA.Address";
            orderList.Add(ord);        ord = new Order();
            ord.UserName = "UserB";
            ord.Address = "UserB.Address";
            orderList.Add(ord);        return orderList;
        }
    }public class Order
    {
        private string userName;    public string UserName
        {
            get { return userName; }
            set { userName = value; }
        }
        private string address;    public string Address
        {
            get { return address; }
            set { address = value; }
        }
        private System.Collections.Generic.IList <string> productList;    public System.Collections.Generic.IList <string> ProductList
        {
            get {
                productList = new System.Collections.Generic.List <string> ();
                string str;
                str = UserName + "1";
                productList.Add(str);
                str = UserName + "2";
                productList.Add(str);
                str = UserName + "3";
                productList.Add(str);
                
        
                return productList; 
            }
            set { productList = value; }
        }}
      

  7.   

    关键就是这一段    protected void Repeater1_ItemDataBound(object sender, RepeaterItemEventArgs e)
        {
            Trace.Warn("Repeater1_ItemDataBound");
            System.Web.UI.WebControls.Repeater repeater2 = (System.Web.UI.WebControls.Repeater)e.Item.FindControl("Repeater2");
            repeater2.DataSource = ((Order)e.Item.DataItem).ProductList;
            repeater2.DataBind();
            
        }
    e.Item.FindControl这一句,找到Repeater2,因为Repeater2的实际ID是变化的,所以需要这样找到他,嘻嘻
    然后进行数据 绑定
    ((Order)e.Item.DataItem).ProductList;这一句找到当前条目所对应的数据            <asp:Repeater ID="Repeater2" runat="server" OnItemDataBound="Repeater2_ItemDataBound">
                    <ItemTemplate>
                    <p>&nbsp;&nbsp; 产品<%# Container.DataItem %></p>
                    </ItemTemplate>
                </asp:Repeater><%# Container.DataItem %>
    这个语句,楼主自己斟酌斟酌..呵呵
      

  8.   

    HTML代码中,,去掉OnItemCreated="Repeater1_ItemCreated"呵呵,自己乱加的
      

  9.   

    效果如下
    用户名:UserA地址:UserA.Address产品列表   产品UserA1   产品UserA2   产品UserA3用户名:UserB地址:UserB.Address产品列表   产品UserB1   产品UserB2   产品UserB3希望能解决楼主的问题
      

  10.   

    参考:
    http://download.csdn.net/source/332128
      

  11.   

    @bingdian37 
    <asp:Repeater ID="Repeater2" runat="server" OnItemDataBound="Repeater2_ItemDataBound">
    可以在上面直接指定DataSource 的
      

  12.   


    <%@ Page Language="C#" AutoEventWireup="true"  CodeFile="Default.aspx.cs" Inherits="_Default" Trace="false" %><!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>无标题页</title>
    </head>
    <body>
        <form id="form1" runat="server">
        <div>
            <asp:Repeater ID="Repeater1" runat="server"  DataSource=<%# getOrderList() %>>
            <ItemTemplate>
                <p>用户名:<%# Eval("UserName")  %></p>
                <p>地址:<%#Eval("Address") %></p>
                <p>产品列表</p>
                <asp:Repeater ID="Repeater2" runat="server" DataSource=<%# ((Order)Container.DataItem).ProductList %> >
                    <ItemTemplate>
                    <p>&nbsp;&nbsp; 产品<%# Container.DataItem %></p>
                    </ItemTemplate>
                </asp:Repeater>
            </ItemTemplate>
            </asp:Repeater>
        </div>
        </form>
    </body>
    </html>using System;
    using System.Data;
    using System.Configuration;
    using System.Web;
    using System.Web.Security;
    using System.Web.UI;
    using System.Web.UI.WebControls;
    using System.Web.UI.WebControls.WebParts;
    using System.Web.UI.HtmlControls;public partial class _Default : System.Web.UI.Page 
    {
        protected void Page_Load(object sender, EventArgs e)
        {
            Repeater1.DataBind();
        }    public System.Collections.Generic.IList<Order> getOrderList()
        {
            System.Collections.Generic.IList<Order> orderList = new System.Collections.Generic.List<Order>();
            Order ord;        ord = new Order();
            ord.UserName = "UserA";
            ord.Address = "UserA.Address";
            orderList.Add(ord);        ord = new Order();
            ord.UserName = "UserB";
            ord.Address = "UserB.Address";
            orderList.Add(ord);        return orderList;
        }
    }public class Order
    {
        private string userName;    public string UserName
        {
            get { return userName; }
            set { userName = value; }
        }
        private string address;    public string Address
        {
            get { return address; }
            set { address = value; }
        }
        private System.Collections.Generic.IList <string> productList;    public System.Collections.Generic.IList <string> ProductList
        {
            get {
                productList = new System.Collections.Generic.List <string> ();
                string str;
                str = UserName + "1";
                productList.Add(str);
                str = UserName + "2";
                productList.Add(str);
                str = UserName + "3";
                productList.Add(str);
                
        
                return productList; 
            }
            set { productList = value; }
        }}
      

  13.   

    怎么把这一句也去掉呢??    protected void Page_Load(object sender, EventArgs e)
        {
            Repeater1.DataBind();
        }