2012-03-02 65 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事件。這對我來說非常有用,我希望別人可以使用它。

請記住,我沒有顯示更新面板或任何其他細微差別的異步觸發器,但我不認爲它們是分頁所必需的,除非您使用像我這樣的更新面板。