Visual Basic, .NET, ASP, VBScript
 

   
   
     

Форум - ASP и VBScript

Страница: 1 |

 

  Вопрос: как отлов.изменен. текста текстбоксa Дин DataGrida Добавлено: 20.05.06 13:17  

Автор вопроса:  student-uni
Есть динамически созданный массив Датагридов
В каждом из них динамические темплаты для ввода значений через текстбокс
Они заполняются при загрузк данными из базы.

Вопрос, как теперь отловить изменение текста в текстбоксе
и сохранить изменения ?

Я попытался Написать обработчик события TextChanged, для каждого
текст бокса, по нему отловить Темплату контейнер и по ней Датагрид контейнер
но обработчик почему то не включается.
Может я не туда его вставил ?

Привожу текст, посоветуйте пож-ста что либо





'вот код вызова из текста


            Dim objtc2 As New TemplateColumn
            objtc2.HeaderText = "Full Name2"
            objtc2.ItemTemplate = New newTextBoxColumn
            allDataGrid.Columns.Add(objtc2)
            allDataGrid.DataSource = dw
'предполагается что уже имеется заполненный ДатаВъю - dw  
            allDataGrid.DataBind()

' а вот описание класса newTextBoxColumn
'экземпляр этого класса успешно создаёт новую колонку в датагриде
'а в ней текстбоксы

Public Class newTextBoxColumn
        Implements ITemplate
        Public Sub New()
        End Sub 'New

        Public Sub InstantiateIn(ByVal container As Control) Implements System.Web.UI.ITemplate.InstantiateIn

            Dim txtBox As New TextBox

'Это событие успешно привязывает данные к текстбоксу
            AddHandler txtBox.DataBinding, AddressOf Me.BindLabelColumn2


' А ВОТ ЭТО СОБЫТИЕ  не срабатывает
            AddHandler txtBox.TextChanged, AddressOf Me.txtChan


            container.Controls.Add(txtBox)

        End Sub 'InstantiateIn


' вот описание подпрограмм обработки событий
' BindLabelColumn2 - вызывается каждый раз при заполнении
' датагридов

' txtChan - не вызывается вообще

        Public Sub BindLabelColumn2(ByVal sender As Object, ByVal e As EventArgs)

            Dim lbl As TextBox = CType(sender, TextBox)

            Dim container As DataGridItem = CType(lbl.NamingContainer, DataGridItem)

            Dim strVals As [String] = Convert.ToString(DataBinder.Eval(CType(container, DataGridItem).DataItem, "Name"))
            lbl.Text = strVals

        End Sub 'BindLabelColumn

        Public Sub txtChan(ByVal sender As Object, ByVal e As EventArgs)

            Dim tb As TextBox = CType(sender, TextBox)

            Dim container As DataGridItem = CType(tb.NamingContainer, DataGridItem)

      
            Dim dgg As DataGrid = CType(container.NamingContainer, DataGrid)
            'tb.Text = strVals
            tb.Text = dgg.ID.ToString
            tb.Text = dgg.ID.ToString




        End Sub 'BindLabelColumn

    End Class 'newLabelColumn


Ответить

  Ответы Всего ответов: 3  

Номер ответа: 1
Автор ответа:
 student-uni



Вопросов: 122
Ответов: 257
 Профиль | | #1 Добавлено: 20.05.06 14:09
Переформулирую вопрос

я заменил событие ТекстЧеиндж на Унлоад
Это событие отлавливается по нажатию Энтер после введения текста
в текстБокс,
НО
введенного текста я в свойстве не вижу, вместо него старый текст !!!

Объясните пожалуйста, здесь что то со временем существования объекта
связяно или ?

Ответить

Номер ответа: 2
Автор ответа:
 student-uni



Вопросов: 122
Ответов: 257
 Профиль | | #2 Добавлено: 20.05.06 14:50
Окей при Enter первым срабатывает Databinding, что то типа перечитывания страницы
все элементы создаются заново
поэтому я и получаю старое значение,

подскажите пожалуйста всё же как мне получить новое введеное значение.

Спасибо

Ответить

Номер ответа: 3
Автор ответа:
 student-uni



Вопросов: 122
Ответов: 257
 Профиль | | #3 Добавлено: 20.05.06 18:21
Разобралься,

1. Надо включить автопостбек
иначе событие ТекстБокс.ТекстЧейндж не работает.
2. Событие хранится на сервере, поэтому
автопостбек инициализирует всё по новой
Решение - кинул все ДатаГриды в сессионВариабле.

Рулит!

Вопрос к знающим - можно ли объявить коллекцию (или массив датагридов), чтоб не запоминать в кеше по одному а кинуть туда одним ходом все ?

Правильно ли это - сохранять в кеше ?
или лучше в др месте ?

Привет.

Ответить

Страница: 1 |

Поиск по форуму



© Copyright 2002-2011 VBNet.RU | Пишите нам