2012-03-02 13 views
0

ページングを非表示にしてGridViewを作成しようとしていますが、ページングは​​まだ許可されています。次に、自分自身のページングボタンをGridViewの外部に作成して、そのページをデータから取得したいと考えています。基本的に、これは、私のサイトで必要とされるルック、フィーリング、および機能性に合わせてカスタマイズできる、スティッキーポケットベルを備えたスクロール可能なグリッドビューを作成することです。誰にどのようにこれを行うにはどのようなアイデアがありますか?私は自分の探しているものをあまり見つけていない。GridView外部ページング

答えて

2

リピータをカスタムページングで使用することも、この要件に独自のユーザーコントロールを定義することもできます。リピータコントロールでこれを行う方法は、 this articleを確認してください。 更新: This

更新Fixed headersClient side pagination using jQuery

+0

私はGridViewであらかじめパッケージ化された機能を使いたいと思っています。これを行うことは可能ですか?私はパフォーマンスについて間違っていますか? – steventnorris

+0

リピーターは広く使用されているコントロールです。あなたはどんなパフォーマンスを指していますか?パフォーマンスは、データベースのクエリ(取得するレコードの数)に大きく依存するか、クライアントが賢明であることを意味しますか? (グリッドビュー用のカスタムページングで私の答えを更新しましたが)多くの作業が必要になるかもしれません。 –

+0

これは私が探しているものを明確にするのに役立ちます。私は、データセット全体、ページ番号、およびデータ表示の速度をソートする必要があります(大規模なデータセットであっても、おそらく数千のレコード)。ヘッダー/ソートとフッター/ページネーションは、スクロールする中央のデータテーブルに対して「スティッキー」である必要があります。私はキャッシュされた応答を、SQLの代わりにすべてのページ/ソートを考慮していました。これはGridViewが処理すると考えています。また、GridViewはスティッキーヘッド/フット以外の他の機能も処理します。リピーターはこれらの機能も提供していますか? – steventnorris

2

を助けるかもしれない、私はこの質問が答えた知っているし、今は本当に古いですが、私はこれで多くの問題を抱えていたし、見つけることができませんでした私は新しいコントロールを作成したくなかったので、主に答えが完全に役立ちました。

私はあなたがこれを非常に簡単に実際に行うことができることを発見しました。

私は、更新パネルの中に私の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イベントに渡されます。これは私のためにすばらしい働きをしていて、他の誰かがそれを使うことを願っています。

アップデートパネルや他のニュアンスの非同期トリガは表示されませんでしたが、自分のような更新パネルを使用していない限り、ページングには必要ないとは思いません。

関連する問題