ページング


Spread.Viewsはローカルデータだけでなく、サーバー側のデータのページングもサポートします。ページングを設定すると、1ページに表示するデータの量を制限できます。

ページングを有効にするには、gc.spread.views.paging.10.40.20162.0.min.jsファイルへの参照を追加します。

ページングには、以下のオプションを指定できます。

プロパティ デフォルト値 説明
pageSize number 20 各ページに表示する行数
startPageIndex number 1 開始ページ。デフォルト値は「1」です。
maxPages number null 合計ページ数。maxPagesを定義しない場合は、データの長さとページサイズに基づき、最大ページ数が自動計算されます。
全体のデータ量がmaxPages_pageSize値を上回る場合は、1画面に一部のデータのみが表示されます。
全体のデータ量がmaxPages_pageSize値を下回る場合は、画面に空白ページが表示されます。

注意: paging.jsファイルへの参照を追加しても、[次へ]ボタンや[戻る]ボタンなど、ページ移動用のユーザーインタフェースは提供されません。dataView.dataに対してpageControllerを使用することで、独自のインタフェースを作成できます。

メソッド 説明
next pageController.next()メソッドを使用して、次のページに移動します。
previous pageController.previous()メソッドを使用して、1つ前のページに戻ります。
first pageController.first()メソッドを使用して、先頭ページに移動します。
last pageController.last()メソッドを使用して、最終ページに移動します。
goToPage pageController.goToPage(index)メソッドを使用して、指定のページインデックスに移動します。
reload pageController.reload(force)メソッドを使用して、現在のページを再読み込みします。
forceをtrueに設定すると、ページがサーバーから再読み込みされます。それ以外の場合は、キャッシュメモリ(存在する場合)からページが再読み込みされます。
getStatus pageController.getStatus()メソッドを使用して、現在のページングの状態を取得します。このメソッドでは、以下のプロパティを持つオブジェクトが返されます。
pageIndex: 現在のページインデックス
pageSize: 1ページあたりの行数
maxPages: 最大ページ数
maxItems: 最大行数

サンプルコード

  1. ページングプラグインを使用できるように、gc.spread.views.paging.10.40.20162.0.min.jsファイルへの参照を追加します。

    <link rel="stylesheet" type="text/css" href="[Your Stylesheet Path]/font-awesome.min.css">
    <link rel="stylesheet" type="text/css" href="[Your Stylesheet Path]/pageui.css">
    <script src="[Your Script Path]/gc.spread.views.paging.10.40.20162.0.min.js" type="text/javascript"></script>
    <script src="[Your Script Path]/pageui.js" type="text/javascript"></script>
  2. 列の定義を追加します。列定義の追加後、グリッドIDを呼び出してコードを初期化し、関数を定義します。

     var dataView;
      $(document).ready(function() {
                  dataView = new GC.Spread.Views.DataView(document.getElementById('grid1'), dataSource, columns,
                      new GC.Spread.Views.Plugins.GridLayout({
                          colWidth: 80,
                          rowHeight: 36,
                          startPageIndex: 2,
                          pageSize: 12
                      }));
    
                  var pageController = dataView.data.pageController;
                  var pager = new PageUI('#page-nav', pageController.getStatus());
    
                  pager.goToFirstEvent.addHandler(function() {
                      pageController.first();
                  });
    
                  pager.goToPreviousEvent.addHandler(function() {
                      pageController.previous();
                  });
    
                  pager.goToNextEvent.addHandler(function() {
                      pageController.next();
                  });
    
                  pager.goToLastEvent.addHandler(function() {
                      pageController.last();
                  });
    
                  pager.goToPageEvent.addHandler(function(e) {
                      pageController.goToPage(e.newPage);
                  });
    
                  pageController.statusChanged.addHandler(function(sender, newStatus) {
                      pager.updateStatus(newStatus);
            });

リモートデータのページング

サーバー側のデータを使用してページングを実装することもできます。サーバー側でページングを実行するには、データソースがloadRangeメソッドを提供する必要があります。このメソッドは、ページインデックスが変更されたとき、Spread.ViewsのpageControllerによって呼び出されます。

サンプルコード

  1. dataSource変数内でloadRangeメソッドを定義します。

     var dataSource = {
                 loadRange: function(params) {
                     $.ajax({
                         url: getUrl(params.pageSize * params.pageIndex, params.pageSize),
                         crossDomain: true,
                         success: function(result) {
                             var itemsTotalCount = result.m_Item1;
                             var currentPageDataSource = result.m_Item2;
                             params.success(currentPageDataSource, itemsTotalCount);
                         },
                         error: function(xhr, status) {
                             params.failed();
                             if (status !== 'abort') {
                                 alert('Failed to load data from remote web site.');
                             }
                         }
                     });
                 }
        };
  2. グリッドIDを呼び出してコードを初期化し、関数を定義します。

    $(document).ready(function() {
    
                dataView = new GC.Spread.Views.DataView(document.getElementById('grid1'), dataSource, columns, new GC.Spread.Views.Plugins.GridLayout({
                    colWidth: 80,
                    rowHeight: 36,
                    pageSize: 12
                }));
    
                var pageController = dataView.data.pageController;
                var pager = new PageUI('#page-nav', pageController.getStatus());
    
                pager.goToFirstEvent.addHandler(function() {
                    pageController.first();
                });
    
                pager.goToPreviousEvent.addHandler(function() {
                    pageController.previous();
                });
    
                pager.goToNextEvent.addHandler(function() {
                    pageController.next();
                });
    
                pager.goToLastEvent.addHandler(function() {
                    pageController.last();
                });
    
                pager.goToPageEvent.addHandler(function(e) {
                    pageController.goToPage(e.newPage);
                });
    
                pageController.statusChanged.addHandler(function(sender, newStatus) {
                    pager.updateStatus(newStatus);
                });
                //focus data.view by default
                document.querySelector('#grid1').focus();
            });
    
            function getUrl(start, count) {
                return '//spread.cloudapp.net:8081/api/Records?start=' + start + '&count=' + count;
        }

参照

pageController
startPageIndex
pageSize