GridView Внешний пейджинг - PullRequest
0 голосов
/ 02 марта 2012

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

Ответы [ 2 ]

2 голосов
/ 12 октября 2012

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

Я обнаружил, что вы можете сделать это довольно легко на самом деле, и вот как.

Я создал свой gridview внутри панели обновления.Я загружаю данные для сетки нажатием кнопки, которую я не показываю, и затем помещаю объект данных в состояние просмотра.Затем я добавляю pagerSetting следующим образом:

<PagerSettings Mode="NextPreviousFirstLast" Visible="false" />

Затем я добавил 4 кнопки, метку и текстовое поле в div, который я выбрал для показа на сервере:

    <div runat="server" id="divPageControls" style="width:100%;margin-bottom:1%;margin-top:1%;display:none;">
        <asp:Button runat="server" ID="btnFirst" Text="First" CssClass="ReOrderButtons" UseSubmitBehavior="false" />&nbsp;
        <asp:Button runat="server" ID="btnPrev" Text="Previous" CssClass="ReOrderButtons" UseSubmitBehavior="false" />&nbsp;
        <asp:Button runat="server" ID="btnNext" Text="Next" CssClass="ReOrderButtons" UseSubmitBehavior="false" />&nbsp;
        <asp:Button runat="server" ID="btnLast" Text="Last" CssClass="ReOrderButtons" UseSubmitBehavior="false" />&nbsp;<br /><br />
        <asp:TextBox runat="server" ID="txtPageIndex"  AutoPostBack="true" CssClass="priceQuote_TextBoxStyle" style="margin-left:20px;float:none;width:4%;text-align:center;" ></asp:TextBox>&nbsp;<asp:Label runat="server" ID="lblOfPages"></asp:Label>
    </div>

Теперь все было на месте, все, что мне нужно было сделать, это добавить обработчики событий.

    Protected Sub btnFirst_Click(ByVal sender As Object, ByVal e As System.EventArgs) Handles btnFirst.Click
        _mainView.PageIndex = 0
        _mainView_PageIndexChanging(_mainView, New System.Web.UI.WebControls.GridViewPageEventArgs(_mainView.PageIndex))
    End Sub

    Protected Sub btnLast_Click(ByVal sender As Object, ByVal e As System.EventArgs) Handles btnLast.Click
        _mainView.PageIndex = _mainView.PageCount - 1
        _mainView_PageIndexChanging(_mainView, New System.Web.UI.WebControls.GridViewPageEventArgs(_mainView.PageIndex))
    End Sub

    Protected Sub btnPrev_Click(ByVal sender As Object, ByVal e As System.EventArgs) Handles btnPrev.Click
        _mainView.PageIndex -= 1
        _mainView_PageIndexChanging(_mainView, New System.Web.UI.WebControls.GridViewPageEventArgs(_mainView.PageIndex))
    End Sub

    Protected Sub btnNext_Click(ByVal sender As Object, ByVal e As System.EventArgs) Handles btnNext.Click
        _mainView.PageIndex += 1
        _mainView_PageIndexChanging(_mainView, New System.Web.UI.WebControls.GridViewPageEventArgs(_mainView.PageIndex))
    End Sub

    Protected Sub txtPageIndex_TextChanged(ByVal sender As Object, ByVal e As System.EventArgs) Handles txtPageIndex.TextChanged
        If fromInternal = False Then
            If txtPageIndex.Text <> "" And IsNumeric(txtPageIndex.Text) Then
                If CInt(txtPageIndex.Text - 1) < _mainView.PageCount - 1 And CInt(txtPageIndex.Text - 1) >= 0 Then
                    _mainView.PageIndex = CInt(txtPageIndex.Text - 1)
                    _mainView_PageIndexChanging(_mainView, New System.Web.UI.WebControls.GridViewPageEventArgs(_mainView.PageIndex))
                End If
            End If
        End If
    End Sub

    Protected Sub _mainView_PageIndexChanging(ByVal sender As Object, ByVal e As System.Web.UI.WebControls.GridViewPageEventArgs) Handles _mainView.PageIndexChanging
        _mainView.PageIndex = e.NewPageIndex
        _mainView.DataSource = ViewState("currProducts")
        _mainView.DataBind()
    End Sub

    Protected Sub _mainView_DataBound(ByVal sender As Object, ByVal e As System.EventArgs) Handles _mainView.DataBound
        If _mainView.PageCount > 1 Then
            divPageControls.Style("display") = "block"

            If _mainView.PageIndex = 0 Then
                btnFirst.Style("display") = "none"
                btnPrev.Style("display") = "none"
                btnLast.Style("display") = "inline"
                btnNext.Style("display") = "inline"
            ElseIf _mainView.PageIndex > 0 And _mainView.PageIndex < _mainView.PageCount - 1 Then
                btnFirst.Style("display") = "inline"
                btnPrev.Style("display") = "inline"
                btnLast.Style("display") = "inline"
                btnNext.Style("display") = "inline"
            ElseIf _mainView.PageIndex = _mainView.PageCount - 1 Then
                btnLast.Style("display") = "none"
                btnNext.Style("display") = "none"
                btnFirst.Style("display") = "inline"
                btnPrev.Style("display") = "inline"
            End If

            fromInternal = True
            txtPageIndex.Text = CStr(_mainView.PageIndex + 1)
            lblOfPages.Text = "of " & CStr(_mainView.PageCount - 1)

        End If
    End Sub

После всего этого, когда кнопки нажимаются, индекс страницы girdview изменяется, а затем передается в PageIndexChanging представления.событие.Это прекрасно работает для меня, и я надеюсь, что кто-то другой может использовать его.

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

2 голосов
/ 02 марта 2012

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

Обновление Фиксированные заголовки , Разбивка на стороне клиента с помощью jQuery

...