【问题标题】:GridView External PagingGridView 外部分页
【发布时间】:2012-03-02 13:55:21
【问题描述】:

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

【问题讨论】:

    标签: asp.net gridview paging web-controls


    【解决方案1】:

    您可以使用带有自定义分页的中继器或为此要求定义您自己的用户控件。检查 this article 关于如何使用中继器控件执行此操作。 更新: This 可能会有所帮助

    更新 Fixed headers, Client side pagination using jQuery

    【讨论】:

    • 我更喜欢将预打包的功能与 GridView 一起使用,因为这似乎已经为性能做好了准备。是否可以这样做/我对性能有误吗?
    • Repeater 是一种广泛使用的控件。你指的是什么表现?性能很大程度上取决于您的数据库查询(您获取多少条记录)或者您的意思是客户端明智的? (用 gridview 的自定义分页更新了我的答案)虽然它可能需要做很多工作。
    • 也许这将有助于澄清我在寻找什么。我需要对整个数据集、分页和数据显示速度进行排序(也可能是一个大数据集,可能有 1000 条记录)。页眉/排序和页脚/分页需要相对于中心数据表是“粘性的”,它将滚动。我正在考虑缓存响应,而不是每个页面/排序上的 SQL 拉取,我相信 GridView 可以处理。此外,GridView 处理除了粘性头/脚之外的其他功能。中继器是否也提供这些功能?
    • 您必须根据自己的要求权衡利弊。如果您每页(10 行)获取结果,我认为结果会很快。您还可以尝试使用 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 事件。这对我来说非常有用,我希望其他人可以使用它。

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

    【讨论】:

      猜你喜欢
      • 2014-09-16
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2015-12-08
      • 2019-01-30
      相关资源
      最近更新 更多