C# - 通过Repeater控件循环并访问通过DataBinder.Eval()添加的值

时间:2011-08-31 13:18:38

标签: c# .net loops repeater databinder

我有一个Repeater控件,可以向表中添加行。每个单元格内的数据来自绑定到转发器的数据表。

简化示例:

<asp:Repeater ID="Repeater1" runat="server">
  <ItemTemplate>
   <tr>
     <td>
        <%# DataBinder.Eval(Container.DataItem, "PartNumber")%>
     </td>
     <td>
         <%# DataBinder.Eval(Container.DataItem, "Quantity")%>
     </td>
   </tr>
</ItemTemplate>

在后面的代码中,我希望能够遍历每个转发器行并获取该行的Quantity值。

到目前为止我只有:

foreach (RepeaterItem ri in Repeater1.Items)
{

} 

4 个答案:

答案 0 :(得分:11)

我会将内容放在标签中,然后访问后面代码中的标签:

<asp:Repeater ID="Repeater1" runat="server"> 
   <ItemTemplate> 
   <tr> 
     <td> 
         <asp:Label ID="lblPartNumber" runat="server" Text='<%#Eval("PartNumber")%>' /> 
     </td> 
     <td> 
         <asp:Label ID="lblQuantity" runat="server" Text='<%#Eval("Quantity")%>' />
     </td> 
   </tr> 
   </ItemTemplate> 
</asp:Repeater>

在后面的代码中:

foreach (RepeaterItem ri in Repeater1.Items)
{
    Label quantityLabel = (Label)ri.FindControl("lblQuantity");
    Label partNumberLabel = (Label)ri.FindControl("lblPartNumber");

    string quantityText = quantityLabel.Text;
    string partNumberText = partNumberLabel.Text;
}

答案 1 :(得分:4)

您可以使用标签:

<td>      
    <asp:Label ID="lblPartNumber" runat="server" Text='<%#Eval("PartNumber")%>' />      
</td>      
<td>      
    <asp:Label ID="lblQuantity" runat="server" Text='<%#Eval("Quantity")%>' />     
</td>  

并获取转发器OnItemDataBound事件上的标签值。

protected void repeater_OnItemDataBound(object sender, RepeaterItemEventArgs  e)
{
    if (e.Item.ItemType == ListItemType.Item || e.Item.ItemType == ListItemType.AlternatingItem) 
    {
        foreach (Control c in e.Item.Controls)
        {
            if (c is Label)
            {
                // Grab label
                Label lbl = c as Label;
                String your_value = lbl.Text;
            }
        }
    }    

答案 2 :(得分:1)

您需要在转发器上设置DataKeys,以便以后可以检索它们。

http://www.singingeels.com/Articles/The_ListView_Dominates_The_Repeater.aspx

编辑:顺便说一下,我只是用Google搜索“Repeater DataKeys”,发现这篇文章位于顶部...我4年前写过这篇文章,所以请不要残忍! (你可以看一下C#中的示例代码)。

答案 3 :(得分:1)

可以通过检索ri元素中的项目来执行您的要求,这意味着您“可以”访问其内容。

通常,这个方法比初始方法好一点,就是在转发器的ItemTemplate中有一些带有id和其他属性的控件,这样你就可以简单地执行类似ri.FindControl("yourControlId")的操作,将其强制转换为Label或文字或其他任何控制,并使用其值或文本属性。

这是通常的方法,最好使用ID而不是匿名td或tr:)