GridView 外部分页

问题描述 投票:0回答:2

我正在创建一个隐藏分页的 GridView,但仍然允许分页。然后,我想在 GridView 外部创建自己的分页按钮,并让这些页面浏览数据。本质上,这是为了创建一个可滚动的网格视图,底部有一个粘性分页器,我可以对其进行自定义以适应我的网站所需的外观、感觉和功能。有人对如何做到这一点有任何想法吗?我在搜索中没有找到太多东西。

asp.net gridview pagination web-controls
2个回答
2
投票

您可以使用带有自定义分页的转发器或针对此要求定义您自己的用户控件。检查 这篇文章介绍了如何使用转发器控件来做到这一点。 更新: 可能有帮助

更新固定标题使用 jQuery 的客户端分页


2
投票

我知道这个问题已经得到解答,而且现在已经很老了,但是我在这方面遇到了很多麻烦,并且没有发现接受的答案完全有帮助,主要是因为我不想创建一个新的控件。

我发现实际上可以很容易地做到这一点,具体方法如下。

我在更新面板中创建了网格视图。我在单击我未显示的按钮上加载网格数据,然后将数据对象放入视图状态中。然后我添加一个 pagerSetting 这样:

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

然后我向选择向服务器公开的 div 添加了 4 个按钮、一个标签和一个文本框:

    <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 事件。这对我来说非常有效,我希望其他人也可以使用它。

请记住,我没有显示更新面板的异步触发器或任何其他细微差别,但我认为它们对于分页不是必需的,除非您像我一样使用更新面板。

最新问题
© www.soinside.com 2019 - 2025. All rights reserved.