Столбцы Gridview изменяются при обратной передаче

Я разрабатываю свой веб-сайт в asp.net с помощью визуального веб-разработчика 2010. У меня есть страница продукта для интернет-магазина, где отображаются изображения продукта, а в представлении сетки отображается информация о продукте, для каждого продукта есть несколько столбцов.

То, как я настроил свой код для этой страницы, заключается в том, что у меня есть autogeneratecolumns = true (по определенным причинам), главным образом потому, что я динамически извлекаю данные gridview из множества разных таблиц и сотен различных продуктов и категорий. Все это работает нормально до того момента, когда я добавляю кнопку «Добавить в корзину» в вид сетки, чтобы в каждой строке была кнопка.

Поскольку для autogeneratecolumns установлено значение true, когда я вставляю кнопку «Добавить в корзину», ни один из столбцов еще не создается, поэтому кнопка отображается в первом столбце, за которым следуют остальные данные. У меня есть блок кода, который выполняется на этапе предварительного рендеринга, который берет столбец кнопок и перемещает его в самый последний столбец. В ЭТОМ проблема.

По какой-то причине, даже когда я помещаю весь этот код предварительного рендеринга в постбэк, если не щелкнуть другое изображение на странице, и страница выполняет обратную передачу, заголовки моих столбцов меняются, а столбца «Добавить в корзину» больше нет. что создает проблемы. Пример того, как выглядят столбцы до того, как я нажму на другое изображение: (Заказ №, Описание, Цена, Добавить в корзину) и после того, как я нажму на изображение (Цвет, Степени, Описание, Цена). Это похоже на то, что он все еще запускает предварительный рендеринг Gridview, даже если он показывает, что пропускает этот блок кода во время отладки. Вот код...

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

    Dim GridView1 As GridView = FormView1.FindControl("GridView1")
    If Not IsPostBack Then
        For Each row As GridViewRow In GridView1.Controls(0).Controls

            Dim tc As TableCell = row.Cells(0)
            row.Cells.Add(tc)

        Next
    Else

    End If

End Sub


Protected Sub ImageButton3_Click1(sender As Object, e As System.Web.UI.ImageClickEventArgs)
    Dim img As System.Web.UI.WebControls.Image = FormView1.FindControl("Image1")
    Dim img1 As ImageButton = FormView1.FindControl("ImageButton3")
    Dim url As String = img.ImageUrl
    img.ImageUrl = img1.ImageUrl
    img1.ImageUrl = url
End Sub

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


person user3841709    schedule 05.02.2015    source источник
comment
Если этот код живет в форме FormView1, то вы получаете доступ к вещам с помощью Me, а не FormView. Вы его отладили?   -  person OneFineDay    schedule 06.02.2015
comment
Да, с условной обратной передачей, если не после начальной загрузки страницы, когда я нажимаю на изображение, он пропускает весь код внутри оператора if, но столбцы все еще меняются на первом изображении. Это единственный раз, когда они меняются, они не меняются ни при одном клике после первого раза. Я полностью удалил код, и все в порядке, за исключением того факта, что мой столбец «Добавить в корзину» находится в первом столбце, а не в последнем.   -  person user3841709    schedule 06.02.2015


Ответы (1)


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

person user3841709    schedule 11.02.2015