Изменить элементы в LayoutTemplate вложенного ListView - PullRequest
0 голосов
/ 24 декабря 2008

Это связано с моим более ранним вопросом , но я решил упростить его и сделать из него вызов. Учитывая приведенный ниже код, можете ли вы изменить значение «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.

Ответы [ 2 ]

3 голосов
/ 24 декабря 2008

, как было упомянуто в другом ответе. в коде позади, при загрузке, вы можете сделать это:

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

затем приведите его как метку и измените текст. очевидно, вы должны выполнить этот код внутри цикла, поэтому вы делаете это для каждой метки в любом внутреннем представлении списка для каждого внешнего представления списка.

А что касается ответов на другой ваш вопрос, вам не было ясно, что вы хотите получить к нему доступ из кода. Также вы можете опубликовать то, что вы пробовали, чтобы люди знали, что вы пробовали разные методы.

удачи!

изменить: относительно вашего комментария:

Если я что-то упустил, это не будет работать, потому что "ChangeThisLabel" становится "ctl00_ctl00_BodyContentPlaceHolder_ReportContentPlaceHolder" _OuterListView_ctrl0_InnerListView_ChangeThisLabel ", когда он отображается внутренним ListView

вы правы, но когда вы используете FindControl (id), он будет использовать идентификатор на стороне сервера для поиска элемента управления. если вы сделаете: InnerListView.FindControl ("ChangeThisLabel"), то он найдет правильную метку независимо от идентификатора клиентской стороны, назначенного этому элементу управления.

1 голос
/ 24 декабря 2008

В вашем обработчике событий DataBound (или что-то подобное) используйте FindControl("ChangeThisLabel"), чтобы получить ссылку на метку. Конечно, вы должны привести к Label перед использованием ссылки.

Возможно, вы захотите написать свой собственный метод FindControl, который вы будете вызывать рекурсивно, чтобы найти элемент управления на уровне n.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...