2011-08-31 45 views
4

我有一个Repeater控件,向表中添加行。每个单元格内的数据来自绑定到中继器的Datatable。C# - 循环通过中继器控制并访问通过DataBinder.Eval()添加的值

简单的例子:

<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

你可以使用标签:

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

可以通过检索ri元素中的项来做你所要求的,这意味着你“可以”访问它的内容。

通常的做法,有点超过您最初的一个,将有通过ID和其他性质的中继器,所以你可以简单地这样做ri.FindControl("yourControlId")的ItemTemplate模板里面的一些控制,投这标签更好或文字或什么其他控件放在那里并使用它的值或文本属性。

这是通常的方式,更好地标识,而不是匿名TD或TR :)

10

我把在标签的内容,并访问后面的代码标签的工作:

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