Kendo Grid分页:当前页面在中间

问题描述 投票:2回答:1

我有一个启用分页的Kendo网格。当前,例如,如果我在第20页,则分页看起来像这样:

|< < ...  11  12  13  14  15  16  17  18  19 [20] ... > >|

我希望当前页面始终显示在中间:

|< < ...  15  16  17  18  19 [20] 21  22  23  24  25 ... > >|

可以这样做吗?

我已经研究了Kendo API Documentation中的网格分页,但是找不到任何可能启用此功能的选项。我也找不到其他在stackoverflow中有类似问题的人,也找不到任何更改网格分页行为的方法(服务器端分页除外)。

提前感谢您的帮助!

kendo-ui pagination kendo-grid
1个回答
0
投票

[经过一些工作,并从this article中获得了一些见识,我设法使用数据绑定事件实现了此功能。

如果有人想尝试一下,只需将以下代码粘贴到Kendo UI Dojo

<!DOCTYPE html>
<html>
<head>
    <meta charset="utf-8"/>
    <title>Kendo UI Snippet</title>

    <link rel="stylesheet" href="https://kendo.cdn.telerik.com/2019.3.1023/styles/kendo.common.min.css"/>
    <link rel="stylesheet" href="https://kendo.cdn.telerik.com/2019.3.1023/styles/kendo.rtl.min.css"/>
    <link rel="stylesheet" href="https://kendo.cdn.telerik.com/2019.3.1023/styles/kendo.silver.min.css"/>
    <link rel="stylesheet" href="https://kendo.cdn.telerik.com/2019.3.1023/styles/kendo.mobile.all.min.css"/>

    <script src="https://code.jquery.com/jquery-1.12.4.min.js"></script>
    <script src="https://kendo.cdn.telerik.com/2019.3.1023/js/kendo.all.min.js"></script>
</head>
<body>

<div id="grid"></div>

<script>
 $("#grid").kendoGrid({
    columns: [
      { field: "productName" },
      { field: "category" }
    ],
    dataSource: [
      { productName: "Tea", category: "Beverages" },
      { productName: "Coffee", category: "Beverages" },
      { productName: "Ham", category: "Food" },
      { productName: "Bread", category: "Food" },
      { productName: "Cheese", category: "Food" },
      { productName: "Milk", category: "Beverages" },
      { productName: "Tea", category: "Beverages" },
      { productName: "Coffee", category: "Beverages" },
      { productName: "Ham", category: "Food" },
      { productName: "Bread", category: "Food" },
      { productName: "Cheese", category: "Food" },
      { productName: "Milk", category: "Beverages" },
      { productName: "Coffee", category: "Beverages" },
      { productName: "Ham", category: "Food" },
      { productName: "Bread", category: "Food" },
      { productName: "Cheese", category: "Food" },
      { productName: "Milk", category: "Beverages" },
      { productName: "Tea", category: "Beverages" },
      { productName: "Coffee", category: "Beverages" }
    ],
    pageable: {
      pageSize: 1,
      responsive: false
    },
    dataBound: onDataBound
  });
function onDataBound(e) {
    var grid = e.sender
    var pager = grid.element.find('ul.k-pager-numbers').first();
    if(pager.length){

      var max = grid.dataSource.totalPages();
      var center = grid.dataSource.page();

      var left, right;
      if(max <= 11){
        left = 1;
        right = max;
      } else {
        left = center-5;
        right = center+5;
        if(left<1){
          right += (1-left);
          left = 1;
        }
        if(right > max){
          left -= (right-max);
          right = max;
        }
      }

      var new_pager = '<ul class="k-pager-numbers k-reset">';
      new_pager += '<li class="k-current-page"><span class="k-link k-pager-nav">'+center+'</span></li>';
      for (var l = left; l<center; l++){
        new_pager += '<li><a tabindex="-1" href="#" class="k-link" data-page="'+l+'">'+l+'</a></li>';
      }
      new_pager += '<li><span class="k-state-selected">'+center+'</span></li>';
      for (var r = center+1; r<=right; r++){
        new_pager += '<li><a tabindex="-1" href="#" class="k-link" data-page="'+r+'">'+r+'</a></li>';
      }
      new_pager += '</ul>';

      pager.replaceWith(new_pager);
    }
}
</script>
</body>
</html>
© www.soinside.com 2019 - 2024. All rights reserved.