RKeyy Sii Ответов: 3

Первая страница Gridview показывает записи, но вторая страница пуста при изменении индекса страницы?


У меня есть GridView, который показывает определенные данные и записи, когда я нажимаю кнопку Generate.
Моя проблема заключается в том, что когда я нажимаю на следующую страницу списка GridView, Gridview будет потерян (пустой), я не думаю, что данные тоже будут потеряны, я думаю, что GirdView просто не показывает их.
Не могли бы вы помочь мне с этой проблемой? Я не тот, кто первым создал этот сайт, и я перепробовал все, что я знаю для этой проблемы, я также искал решения в интернете, но безуспешно. Поэтому я надеюсь, что кто-то может сказать мне, почему GridView не отображается после нажатия на следующую страницу.

Вот код для загрузки страницы

Protected Sub Page_Load(ByVal sender As Object, ByVal e As System.EventArgs) Handles Me.Load
    userid = IIf(SessionHandler.UserID = "", User.Identity.Name.ToUpper, SessionHandler.UserID)

    V3Substance.Attributes.Add("onfocus", "javascript:if (this.value=='Substance Cas Number') { this.value = ''; }")
    V3Substance.Attributes.Add("onblur", "javascript:if (this.value=='') { this.value = 'Substance Cas Number'; }")

    If Not Page.IsPostBack Then
        V1Division.DataSource = GetDivision()
        V1Division.DataBind()

        V1BR.Items.Clear()
        V1BR.DataSource = GetBusinessRule(V1Division.Text)
        V1BR.DataBind()

        MultiView1.ActiveViewIndex = 0
        Panel1.DefaultButton = "V1Generate"
    End If
End Sub


Вот код для GridView1_PageIndexChanging

Protected Sub GridView1_PageIndexChanging(ByVal sender As Object, ByVal e As System.Web.UI.WebControls.GridViewPageEventArgs) Handles GridView1.PageIndexChanging
    Dim dt As DataTable = TryCast(GridView1.DataSource, DataTable)
    GridView1.DataSource = SortTable(dt)

    GridView1.PageIndex = e.NewPageIndex
    GridView1.DataBind()
End Sub


Вот код для BindGridView

Private Sub BindGridview(ByVal query As String, ByVal countquery As String)
    ViewState.Add("Query", query)
    ViewState.Add("CountQuery", countquery)

    Dim count As Integer = 0

    If Description.Text = "1" Then
        ValidateFamily(query)
    Else
        DataSource = dbHelper.GetRecordDT(query)
    End If

    count = DataSource.Rows.Count

    'GridView1.DataSource = Nothing
    'GridView1.DataBind()
    'GridView1.PageIndex = 0

    GridView1.DataSource = DataSource
    GridView1.Visible = True
    GridView1.DataBind()

    ExportToExcel.Visible = IIf(count < 1, False, True)
    Panel1.Visible = IIf(count < 1, False, True)
    SetTotalResult(count)
End Sub


Что я уже пробовал:

Сначала я попробовал поставить

GridView1.Visible = True
в GridView1_PageIndexChanging и результат GridView с данными будет отображаться, и когда я нажимаю на следующую страницу, он показывает, что запись не найдена.

Я также попытался поместить этот код в Page_Load

If ViewState.Item("Query") <> Nothing Then
    BindGridview(ViewState.Item("Query"), ViewState.Item("CountQuery"))
End If


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

F-ES Sitecore

У вас включено состояние просмотра gridview? Если вы это сделаете, я не думаю, что вам нужно повторно привязывать то, как вы находитесь в событии изменения страницы, а если вы этого не сделаете, то представление сетки не будет иметь источника данных при обратной передаче, поскольку оно не сохраняется. Вместо того чтобы получать данные из GridView1.DataSource, вам нужно повторно привязать данные из базы данных так же, как вы это делаете в событии load.you.

RKeyy Sii

Извините за поздний ответ, я не был в сети в течение последних нескольких дней.
У меня есть состояние просмотра gridview, включенное как false, и gridview будет потерян, когда я нажму на следующую страницу, а когда я включил его как true, он показывает, что запись не найдена. Можете ли вы сказать мне, что я могу сделать для этого? Спасибо.

3 Ответов

Рейтинг:
28

Zafar A khan

Protected Sub GridView1_PageIndexChanging(ByVal sender As Object, ByVal e As System.Web.UI.WebControls.GridViewPageEventArgs) Handles GridView1.PageIndexChanging   
    GridView1.PageIndex = e.NewPageIndex    
 BindGridview("query","countquery")
End Sub


RKeyy Sii

@zafar теперь он показывает GridView, но когда я нажимаю на следующую страницу, все строки пусты.

Zafar A khan

в BindGridView("запрос","countquery") . запросов и количество запросов должны быть записи. если на второй странице нет записи, вы можете видеть только gridview

RKeyy Sii

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

Zafar A khan

проверьте улучшенное решение

RKeyy Sii

это все то же самое показывая gridview с пустыми записями

RKeyy Sii

как насчет того, когда я помещу этот код в Page_Load

Dim ctrlname As String = Page.Запрос.Params.Get("__EVENTTARGET")
Если ctrlname &ЛТ;&ГТ; ничего и ctrlname на <> строка.Тогда Пусто
Если не ctrlname.Возможны два случая.Содержит("выпадающий список") И ViewState.Пункт("Запрос") <> ничего тогда
BindGridview(Состояние Представления.Пункт("Запрос"), Отображение.Пункт("CountQuery"))
Конец, Если
Еще
Для каждого ctrl в виде строки на странице.Запрос.Форма
Dim c As Control = страница.FindControl(ctrl)

Если нет, то TypeOf (c) - это System.Web.UI.WebControls.Тогда Кнопка
Если ViewState.Пункт("Запрос") <> ничего тогда
BindGridview(Состояние Представления.Пункт("Запрос"), Отображение.Пункт("CountQuery"))
Конец, Если

Выход Для
Конец, Если
Следующий
Выход Из Субмарины

Конец, Если

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

Рейтинг:
2

njammy

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


RKeyy Sii

Но я уже привязал его к базе данных внутри PageIndexChanging. В чем может быть проблема?

Защищенные суб GridView1_PageIndexChanging(как byval отправителя как объект, как byval E Как системы.Веб.Пользовательского интерфейса.WebControls.GridViewPageEventArgs) Обрабатывает GridView1.PageIndexChanging
Управления gridview1.Pageindex было = Е.NewPageIndex
Дим ДТ в качестве объекта DataTable = TryCast(управления gridview1.Источник Данных, Таблица Данных)
Управления gridview1.Источник данных = метода sorttable(ДТ)
Управления gridview1.Привязку()
Конец Подводной Лодки

Рейтинг:
1

RKeyy Sii

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

Вот что я сделал.

Protected Sub Page_Load(ByVal sender As Object, ByVal e As System.EventArgs) Handles Me.Load
            userid = IIf(SessionHandler.UserID = "", User.Identity.Name.ToUpper, SessionHandler.UserID)

            V3Substance.Attributes.Add("onfocus", "javascript:if (this.value=='Substance Cas Number') { this.value = ''; }")
            V3Substance.Attributes.Add("onblur", "javascript:if (this.value=='') { this.value = 'Substance Cas Number'; }")

            If Not Page.IsPostBack Then
                V1Division.DataSource = GetDivision()
                V1Division.DataBind()

                V1BR.Items.Clear()
                V1BR.DataSource = GetBusinessRule(V1Division.Text)
                V1BR.DataBind()

                MultiView1.ActiveViewIndex = 0
                Panel1.DefaultButton = "V1Generate"

                If ViewState.Item("Query") <> Nothing Then
                    BindGridview(ViewState.Item("Query"), ViewState.Item("CountQuery"))
                End If
            End If
        End Sub


и

Protected Sub GridView1_PageIndexChanging(ByVal sender As Object, ByVal e As System.Web.UI.WebControls.GridViewPageEventArgs) Handles GridView1.PageIndexChanging
            Dim dt As DataTable = TryCast(GridView1.DataSource, DataTable)
            GridView1.DataSource = SortTable(dt)

            GridView1.PageIndex = e.NewPageIndex
            'GridView1.DataBind()
            If ViewState.Item("Query") <> Nothing Then
                BindGridview(ViewState.Item("Query"), ViewState.Item("CountQuery"))
            End If
        End Sub


Большое спасибо за помощь ребята :)