Handsontable的前端分页与数据库分页
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>页 </label>
<label>共</label>
<span id="total">@(Model.TotalItems)</span>
<label>条 </label>
<a id="FirstPage" class="a-state" href="javascript:void(0);">首页 </a>
<a id="UpPage" class="a-state" href="javascript:void(0);">上一页 </a>
<a id="DownPage" class="a-state" href="javascript:void(0);">下一页 </a>
<a id="LastPage" class="a-state" href="javascript:void(0);">尾页 </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的前端分页与数据库分页的更多相关文章
- EasyUI表格DataGrid前端分页和后端分页的总结
Demo简介 Demo使用Java.Servlet为后台代码(数据库已添加数据),前端使用EasyUI框架,后台直接返回JSON数据给页面 1.配置Web.xml文件 <?xml version ...
- django项目一 分页器(前端分页和后端分页区别)
1. 客户信息展示 1. 母版和继承 {% extends 'layout'%} {% load static%} {% static '文件路径' %} block css js content 2 ...
- 浅谈SQL Server数据库分页
数据库分页是老生常谈的问题了.如果使用ORM框架,再使用LINQ的话,一个Skip和Take就可以搞定.但是有时由于限制,需要使用存储过程来实现.在SQLServer中使用存储过程实现分页的已经有很多 ...
- 各种数据库分页sql
1.oracle数据库分页 select * from (select a.*,rownum rc from 表名 where rownum<=endrow) a where a.rc>= ...
- Oracle数据库和DB2数据库分页SQL的区别举例
--------------------------ORACLE数据库分页SQL举例------------------------------------------------ SELECT * ...
- MySQL、SqlServer、Oracle三大主流数据库分页查询
在这里主要讲解一下MySQL.SQLServer2000(及SQLServer2005)和ORCALE三种数据库实现分页查询的方法.可能会有人说这些网上都有,但我的主要目的是把这些知识通过我实际的应用 ...
- Sqlserver数据库分页查询
Sqlserver数据库分页查询一直是Sqlserver的短板,闲来无事,想出几种方法,假设有表ARTICLE,字段ID.YEAR...(其他省略),数据53210条(客户真实数据,量不大),分页查询 ...
- Statement和PreparedStatement的特点 MySQL数据库分页 存取大对象 批处理 获取数据库主键值
1 Statement和PreparedStatement的特点 a)对于创建和删除表或数据库,我们可以使用executeUpdate(),该方法返回0,表示未影向表中任何记录 b)对于创建和 ...
- 【转】数据库分页Java实现
[转]数据库分页Java实现 MySQL分页 主要是MySQL数据库内置LIMIT函数 注意添加mysql的JAR包mysql-connector-java-5.1.13-bin.jar 在中小数据量 ...
随机推荐
- MySQL数据库基础(二)(约束以及修改数据表)
一,约束以及修改数据表 约束的作用?1.约束保证数据的完整性.一致性:2.约束分为表级约束.列级约束:3.约束类型包括:NOT NULL(非空约束).PRIMARY KEY(主键约束).UNIQUE ...
- 老男孩Python全栈开发(92天全)视频教程 自学笔记06
day6课程内容: tuple(元祖) 创建元祖: tup0=() #没有元素的一个元祖 tup1=(20,)#只有一个元素的元祖 元祖可读,不可修改 Dictionary(字典)#Python里唯一 ...
- 快速入门vue-cli配置
作为一名使用了一段时间Vue.js的新手,相信和不少初入Vue的朋友一样,都对Vue-cli的配置一知半解.后来通过对webpack的学习,也算是对脚手架的配置有了一定的了解,所以也想把这段时间自己的 ...
- Codeforces446C - DZY Loves Fibonacci Numbers
Portal Description 给出一个\(n(n\leq3\times10^5)\)个数的序列,进行\(m(m\leq3\times10^5)\)次操作,操作有两种: 给区间\([L,R]\) ...
- BZOJ3223/洛谷P3391 - 文艺平衡树
BZOJ链接 洛谷链接 题意 模板题啦~2 代码 //文艺平衡树 #include <cstdio> #include <algorithm> using namespace ...
- Spark源码编译(未完待续)
在这里我们不需要搭建独立的Spark集群,利用Yarn Client调用Hadoop集群的计算资源. Spark源码编译生成配置包: 解压源码,在根去根目录下执行以下命令(sbt编译我没尝试) ./m ...
- 嵌入式 Linux 与linux启动时自动加载模块
一.在ARM linux 下,一般而言,产品在启动的过程中应该加载模块,最简单的方法是修改启动过程的rc脚本(/etc/init.d/rcS),增加ismod /../xxx.ko这个命令.例如:加载 ...
- linux shell中获取mongodb最大连接数、内存使用情况等
前两天接到了一个新的需求,需要在linux shell脚本中监控到mongodb最大连接数.内存使用情况等. 但是我对于linux shel很不了解,只是会一些简单常用的linux的操作而已,只要一顿 ...
- Java Breakpoint
1.错误描述 Java Breakpoint Unable to install breakpoint in com.you.humb.web.commom.dao.impl.ExportDaoImp ...
- 远程块存储iSCSI
/* Border styles */ #table-2 thead, #table-2 tr { border-top-width: 1px; border-top-style: solid; bo ...