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

4

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

简化示例:

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

在代码后台,我希望能够循环遍历每一行重复器,并获取该行的数量值。目前我只有以下代码:
foreach (RepeaterItem ri in Repeater1.Items)
{

} 
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;
}

4
您可以使用标签:
<td>      
    <asp:Label ID="lblPartNumber" runat="server" Text='<%#Eval("PartNumber")%>' />      
</td>      
<td>      
    <asp:Label ID="lblQuantity" runat="server" Text='<%#Eval("Quantity")%>' />     
</td>  

在Repeater控件的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;
            }
        }
    }    

1

不能在重复器上设置数据键,我不相信。 - James Johnson

1

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

通常的方法比您最初的方法好一些,是在重复器的ItemTemplate中具有一些带有id和其他属性的控件,因此您可以简单地执行ri.FindControl("yourControlId"),将其转换为Label或Literal或任何其他控件,并使用其值或文本属性。

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


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接