Как передать значение из элемента управления внутри ListView в другой элемент управления снаружи - PullRequest
0 голосов
/ 28 января 2011

У меня есть ListView, отображающий одну запись за раз.Вот очень простой пример:

<asp:ListView ID="ListView1" runat="server" DataSourceID="SqlDataSource1" DataKeyNames="bol_id" ItemPlaceholderID="itemPlaceholder">
<ItemTemplate>
 Textbox inside<asp:TextBox ID="txtInside" runat="server" Text='<%# Eval("bol_id") %>'></asp:TextBox> 

</ItemTemplate>
</asp:ListView>
 Textbox Outside<asp:TextBox ID="txtOutside" runat="server" Text=""></asp:TextBox> 

Все отлично работает, Textbox внутри ItemTemplate, получает свои данные из базы данных и заполняется.У меня также есть пейджер, который перемещает одну запись за раз без проблем.

Теперь я хотел бы получить Textbox вне ItemTemplate, чтобы получить то же значение, что и Textbox внутри.Но мне не удается заставить его работать.Когда я пробую этот и подобный код:

Этот код помещается в код за загрузкой страницы:

    Dim tb As TextBox = DirectCast(ListView1.FindControl("txtInside"), TextBox)

    txtOutside.Text = tb.Text

все, что я получаю, это ошибка:

Object reference not set to an instance of an object

У кого-нибудь есть хорошее решение, как получить доступ к этому элементу управления и передать его значение другому элементу управления?

Ответы [ 2 ]

0 голосов
/ 29 января 2011

Спасибо за ваш ответ.

Я продолжал пытаться, пока не нашел решение. Вот что я сделал:

В части ListView я добавил OnPreRender часть:

<asp:ListView ID="ListView1" runat="server" DataSourceID="SqlDataSource1" DataKeyNames="bol_id" ItemPlaceholderID="itemPlaceholder" OnPreRender="ListView1_OnPreRender">

Затем в коде я добавил это:

Protected Sub ListView1_OnPreRender(ByVal sender As Object, ByVal e As EventArgs)

    If ListView1.EditIndex > -1 Then
        ' because I need to avoid error when in Edit mode
    Else

        Dim tb As TextBox = Nothing

        For Each item As ListViewDataItem In ListView1.Items

            tb = DirectCast(item.FindControl("txtInsideId"), TextBox)

            If tb.Text IsNot Nothing Then
                txtOutsideId.Text = tb.Text.ToString
            End If
        Next

    End If


End Sub

И теперь это работает! Не знаю, лучший ли это способ, но он работает.

0 голосов
/ 28 января 2011

Что нужно учитывать:

  1. Является ли ListView в другом элементе управления контейнером?
  2. Возвращает ли ListView1 экземпляр класса ListView?
  3. Добавить кнопку в форму и подключить ее событие click к вашему коду.Это работает сейчас?4. Были ли данные уже привязаны к ListView при вызове вашего кода?

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

Удачи!

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