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行のデータを表示するリピーターの場合、これはデータソースからの1行です...基本的には特定の行であり、実行時にこの行からプロパティ値を取得できます

上記のマークアップを見ました...以下のようなデータ型クラスのプロパティについて言及していないようです。

<%# ((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

使用する凡例タグはサーバー側には表示されません。クライアントコントロールであり、サーバーコントロールではありません。

これで試してください:

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

次に、コードビハインドで:

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 に答える