clientpagination.html 4.4 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137
  1. <!DOCTYPE html>
  2. <html>
  3. <head>
  4. <meta charset="UTF-8">
  5. <title>Client Side Pagination in TreeGrid - jQuery EasyUI Demo</title>
  6. <link rel="stylesheet" type="text/css" href="../../themes/default/easyui.css">
  7. <link rel="stylesheet" type="text/css" href="../../themes/icon.css">
  8. <link rel="stylesheet" type="text/css" href="../demo.css">
  9. <script type="text/javascript" src="../../jquery.min.js"></script>
  10. <script type="text/javascript" src="../../jquery.easyui.min.js"></script>
  11. </head>
  12. <body>
  13. <h2>Client Side Pagination in TreeGrid</h2>
  14. <p>This sample shows how to implement client side pagination in TreeGrid.</p>
  15. <div style="margin:20px 0;"></div>
  16. <table id="tg" title="Client Side Pagination" style="width:700px;height:250px"
  17. data-options="
  18. iconCls: 'icon-ok',
  19. rownumbers: true,
  20. animate: true,
  21. collapsible: true,
  22. fitColumns: true,
  23. url: 'treegrid_data2.json',
  24. method: 'get',
  25. idField: 'id',
  26. treeField: 'name',
  27. pagination: true,
  28. pageSize: 2,
  29. pageList: [2,5,10]
  30. ">
  31. <thead>
  32. <tr>
  33. <th data-options="field:'name',width:180">Task Name</th>
  34. <th data-options="field:'persons',width:60,align:'right'">Persons</th>
  35. <th data-options="field:'begin',width:80">Begin Date</th>
  36. <th data-options="field:'end',width:80">End Date</th>
  37. <th data-options="field:'progress',width:120,formatter:formatProgress">Progress</th>
  38. </tr>
  39. </thead>
  40. </table>
  41. <script type="text/javascript">
  42. (function($){
  43. function pagerFilter(data){
  44. if ($.isArray(data)){ // is array
  45. data = {
  46. total: data.length,
  47. rows: data
  48. }
  49. }
  50. var dg = $(this);
  51. var state = dg.data('treegrid');
  52. var opts = dg.treegrid('options');
  53. var pager = dg.treegrid('getPager');
  54. pager.pagination({
  55. onSelectPage:function(pageNum, pageSize){
  56. opts.pageNumber = pageNum;
  57. opts.pageSize = pageSize;
  58. pager.pagination('refresh',{
  59. pageNumber:pageNum,
  60. pageSize:pageSize
  61. });
  62. dg.treegrid('loadData',state.originalRows);
  63. }
  64. });
  65. if (!state.originalRows){
  66. state.originalRows = data.rows;
  67. }
  68. var topRows = [];
  69. var childRows = [];
  70. $.map(state.originalRows, function(row){
  71. row._parentId ? childRows.push(row) : topRows.push(row);
  72. });
  73. data.total = topRows.length;
  74. var start = (opts.pageNumber-1)*parseInt(opts.pageSize);
  75. var end = start + parseInt(opts.pageSize);
  76. data.rows = $.extend(true,[],topRows.slice(start, end).concat(childRows));
  77. return data;
  78. }
  79. var appendMethod = $.fn.treegrid.methods.append;
  80. var loadDataMethod = $.fn.treegrid.methods.loadData;
  81. $.extend($.fn.treegrid.methods, {
  82. clientPaging: function(jq){
  83. return jq.each(function(){
  84. var state = $(this).data('treegrid');
  85. var opts = state.options;
  86. opts.loadFilter = pagerFilter;
  87. var onBeforeLoad = opts.onBeforeLoad;
  88. opts.onBeforeLoad = function(row,param){
  89. state.originalRows = null;
  90. onBeforeLoad.call(this, row, param);
  91. }
  92. $(this).treegrid('loadData', state.data);
  93. $(this).treegrid('reload');
  94. });
  95. },
  96. loadData: function(jq, data){
  97. jq.each(function(){
  98. $(this).data('treegrid').originalRows = null;
  99. });
  100. return loadDataMethod.call($.fn.treegrid.methods, jq, data);
  101. },
  102. append: function(jq, param){
  103. return jq.each(function(){
  104. var state = $(this).data('treegrid');
  105. if (state.options.loadFilter == pagerFilter){
  106. $.map(param.data, function(row){
  107. row._parentId = row._parentId || param.parent;
  108. state.originalRows.push(row);
  109. });
  110. $(this).treegrid('loadData', state.originalRows);
  111. } else {
  112. appendMethod.call($.fn.treegrid.methods, jq, param);
  113. }
  114. })
  115. }
  116. });
  117. })(jQuery);
  118. function formatProgress(value){
  119. if (value){
  120. var s = '<div style="width:100%;border:1px solid #ccc">' +
  121. '<div style="width:' + value + '%;background:#cc0000;color:#fff">' + value + '%' + '</div>'
  122. '</div>';
  123. return s;
  124. } else {
  125. return '';
  126. }
  127. }
  128. $(function(){
  129. $('#tg').treegrid().treegrid('clientPaging');
  130. })
  131. </script>
  132. </body>
  133. </html>