Handsontable虽然处理速度很快,但当数据量达到10W+的时候很容易导致浏览器内存泄漏,这时候可以用分页来解决。官网提供了前端分页demo,测试后发现也只能处理低于10W的数据,而且调试的时候由于是一次性把所有数据全部加载到浏览器,浏览器会非常卡,这个时候最好选择数据库分页。

  一、前端分页

  这边就借用官网的前端分页核心代码。

 <div class="descLayout">
<div class="pad" data-jsfiddle="example1">
<h2>Pagination</h2> <div id="example1"></div> <div class="pagination">
<a href="#1">1</a>
<a href="#2">2</a>
<a href="#3">3</a>
<a href="#4">4</a>
<a href="#5">5</a> </div> </div>
</div>
            var getData = (function () {
var data = [
[1,2,4,5,6,7,8,9,0],[0,0,0,0,0,0,0,0,0,0],[1,2,3,4,5,6,7,8,9,0],
[1,2,4,5,6,7,8,9,0],[0,0,0,0,0,0,0,0,0,0],[1,2,3,4,5,6,7,8,9,0],
[0,0,0,0,0,0,0,0,0],[1,2,3,4,5,6,7,8,9,0],[0,0,0,0,0,0,0,0,0,0],
[0,0,0,0,0,0,0,0,0],[1,2,3,4,5,6,7,8,9,0],[0,0,0,0,0,0,0,0,0,0],
[1,2,4,5,6,7,8,9,0],[0,0,0,0,0,0,0,0,0,0],[1,2,3,4,5,6,7,8,9,0],
[1,2,4,5,6,7,8,9,0],[0,0,0,0,0,0,0,0,0,0],[1,2,3,4,5,6,7,8,9,0],
[0,0,0,0,0,0,0,0,0],[1,2,3,4,5,6,7,8,9,0],[0,0,0,0,0,0,0,0,0,0],
[0,0,0,0,0,0,0,0,0],[1,2,3,4,5,6,7,8,9,0],[0,0,0,0,0,0,0,0,0,0],
[1,2,4,5,6,7,8,9,0],[0,0,0,0,0,0,0,0,0,0],[1,2,3,4,5,6,7,8,9,0],
[1,2,4,5,6,7,8,9,0],[0,0,0,0,0,0,0,0,0,0],[1,2,3,4,5,6,7,8,9,0],
[0,0,0,0,0,0,0,0,0],[1,2,3,4,5,6,7,8,9,0],[0,0,0,0,0,0,0,0,0,0],
[0,0,0,0,0,0,0,0,0],[1,2,3,4,5,6,7,8,9,0],[0,0,0,0,0,0,0,0,0,0],
[1,2,4,5,6,7,8,9,0],[0,0,0,0,0,0,0,0,0,0],[1,2,3,4,5,6,7,8,9,0],
[1,2,4,5,6,7,8,9,0],[0,0,0,0,0,0,0,0,0,0],[1,2,3,4,5,6,7,8,9,0],
[0,0,0,0,0,0,0,0,0],[1,2,3,4,5,6,7,8,9,0],[0,0,0,0,0,0,0,0,0,0],
[0,0,0,0,0,0,0,0,0],[1,2,3,4,5,6,7,8,9,0],[0,0,0,0,0,0,0,0,0,0]
]; return function () {
var page = parseInt(window.location.hash.replace('#', ''), 10) || 1,
limit = 6,
row = (page - 1) * limit,
count = page * limit,
part = []; for (;row < count;row++) {
part.push(data[row]);
} return part;
}
})(); var container = document.getElementById('example1'),
hot; hot = new Handsontable(container, {
data: getData(),
colHeaders: true
}); Handsontable.Dom.addEvent(window, 'hashchange', function (event) {
hot.loadData(getData());
});

  效果如下:

  

  二、数据库分页

  我用的是PetaPoco中Page分页,将得到的总页数、当前页数、总条数等信息通过Model返回到页面。 

 <div>

            <div id="deallist"></div>
<div class="text-center pageInput pagination" style="padding-top:5px;">
<label>第</label>
<span id="CurrentPage">@(Model.CurrentPage)</span>/
<span id="AllPage">@(Model.TotalPages)</span>
<label>页&nbsp;&nbsp;</label>
<label>共</label>
<span id="total">@(Model.TotalItems)</span>
<label>条&nbsp;&nbsp;</label>
<a id="FirstPage" class="a-state" href="javascript:void(0);">首页&nbsp;&nbsp;</a>
<a id="UpPage" class="a-state" href="javascript:void(0);">上一页&nbsp;&nbsp;</a>
<a id="DownPage" class="a-state" href="javascript:void(0);">下一页&nbsp;&nbsp;</a>
<a id="LastPage" class="a-state" href="javascript:void(0);">尾页&nbsp;&nbsp;</a>
<span id="MainContent_gvNewsList_Label2">跳转到:</span>
<input type="text" value="1" id="txtNeedPage" style="height:16px !important;width:30px;">
<a id="lnkGoto" class="a-state" href="javascript:void(0);">
跳转
</a>
</div>
</div>
//首页
$("#FirstPage").click(function () {
href += "&page=" + 1;
window.location.href = (window.location.href.indexOf("&") > 0 ? window.location.href.substr(0, window.location.href.indexOf("&")) : window.location.href) + href;
});
//尾页
$("#LastPage").click(function () {
href += "&page=" + parseInt($("#AllPage").text());
window.location.href = (window.location.href.indexOf("&") > 0 ? window.location.href.substr(0, window.location.href.indexOf("&")) : window.location.href) + href;
});
//上一页
$("#UpPage").click(function () {
if (parseInt($("#CurrentPage").text()) != 1) {
href += "&page=" + (parseInt($("#CurrentPage").text()) - 1);
window.location.href = (window.location.href.indexOf("&") > 0 ? window.location.href.substr(0, window.location.href.indexOf("&")) : window.location.href) + href;
}
});
//下一页
$("#DownPage").click(function () {
if (parseInt($("#CurrentPage").text()) != parseInt($("#AllPage").text())) {
href += "&page=" + (parseInt($("#CurrentPage").text()) + 1);
window.location.href = (window.location.href.indexOf("&") > 0 ? window.location.href.substr(0, window.location.href.indexOf("&")) : window.location.href) + href;
}
});
//跳转
$("#lnkGoto").click(function () {
if (parseInt($("#txtNeedPage").val().trim()) > 0 && parseInt($("#txtNeedPage").val().trim()) <= parseInt($("#AllPage").text())) {
href += "&page=" + parseInt($("#txtNeedPage").val().trim());
window.location.href = (window.location.href.indexOf("&") > 0 ? window.location.href.substr(0, window.location.href.indexOf("&")) : window.location.href) + href;
}
}); var container = document.querySelector('#deallist');
hot = new Handsontable(container, {
height: 533,
rowHeaders: true,
colHeaders: @Html.Raw(Model.Headers ==null?"[]":Model.Headers),
data: @Html.Raw((Model.AssetPoolDataList != null && Model.AssetPoolDataList.ToList().Count > 0) ? serializer.Serialize((from i in Model.AssetPoolDataList
select i).ToList()) : "[]"),
columns: @Html.Raw(Model.Columns == null ? "[]" : Model.Columns),
filters: false,
columnSorting: false,
sortIndicator: true,
autoColumnSize: true,
fixedColumnsLeft: 1,
fillHandle: false,
stretchH: 'all',
viewportRowRenderingOffset:100,
cells: function (row, col, prop) {
var cellProperties = {};
cellProperties.renderer = "negativeValueRenderer";
return cellProperties;
}
});

  分页效果如下:

  

 By QJL

Handsontable的前端分页与数据库分页的更多相关文章

  1. EasyUI表格DataGrid前端分页和后端分页的总结

    Demo简介 Demo使用Java.Servlet为后台代码(数据库已添加数据),前端使用EasyUI框架,后台直接返回JSON数据给页面 1.配置Web.xml文件 <?xml version ...

  2. django项目一 分页器(前端分页和后端分页区别)

    1. 客户信息展示 1. 母版和继承 {% extends 'layout'%} {% load static%} {% static '文件路径' %} block css js content 2 ...

  3. 浅谈SQL Server数据库分页

    数据库分页是老生常谈的问题了.如果使用ORM框架,再使用LINQ的话,一个Skip和Take就可以搞定.但是有时由于限制,需要使用存储过程来实现.在SQLServer中使用存储过程实现分页的已经有很多 ...

  4. 各种数据库分页sql

    1.oracle数据库分页 select * from (select a.*,rownum rc from 表名 where rownum<=endrow) a where a.rc>= ...

  5. Oracle数据库和DB2数据库分页SQL的区别举例

    --------------------------ORACLE数据库分页SQL举例------------------------------------------------ SELECT * ...

  6. MySQL、SqlServer、Oracle三大主流数据库分页查询

    在这里主要讲解一下MySQL.SQLServer2000(及SQLServer2005)和ORCALE三种数据库实现分页查询的方法.可能会有人说这些网上都有,但我的主要目的是把这些知识通过我实际的应用 ...

  7. Sqlserver数据库分页查询

    Sqlserver数据库分页查询一直是Sqlserver的短板,闲来无事,想出几种方法,假设有表ARTICLE,字段ID.YEAR...(其他省略),数据53210条(客户真实数据,量不大),分页查询 ...

  8. Statement和PreparedStatement的特点 MySQL数据库分页 存取大对象 批处理 获取数据库主键值

    1 Statement和PreparedStatement的特点   a)对于创建和删除表或数据库,我们可以使用executeUpdate(),该方法返回0,表示未影向表中任何记录   b)对于创建和 ...

  9. 【转】数据库分页Java实现

    [转]数据库分页Java实现 MySQL分页 主要是MySQL数据库内置LIMIT函数 注意添加mysql的JAR包mysql-connector-java-5.1.13-bin.jar 在中小数据量 ...

随机推荐

  1. Java GC分析记录

    Java GC记录 近来.项目没有特别忙碌的时候,抽空看了下生产环境的项目运行状况,我们的项目一直运行速度不是很快,偶尔会出现卡顿的现象,这点给人的体验感觉也就不那么好了.先抛个测试环境截图(生产环境 ...

  2. MysqL应该考虑到的安全策略

    1:使用预处理语句防止SQL注入2:写入数据库的数据要进行特殊字符的转义,比如字符中带单引号和双引号需要在应用层转义,这样为了防止SQL注入3:查询的错误信息不要返回给用户,将错误记录到日志.错误信息 ...

  3. QWebSocketServer

    QWebSocketServer 服务端 Public Types Public Function QWebSocketServer(const QString &serverName, Ss ...

  4. soj1091 指环王 bfs+hash+剪枝

    原题链接http://acm.scu.edu.cn/soj/problem.action?id=1091 这题的主要解法就是搜索,我用的是bfs,用map将二维数组处理成字符串作为主键,到达当前状态的 ...

  5. hdu2089 不要62--经典数位DP

    一道十分经典的数位DP的题目. dp[i][j]表示最高位是数字i,连同最高位在内共有j位.注意边界的初始化. 接下来就是区间划分,特殊情况处理.....对了,如果不知道自己的方法是否正确,可以写一个 ...

  6. 使用eclipse写C

    C终究还是程序员进阶少不了坎,熟悉nginx ,深入学习php等最后都逃不过C,那为何不去拥抱呢...'='',c对我来说也是老朋友了,但是那时做 硬件作比赛而且比较浅显,现在决定还是 重新试试吧,, ...

  7. Hive分区和桶

    SMB 存在的目的主要是为了解决大表与大表间的 Join 问题,分桶其实就是把大表化成了“小表”,然后 Map-Side Join 解决之,这是典型的分而治之的思想.在聊 SMB Join 之前,我们 ...

  8. Hbase Scan的方法

    public static void main(String[] args) throws IOException { //Scan类常用方法说明 //指定需要的family或column ,如果没有 ...

  9. Linux基础二

    linux命令分类 内部命令:属于shell解释器 外部命令:独立于shell解释器 检查命令类型 type:检查命令字的类型 [root@localhost ~]# type ls ls 是 `ls ...

  10. 在Keil uv5里面添加STC元器件库,不影响其他元件

    先到网上下载stc.CBD(http://download.csdn.net/detail/mao0514/9699117) 还有STC新系列单片机的头文件,宏晶的网站就有 1.在Keil/C51/I ...