我有个repeater,代码如下<asp:Repeater ID="Repeater1" runat="server" >
            <HeaderTemplate>
                <table >
                    <tr>
                        <th >
                            所属部门
                        </th>
                        <th >
                            部门成员
                        </th>                    
                    </tr>
            </HeaderTemplate>
            <ItemTemplate>
                <tr >
                    <td >
                        <%# DataBinder.Eval(Container.DataItem, "DepName")%>
                    </td>
                    <td >
                        <%# DataBinder.Eval(Container.DataItem, "Name")%>
                    </td>                
                 </tr>
            </ItemTemplate>
            <FooterTemplate>
                </table>
            </FooterTemplate>
        </cc1:Repeater>
我repeater里没放控件,如果放控件了,我知道如何遍历 foreach (RepeaterItem item in this.Repeater1.Items)
        {
            item.FindControl("控件id") as 控件类型           
        }
可是repeater里没有控件,怎么遍历呀?

解决方案 »

  1.   

    用 item.DataItem然后进行类型转换 如果绑定是 DataTable 的话 转换成 DataRowView
      

  2.   

    建议你用 lable 显示吧
      

  3.   

    foreach (RepeaterItem item in this.Repeater1.Items)
            {
                for(int i = 0; i < item.Cells; ++i)
    {
    string text = item.Cells[i].Text;
    }         
            }
      

  4.   

     <asp:Repeater ID="rtExamine" runat="server" >
                                <HeaderTemplate>
                                    <table style="width: 559px">
                                </HeaderTemplate>
                                <ItemTemplate>
                                    <tr>
                                        <asp:Label ID="lblIsPass" runat="server" Visible="false" Text='<%# Eval("IsPass") %>'></asp:Label>
                                        <td colspan="4">
                                            <hr />
                                        </td>
                                    </tr>
                                    <tr>
                                        <td style="width: 145px">
                                            <asp:Label ID="Label1" runat="server" Text="审核人编号"></asp:Label>
                                        </td>
                                        <td style="width: 163px">
                                            <asp:TextBox ID="TextBox1" ReadOnly="true" runat="server" CssClass="input" Text='<%#Eval("ToUserNum") %>'></asp:TextBox>
                                        </td>
                                        <td style="width: 145px">
                                            <asp:Label ID="Label2" runat="server" Text="审核人姓名"></asp:Label>
                                        </td>
                                        <td style="width: 162px">
                                            <asp:TextBox ID="TextBox2" ReadOnly="true" CssClass="input" runat="server" Text='<%#Eval("ToUserName") %>'></asp:TextBox>
                                        </td>
                                    </tr>
      

  5.   

    谢谢。就是用datatable绑定的,但是这个方法不行呀。谢谢,repeater虽然是简单绑定的,但是在前台执行了一些事件,才形成真正看到的repeater。
    当然我刚才那个代码只是示例。
    因此不想,也无法从后台获取那个datatable,只能遍历rpt了。
    然后要打印的。谢谢你,但不知道仔细看我的问题了没有。
      

  6.   


    哎,太多label会影响速度呀。
      

  7.   


    谢谢,你这个方法不行呀,item没有cells的属性,请测试下就知道了。
      

  8.   


    <html xmlns="http://www.w3.org/1999/xhtml">
    <head runat="server">
        <title></title>
    </head>
    <body>
        <form id="form1" runat="server">
        <asp:Repeater ID="rp" runat="server" onitemcreated="rp_ItemCreated">
        <AlternatingItemTemplate>
            <%#Eval("ID") %>,
        </AlternatingItemTemplate>
        <ItemTemplate>
            <%#Eval("ID") %>,
        </ItemTemplate>
        </asp:Repeater>
        </form>
    </body>
    </html>private DataTable GetDT()
        {
            DataTable dt = new DataTable();
            dt.Columns.Add(new DataColumn("ID", typeof(Int32)));
            DataRow dr;
            for (int i = 0; i < 5; i++)
            {
                dr = dt.NewRow();
                dr[0] = i;            
                dt.Rows.Add(dr);
            }
            return dt;
        }
        protected void Page_Load(object sender, EventArgs e)
        {
            if (!IsPostBack)
            {
                rp.DataSource = GetDT();
                rp.DataBind();
            }
        }
        protected void rp_ItemCreated(object sender, RepeaterItemEventArgs e)
        {
            if (e.Item.ItemType == ListItemType.Item || e.Item.ItemType == ListItemType.AlternatingItem)
            {
                DataRowView drv = e.Item.DataItem as DataRowView;
                if (drv != null)
                {
                    object obj = drv[0] ?? "0";
                    int id;
                    int.TryParse(obj.ToString(), out id);
                    switch (id)
                    {
                        case 1:
                            drv[0] = 1001;
                            e.Item.DataItem = drv;
                            break;
                        case 2:
                            drv[0] = 1002;
                            e.Item.DataItem = drv;
                            break;
                    }            }        }
        }还有其他办法的
      

  9.   

     foreach (RepeaterItem item in this.Repeater1.Items)
            {
    HtmlTableRow tr = (HtmlTableRow)item.FindControl("rows");
        foreach (HtmlTableCell td in tr.Cells)
        {
            Response.Write(td.InnerHtml);
        }        }
    protected void Repeater1_ItemDataBound(object sender, RepeaterItemEventArgs e) 
        { 
            if (e.Item.ItemType == ListItemType.Item || e.Item.ItemType == ListItemType.AlternatingItem) 
            { 
                DataRowView row = (DataRowView)e.Item.DataItem;//当前行的数据 
                
             } 
        } 
      

  10.   


    按照楼主给出的Repeater,除了用FindControl遍历找出来比较容易外,其他都比较困难吧当Repeater绑定完数据后,可以下个断点,看下他们怎么存储数据的就知道了按照楼主给的Repeater,也可以增加个Button事件,用下面的代码看下
     protected void Button1_Click(object sender, EventArgs e)
        {
            foreach (RepeaterItem item in this.Repeater1.Items)
            {
                Response.Write(((System.Web.UI.DataBoundLiteralControl)(item.Controls[0])).Text+"<br>");
            }
        }