динамические столбцы исчезают после обратной передачи - PullRequest
8 голосов
/ 05 октября 2011

У меня есть GridView с некоторыми BoundFields и двумя TemplateFields. В этих двух TemplateFields я динамически создаю UserControls, содержащий DropDownList и TextBox, которые могут изменять пользователи.

Когда я пытаюсь получить значения элементов управления после PostBack, значения в BoundFields все еще там, но мои динамические элементы управления исчезают. Я могу создать их снова, но он не получит значения пользователя ... Как я могу получить эти значения, пока они не потерялись?

Вот мой код:

В событии RowDataBound:

Select Case type
    Case "BooleanBis"
        e.Row.Cells(2).Controls.Clear()
        Dim list1 As BooleanBisList = New BooleanBisList(avant, False)
        e.Row.Cells(2).Controls.Add(list1)

        e.Row.Cells(4).Controls.Clear()
        Dim list2 As BooleanBisList = New BooleanBisList(apres, True)
        e.Row.Cells(4).Controls.Add(list2)
    Case "Boolean"
        e.Row.Cells(2).Controls.Clear()
        Dim list3 As BooleanList = New BooleanList(avant, False)
        e.Row.Cells(2).Controls.Add(list3)

        e.Row.Cells(4).Controls.Clear()
        Dim list4 As BooleanList = New BooleanList(apres, True)
        e.Row.Cells(4).Controls.Add(list4)
End Select

В моем событии нажатия кнопки я пытаюсь получить пользовательский элемент управления:

Case "String"
    temp.ChampValeurApres = DirectCast(Tableau1.Rows(i).Cells(selectedColumn).Controls(1), TextBox).Text

но я получаю ошибку, что она не существует.

Ответы [ 2 ]

8 голосов
/ 05 октября 2011

Вы должны создать динамические элементы управления в RowCreated вместо RowDataBound , потому что это событие вызывается при каждой обратной передаче, тогда как RowDataBound срабатывает только тогда, когда GridView получает данные, привязанные к DataSource.

Динамически созданные элементы управления должны быть воссозданы на каждой обратной передаче с тем же идентификатором, что и раньше, затем они сохраняют свои значения в ViewState , и события будут срабатывать правильно (например, событие SelectedIndexChanged DropDownList).

Таким образом, вы должны создать их в RowCreated и «заполнить» их в RowDataBound (например, DropDownList источник данных / Items или TextBox -Text).

0 голосов
/ 19 января 2014

Я использовал:

EnableViewState="false"

в атрибутах GridView.Удаление это решило мою проблему!

...