PDA

View Full Version : 关于grid的分页问题!看的懂的兄弟进来!



cnggleo
14 Sep 2007, 1:56 AM
怎么在array-grid例子的基础上加上分页呢?也就是说,一开始就把数据抛到客户端进行解析?
看到这里也有很多懂中文的兄弟,顺便进来问问!

Footeuz
14 Sep 2007, 3:55 AM
I'm not sure to understand your question 8-|

私はあなたの質問を理解して確実でない

村Yayuuに行くよいものどの飛行であるか

cnggleo
16 Sep 2007, 7:49 PM
就是说,EXT 的DOC中,有一个Basic grid from array data 的例子,怎么在这个例子的基础上加上分页?我是照Paging and Remote Datasets 这个例子加的分页,可是不能控制到数据显示。虽然页数和总记录数没错,可是他是把所有记录全输出到页面上了,上一页,下一页就变的没有效果~总是显示全部记录~~不知道是不是哪里设错了。如果没猜错的吧,应该是

mystix
16 Sep 2007, 8:05 PM
I'm not sure to understand your question 8-|

私はあなたの質問を理解して確実でない

村Yayuuに行くよいものどの飛行であるか
@cnggleo は日本人じゃありません。中国人です。二人も英語で説明したほうがいいんですよ。



怎么在array-grid例子的基础上加上分页呢?也就是说,一开始就把数据抛到客户端进行解析?
看到这里也有很多懂中文的兄弟,顺便进来问问!
老兄,请用英文讨论问题。

craneleeon
16 Sep 2007, 8:08 PM
[QUOTE=cnggleo;63667]就是说,EXT 的DOC中,有一个Basic grid from array data 的例子,怎么在这个例子的基础上加上分页?我是照Paging and Remote Datasets 这个例子加的分页,可是不能控制到数据显示。虽然页数和总记录数没错,可是他是把所有记录全输出到页面上了,上一页,下一页就变的没有效果~总是显示全部记录~~不知道是不是哪里设错了。如果没猜错的吧,应该是

mystix
16 Sep 2007, 8:15 PM
@craneleeon, i think @cnggleo's asking about how to add paging functionality to the basic grid from array example...

cnggleo
16 Sep 2007, 9:57 PM
@craneleeon, i think @cnggleo's asking about how to add paging functionality to the basic grid from array example...
Right! I just want this effect! but what can i do? Is this somthing wrong with my configure?

followmephoe
16 Sep 2007, 10:43 PM
郁闷有时用英文根本表达不清什么意思,楼主你看下那个grid分页的例子呀,那个说的很清楚,你要分页首先要取得start和limit这两个参数(request.getParameter("start")),然后就可以分页了,我用的是hibernate分页,所以很好实现分页

cnggleo
16 Sep 2007, 10:57 PM
郁闷有时用英文根本表达不清什么意思,楼主你看下那个grid分页的例子呀,那个说的很清楚,你要分页首先要取得start和limit这两个参数(request.getParameter("start")),然后就可以分页了,我用的是hibernate分页,所以很好实现分页
这么说吧,我的数据来源就是一个瘦客户端的JS的数组,假设一共一百条记录,我怎么通过Ext.grid.Grid让他每页只显示10条记录,分10页显示?

mystix
16 Sep 2007, 11:06 PM
@cnggleo, the 2 examples you mentioned are using different concepts.

the basic grid from array example does not require any paging at all since all required data already exists in the in-memory js array. (i believe some users have attempted to implement paging with this. try doing a search on "array grid paging")

the paging grid example requires a server side technology in order to achieve paging. that's where the start and limit parameters (mentioned by @followmephoe) come in.

you might want to check out this tutorial (in chinese):
http://extjs.com/learn/Tutorial:Basics_of_Paging_With_the_Grid_Component_%28Chinese%29

followmephoe
17 Sep 2007, 12:38 AM
你看这个代码


var gridFoot = grid.getView().getFooterPanel(true);
var paging = new Ext.PagingToolbar(gridFoot, ds, {
pageSize: 10,//一页显示几条数句
displayInfo: true,
displayMsg: '显示第{0}条到第{1}条数据 总记录数为{2}条',
emptyMsg: "没有数据显示"
});

ds.load({params:{start:0, limit:10}});//start从第几条开始,limit为显示几条数据



var Plant = Ext.data.Record.create([

{name:'aid',mapping:'aid'},
{name:'Author',mapping:'Author'},
{name:'Title',mapping:'Title'},
{name:'Manufacturer',mapping:'Manufacturer'},
{name:'ProductGroup',mapping:'ProductGroup'}
]);

var ds = new Ext.data.Store({
proxy: new Ext.data.HttpProxy({url: 'createXml'}),
reader: new Ext.data.JsonReader({
root: 'rs',//显示数据的根
totalProperty: 'cs',//总共有多少条数据显示
id: 'aid'
}, Plant)
});

你要在服务端生成好数据以及数据有多少,客户端代码和那个grid分页的代码是一样的,主要是在服务器端处理分页

cnggleo
17 Sep 2007, 12:58 AM
你看这个代码


var gridFoot = grid.getView().getFooterPanel(true);
var paging = new Ext.PagingToolbar(gridFoot, ds, {
pageSize: 10,//一页显示几条数句
displayInfo: true,
displayMsg: '显示第{0}条到第{1}条数据 总记录数为{2}条',
emptyMsg: "没有数据显示"
});

ds.load({params:{start:0, limit:10}});//start从第几条开始,limit为显示几条数据



var Plant = Ext.data.Record.create([

{name:'aid',mapping:'aid'},
{name:'Author',mapping:'Author'},
{name:'Title',mapping:'Title'},
{name:'Manufacturer',mapping:'Manufacturer'},
{name:'ProductGroup',mapping:'ProductGroup'}
]);

var ds = new Ext.data.Store({
proxy: new Ext.data.HttpProxy({url: 'createXml'}),
reader: new Ext.data.JsonReader({
root: 'rs',//显示数据的根
totalProperty: 'cs',//总共有多少条数据显示
id: 'aid'
}, Plant)
});

你要在服务端生成好数据以及数据有多少,客户端代码和那个grid分页的代码是一样的,主要是在服务器端处理分页

这么说,每点一次上一页或者下一页就是一次服务器请求了?我的意思是,有没有直接把数据全部扔到客户端,然后再进行分页,每次点击上下页都是本地请求的?

followmephoe
17 Sep 2007, 1:18 AM
把数据全部放在客户端干嘛?它这个分页就是点下一页就又请求一下服务端,然后再把数据返回给客户端的.
要是你想把数据全部放在客户端的话应该是可以实现的,不过EXT里我没有这么做过,我觉的你还是不要把数据放在客户端的好,因为在现实应用中,数据库的数据量是很大的,所以你把所有的数据返回到客户端我觉的有点不太合理,你那样做的话还不如用ajax去做,一样可以提高效率的.它这个EXT也是用到了ajax的,你没看到它没有刷页面吗?

cnggleo
17 Sep 2007, 1:40 AM
把数据全部放在客户端干嘛?它这个分页就是点下一页就又请求一下服务端,然后再把数据返回给客户端的.
要是你想把数据全部放在客户端的话应该是可以实现的,不过EXT里我没有这么做过,我觉的你还是不要把数据放在客户端的好,因为在现实应用中,数据库的数据量是很大的,所以你把所有的数据返回到客户端我觉的有点不太合理,你那样做的话还不如用ajax去做,一样可以提高效率的.它这个EXT也是用到了ajax的,你没看到它没有刷页面吗?
正常是一次点击一个请求的,但不知道服务端是怎么实现的。难道点了下一页,客户端会传参数给服务端吗?有没有规范可以看?

Footeuz
17 Sep 2007, 3:46 AM
It was more funny in japanese than in chinese LOL
I was invited in a village :))

Sorry for the mistake ;)

Ronaldo
17 Sep 2007, 4:03 AM
OK, als iedereen dan in zijn eigen taal wil spreken dan beantwoord ik alle volgende vragen wel in het Twents.

mystix
17 Sep 2007, 4:11 AM
err.. german?

Footeuz
17 Sep 2007, 7:30 AM
Netherland I think

cnggleo
17 Sep 2007, 5:40 PM
I can read Chinese and English words,please don't speak language without them

followmephoe
17 Sep 2007, 10:40 PM
客户端当然会传参数到服务端了,
ds.load({params:{start:0, limit:10}});
这句话就传了start,limit这两个参数给服务端,你可以通过request.getparameter()取到

cnggleo
17 Sep 2007, 11:58 PM
客户端当然会传参数到服务端了,
ds.load({params:{start:0, limit:10}});
这句话就传了start,limit这两个参数给服务端,你可以通过request.getparameter()取到
那这个就麻烦了,比如我的GRID是一个查询结果,我的服务端分页要怎么写?难道我的服务端还需要再去拼条件查询后再选出TOP几条记录吗?可是查询条件在第一次请求后就已经没了,这样做不是太麻烦了,还要回传上一步的查询条件?

followmephoe
18 Sep 2007, 12:08 AM
grid里面有一个beforeload事件,在数据加载之前,你可以把要查询的条件传到服务端,然后再分页出来,以后每次点下一页,也就是你查询出来的数据,都会把查询条件传到后台去的.

fangzhouxing
18 Sep 2007, 12:27 AM
那这个就麻烦了,比如我的GRID是一个查询结果,我的服务端分页要怎么写?难道我的服务端还需要再去拼条件查询后再选出TOP几条记录吗?可是查询条件在第一次请求后就已经没了,这样做不是太麻烦了,还要回传上一步的查询条件?

这个我正好已经实现过了。

服务器端:

public ListRange findAll(TimelineQueryConditionData qc, GridParam param) {
//查询(判断参数 firstQuery 是否为y)
if (qc.getFirstQuery()) {
queryTimeline(qc);
}

//获取查询结果(分页)
ListRange listRange = new ListRange();
listRange.setSuccess(true);


客户端:



ds.on('beforeload', function(store, options) {
store.baseParams.firstQuery = firstQuery?'y':'n';
}, this, true);



顺便说一下,要建立一个临时表暂存查询结果。然后针对这个临时表中的内容进行分页查询。

followmephoe
18 Sep 2007, 12:35 AM
不用这样做吧,你要查询数据还每次都把查出来的数据放到一张暂时的表里呀.太麻烦了.
grid里有一个beforeload事件,就可以在加载数据以前把查询的参数传到后台去.

cnggleo
18 Sep 2007, 1:57 AM
不用这样做吧,你要查询数据还每次都把查出来的数据放到一张暂时的表里呀.太麻烦了.
grid里有一个beforeload事件,就可以在加载数据以前把查询的参数传到后台去.

有没有一个例子呢?在EXT的DEMO好像没看到这类的例子~~

linizou
18 Sep 2007, 5:33 PM
看看那个中文教程,管用的.ds.lod({params:...}) .是传到server 端脚本处理的参数.

datastroe 是在客户端的js , 控制它只显示你要的部分即可.

cnggleo
18 Sep 2007, 6:08 PM
看看那个中文教程,管用的.ds.lod({params:...}) .是传到server 端脚本处理的参数.

datastroe 是在客户端的js , 控制它只显示你要的部分即可.
现在我就是不太了解,这个条件要怎么去传?我在查询页面的时候,传的那些条件,到了列表页面,怎么再次通过点击

followmephoe
18 Sep 2007, 10:23 PM
例子是没有的哦,要靠自已去看帮助文档的,大概的意思就是这样了,具体的要靠你自已去想了.
你看看那个beforeload事件吧.我觉的这个不难的.


ds.on('beforeload', function() {
ds.baseParams = {
这里写要传的参数
};
});

cnggleo
20 Sep 2007, 5:55 PM
例子是没有的哦,要靠自已去看帮助文档的,大概的意思就是这样了,具体的要靠你自已去想了.
你看看那个beforeload事件吧.我觉的这个不难的.


ds.on('beforeload', function() {
ds.baseParams = {
这里写要传的参数
};
});

开源的东西就这样,想找到点东西都麻烦~参数的形式也是

followmephoe
20 Sep 2007, 7:05 PM
是的,就是这样取的:D

cnggleo
20 Sep 2007, 9:25 PM
是的,就是这样取的:D
大家都是去哪里看的这些教程?不会就只看官方的API吧?有没有教程之类的可以学习的?

followmephoe
20 Sep 2007, 10:15 PM
自已看文档,不会在论坛上问.

cnggleo
20 Sep 2007, 11:17 PM
你的文档指的是官方的API及DEMO那个DOC吗?还有没有其它的比如User's Guide,或者白皮书之类的东西?

followmephoe
20 Sep 2007, 11:25 PM
就是官方的那些文档,源码了.其它的也没资料了.有资料的话也不会到处问了.
我有一大堆问题都不知道怎么解决呢.问深了一点,外国人看不明白你说什么.

cnggleo
21 Sep 2007, 12:04 AM
QQ多少,加进来一起研究一下。

followmephoe
21 Sep 2007, 12:37 AM
38847353

mystix
21 Sep 2007, 12:48 AM
就是官方的那些文档,源码了.其它的也没资料了.有资料的话也不会到处问了.
我有一大堆问题都不知道怎么解决呢.问深了一点,外国人看不明白你说什么.

谁说看不懂? :>

it's just easier for me to type in english. ;)

zjumty
21 Sep 2007, 1:03 AM
ds.load({params:{...}}) 不就是用来传参数的吗,把查询条件传回去就好了.
像这样

ds.load({params:{entityName:currentTypeName}});

如果在加上分页信息

ds.load({params:{entityName:currentTypeName,start:20, limit:10}});

如果你服务端用java,那就用jdbc的ScollableResultSet来从第20条记录滚动10条,取出来,然后以json或xml数据格式返回给客户端就可以了.

zjumty
21 Sep 2007, 1:04 AM
以上都是猜测,没实践过. >:)

zjumty
21 Sep 2007, 1:08 AM
@mystix 这位大哥,又懂中文,又懂英文,又懂日文,太猛了!


谁说看不懂? :>

it's just easier for me to type in english. ;)

followmephoe
21 Sep 2007, 4:51 PM
@mystix 是亚洲人,人家官方语言是中文,不过主要还是说英语.肯定猛了,要是我去了一个说英语的国家,英文也牛B了呀.

cnggleo
24 Sep 2007, 9:56 PM
顶用下,发现这帖子对懂中文的,想用分页的人帮助挺大的~

kenshinlk
24 Sep 2007, 10:44 PM
怎么在array-grid例子的基础上加上分页呢?也就是说,一开始就把数据抛到客户端进行解析?
看到这里也有很多懂中文的兄弟,顺便进来问问!
1.构造返回的json格式字符窜var myData = [['aa','bb','dd'],['ee','ff','gg'],...];(其实是一个javascript原生二维数组格式)
2.然后使用MemoryProxy加载数据
ds = new Ext.data.Store({
proxy: new Ext.data.MemoryProxy(myData),
reader: new Ext.data.ArrayReader({}, readerArray)
});
基本原理大概如此,也就是使用MemoryProxy替代HttpProxy而已。:-?

cnggleo
25 Sep 2007, 5:56 PM
1.构造返回的json格式字符窜var myData = [['aa','bb','dd'],['ee','ff','gg'],...];(其实是一个javascript原生二维数组格式)
2.然后使用MemoryProxy加载数据
ds = new Ext.data.Store({
proxy: new Ext.data.MemoryProxy(myData),
reader: new Ext.data.ArrayReader({}, readerArray)
});
基本原理大概如此,也就是使用MemoryProxy替代HttpProxy而已。:-?

对于proxy到底什么时候要用MemoryProxy什么时候又该用HttpProxy?

benwg
6 Oct 2007, 8:15 PM
地址是:http://ido.nl.eu.org/ext-pagingmemoryproxy/,应该能解决你的问题

ttlu
22 Jan 2008, 6:35 PM
1.构造返回的json格式字符窜var myData = [['aa','bb','dd'],['ee','ff','gg'],...];(其实是一个javascript原生二维数组格式)
2.然后使用MemoryProxy加载数据
ds = new Ext.data.Store({
proxy: new Ext.data.MemoryProxy(myData),
reader: new Ext.data.ArrayReader({}, readerArray)
});
基本原理大概如此,也就是使用MemoryProxy替代HttpProxy而已。:-?

我也是需要在客户端分页,要分页的数据已经保存到一个二维数组data里面去,正是用 kenshinlk 这种方法读取数据的,但是要怎样才能实现分页呢?现在是一次加载所有数据,请赐教,谢谢!

wdw430
15 Apr 2008, 1:39 AM
用一个Store获取服务器的所有数据,具体的分页数据可以通过getRange()获得,将获得的数据填充到另外一个Store里面,后一个Store才是放在Grid里面的。