0

これは私の以前の質問に関連していますが、単純化して挑戦しようと思いました。以下のコードで、「ChangeThisLabel」の値をコード ビハインドから変更できますか?

<asp:ListView ID="OuterListView" runat="server">
    <LayoutTemplate>
        <asp:PlaceHolder ID="itemPlaceHolder" runat="server" />
    </LayoutTemplate>
    <ItemTemplate>
        <%#Eval("outer_value")%> <br/>
        <asp:ListView ID="InnerListView" runat="server" DataSource='<%#Eval("inner") %>'>
            <LayoutTemplate>
                <asp:Label ID="ChangeThisLabel" runat="server" />
                <asp:PlaceHolder ID="itemPlaceHolder" runat="server" />
            </LayoutTemplate>
            <ItemTemplate>
                <%#Eval("inner_value")%> <br/>
            </ItemTemplate>
        </asp:ListView>
    </ItemTemplate>
</asp:ListView>

回答を送信する前に、自分で試してみることをお勧めします。以前の投稿で、単一の ListView では問題なく動作するが、ネストされた ListView に対して実行すると失敗するという多くの提案を得たからです。

4

2 に答える 2

3

他の回答で述べたように。コードビハインドでは、ロード時にこれを行うことができます:

`OuterListView.FindControl("InnerListView").FindControl("ChangeThisLabel")

次に、それをラベルとしてキャストし、テキストを変更します。明らかに、ループ内でこのコードを反復するため、すべての外側のリスト ビューの内側のリスト ビュー内のすべてのラベルに対して実行します。

また、他の質問への回答については、コード ビハインドからアクセスしたいという明確な理由がありませんでした。また、さまざまな方法を試したことを人々に知らせるために、試したことを投稿することもできます。

幸運を!

編集:あなたのコメントについて:

何か不足していない限り、これは機能しません。これは、内部 ListView によってレンダリングされると、「ChangeThisLabel」が「ctl00_ctl00_BodyContentPlaceHolder_ReportContentPlaceHolder _OuterListView_ctrl0_InnerListView_ChangeThisLabel」になるためです。

あなたは正しいですが、FindControl(id) を使用すると、サーバー側の ID を使用してコントロールが検索されます。InnerListView.FindControl("ChangeThisLabel") の場合、そのコントロールに割り当てられたクライアント側 ID に関係なく、適切なラベルが検索されます。

于 2008-12-23T21:46:15.503 に答える
1

DataBound (またはそれに類するもの) イベント ハンドラーFindControl("ChangeThisLabel")で、ラベルへの参照を取得するために使用します。もちろん、Label参照を使用する前にキャストする必要があります。

レベル n でコントロールを見つけるために再帰的に呼び出す独自の FindControl メソッドを作成することができます。

于 2008-12-23T21:29:58.407 に答える