我有以下数据绑定repeater
代码:
<%--categories--%>
<asp:Repeater ID="CategoryRepeater" runat="server" OnItemDataBound="ItemBound">
<ItemTemplate>
<div class="groupbox">
<fieldset>
<legend><%# Container.DataItem %></legend>
<table>
<asp:Repeater ID="ItemRepeater" runat="server">
<ItemTemplate>
<tr>
<td>
<asp:CheckBox id="chkItem" runat="server" Text='<%# Eval("Text")%>' />
<asp:HiddenField id="pgNos" runat="server" Value='<%# Eval("PGNos")%>' />
<asp:Button ID="btnXRefs" Text="x-refs" runat="server" CssClass="xRefButton" OnClick="btnSelectXRefs_Click" />
</td>
</tr>
</ItemTemplate>
</asp:Repeater>
</table>
</fieldset>
</div>
</ItemTemplate>
</asp:Repeater>
repeater
内有一个repeater
。如何从代码中访问legend
(<legend><%# Container.DataItem %></legend>
)内的文字?
我试过了:
foreach (RepeaterItem cr in CategoryRepeater.Items)
{
string heading = (string) cr.DataItem; // returns null
}
答案 0 :(得分:2)
Container.DataItem 是绑定列表中此特定项的DataItem的运行时别名。对于显示10行数据的 Repeater ,这是数据源中的一行...基本上,它是一个特定的行,在运行时,您可以从此行获取属性值
我看到你上面的 Mark Up ...好像你没有提到Data-Bound类型的属性,如下所示。
<%# ((Your Class Name)Container.DataItem).Class Property Name %>
转发器内有转发器。如何访问里面的文本 来自代码?
的图例(&lt;%#Container.DataItem%&gt;)
正如 phemt.latd 所述,您可以将图例标记更改为服务器端控件,如下所示。
<legend id="lg" runat="server">
<%# ((Your Class Name)Container.DataItem).Class Property Name %>
</legend>
现在,在项目绑定数据事件中,找到图例控件。
protected void rpt_ItemDataBound(object sender, RepeaterItemEventArgs e)
{
if (e.Item.ItemType == ListItemType.Item ||
e.Item.ItemType == ListItemType.AlternatingItem)
{
HtmlGenericControl ctl = (HtmlGenericControl)e.Item.FindControl("lg");
ctl.InnerText //This is what will give you the result.
}
}
答案 1 :(得分:1)
您使用的图例标记在服务器端不可见。是客户端控件而不是服务器控件。
试试这个:
<legend id="myLegend" runat="server"><%# Container.DataItem %></legend>
然后在codebehind:
protected void ItemBound(Object sender, RepeaterItemEventArgs e)
{
if (e.Item.DataItem == null) return;
HtmlGenerics body = (HtmlGenerics)e.Item.FindControl("myLegend");
body.InnerText = "Foo";
}