2012-03-02 66 views
0

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

回答

2

您可以使用具有自定义分页功能的中继器或为此需求定义您自己的用户控制。有关如何使用中继器控件执行此操作,请参阅 this article更新: This可能有助于

更新Fixed headersClient side pagination using jQuery

+0

我宁愿在GridView中使用预先打包的功能,因为它看起来性能很好。是否有可能做到这一点/我的表现错了吗? – steventnorris 2012-03-02 14:44:12

+0

中继器是一个广泛使用的控制。你指的是什么表现?性能将很大程度上取决于您的数据库查询(您获取多少条记录)或您的客户是否明智? (更新我的答案与GridView自定义分页),虽然它可能需要很多工作。 – 2012-03-02 14:45:55

+0

也许这将有助于澄清我在找什么。我需要对整个数据集,分页和数据显示速度进行排序(也可能是一个大型数据集,可能还有几千条记录)。标题/排序和页脚/分页需要相对于将滚动的中心数据表“粘”。我正在考虑一个缓存响应,而不是每个页面/排序上的SQL拉,我相信这是GridView处理的。另外,GridView处理除粘性头部/脚之外的其他功能。中继器是否也提供这些功能? – steventnorris 2012-03-02 15:38:39

2

我知道这个问题得到回答,现在是真的老了,但我是有这个有很多的麻烦,也没找到接受的答案完全有帮助,主要是因为我不想创建一个新的控制。

我发现你可以很容易地做到这一点,这里是如何。

我在updatepanel内部创建了我的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事件。这对我来说非常有用,我希望别人可以使用它。

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