4

我有一个可以将行添加到表中的 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

4 回答 4

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;
}
于 2011-08-31T14:08:57.137 回答
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;
            }
        }
    }    
于 2011-08-31T15:22:06.657 回答
1

您希望在中继器上设置 DataKeys,以便以后可以检索它们。

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

编辑:顺便说一句,我刚刚搜索了“ Repeater DataKeys ”并在顶部找到了这篇文章......我在 4 年前写了这篇文章,所以请不要残忍!(您可以查看示例 C# 代码)。

于 2011-08-31T13:20:52.177 回答
1

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

通常的方法,比你最初的方法好一点,是在中继器的 ItemTemplate 中有一些具有 id 和其他属性的控件,这样你就可以简单地做一些事情ri.FindControl("yourControlId"),将它转换为 Label 或 Literal 或任何其他你放的控件在那里并使用它的 value 或 text 属性。

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

于 2011-08-31T13:23:22.470 回答