0

我有以下数据绑定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
}
4

2 回答 2

2

Container.DataItem是绑定列表中此特定项目的 DataItem 的运行时别名。对于显示 10 行数据的中继器,这是数据源中的一行...基本上,它是特定行,在运行时您可以从该行获取属性值

我看到了你上面的标记......似乎你没有提到数据绑定类型类的属性,如下所示。

<%# ((Your Class Name)Container.DataItem).Class Property Name %>

中继器内部有中继器。如何从代码访问图例 (<%# Container.DataItem %>) 中的文本?

正如phemt.latd 所说,您可以将Legend 标签更改为服务器端控件,如下所示。

<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.
    }
}
于 2012-12-03T17:03:59.320 回答
1

The legend tag that you use is not visible on server side. Is a client control and not a server one.

Try with this:

<legend id="myLegend" runat="server"><%# Container.DataItem %></legend>

Then in codebehind:

protected void ItemBound(Object sender, RepeaterItemEventArgs e)
    {
        if (e.Item.DataItem == null) return;
        HtmlGenerics body = (HtmlGenerics)e.Item.FindControl("myLegend");
        body.InnerText = "Foo";
    }
于 2012-12-03T16:41:11.537 回答