我有一个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)
{
}
答案 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:)