2013-01-04 09:03题主

Grid一次最多加载1万条数据?

我在测试加载一个数据库里的数据时发现Grid 只能加载1万条 实际表中有6万多。
同时 我用wb自带的数据库浏览器 也只能查看1万条。
是那里需要设置吗?
2013-01-04 10:51#1
文档中对于此保护机制有详细描述。
Grid加载的数据一般取决于DataProvider组件(如未使用DataProvider获取表格数据则不受此影响)
DataProvider处理的最大记录数取决于变量webbuilder.control.limitRecords,默认值是10000,你可以调整此变量设置DataProvider一次性提取记录的数量。
该变量的作用是,限制允许服务器每次一次性处理和返回的最大记录数,以保护服务器加载和处理过多的记录。
试想,访问一个超过1亿条记录的表,如果不受限制返回全部数据,足以造成服务器和客户端的资源耗尽。
那如何才能访问1亿条记录的表又要求返回全部记录数呢?答案是可以使用数据库端的分页方案,以DataProvider控件访问SQL Server数据库为例,设置DataProvider如下属性:
autoPage: false //关闭自动分页功能
orderFields: {default:'a'} //生成{#sql.orderFields#}关键字时使用默认前缀a.,如a.TITLE
sql://提取记录的SQL

totalSql://提取记录总量的SQL

这样虽然DataProvider对每次一次性处理的记录有限制,但仍能返回全部记录数。
2013-01-04 10:58#2
你也可以参看示例 Advanced Infinite Scroll,该示例能动态提取超大表的记录,并无限滚动。
2013-01-04 11:27#3
嗯 学习了。不错。
2013-01-04 11:37#4
受教了 mark~
2013-01-04 22:32#5
不错 晚上回来依着葫芦画瓢 搞出来了。几万条数据也可以顺利显示出来。显示效果也不错。很快
2013-01-04 22:40#6
有个小问题。
2013-01-05 10:43#7
更改局部的在grid的afterrender事件里添加代码:
Wb.getPagingBar(grid).getComponent('inputItem').setWidth(100);

Wb.getPagingBar(grid).child('#inputItem').setWidth(100);
更改全局的在module的initialize事件或wb.js的Wb.initialize方法里添加代码:
Ext.toolbar.Paging.prototype.inputItemWidth=100;
一般的编辑或查看显示前面10000条足够了,没必要显示这么多,更多的可以通过排序或查询来筛选。
2013-01-05 11:27#8
谢谢 也算是学习了一下extjs了。
2013-01-05 19:06#9
顶一下 学习了
2013-01-07 08:49#10
学习了

返回开发者社区