打开APP
userphoto
未登录

开通VIP,畅享免费电子书等14项超值服

开通VIP
cxGrid分页问题
3楼 youzi1221 2008-02-24 17:45发表 [回复]
设置DataController的GirdMode=True,分页问题解决了,但这样处理后,cxGrid又不好用了,Title不能排序,滚动时当前记录移动了
2楼 youzi1221 2008-02-24 17:23发表 [回复] [引用] [举报]
终于找到方法了,我用的是,设置DataController的GirdMode=True,GridModeBufferCount=记录数
1、cxGrid-datacontroller-datamodecontroller-GridMode := true
2、在设置GridModeBufferCount:=10
3、cxGrid1DBTableView1.OptionsView.ScrollBars设为 ssHorizontal
这个我做过,而且是千万级别的,对于如此大级别的分页,只有一种方法而且是最终方法,也是比较简单的方法,那就是存储过程分页,需要在界面上放置翻页的按钮
下面把我的通用翻页存储过程贴出来:
SQL code
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
--通用分页存储过程
Create  PROCEDURE [dbo].[GetRecordFromPage]
@tblName      varchar(255),       -- 表名
@fldName      varchar(255)='AutoID',       --关键字段名
@PageSize     int = 10,           -- 页尺寸
@PageIndex    int = 1,            -- 页码
@IsCount      bit = 0,            -- 返回记录总数, 非 0 值则返回
@OrderType    bit = 0,            -- 设置排序类型, 非 0 值则降序
@strWhere     varchar(1000) = '',  -- 查询条件 (注意: 不要加 where)
@RecordCount int output        --总记录数
AS
declare @ss nvarchar(4000)
if @strWhere != ''
set @ss = 'select @RecordCount=count(*) from ' + @tblName + ' where ' + @strWhere
else
set @ss = 'select @RecordCount=count(*) from ' + @tblName
--print @ss
exec sp_executesql @ss,N'@RecordCount Int out',@RecordCount OutPut
declare @strSQL   varchar(6000)       -- 主语句
declare @strTmp   varchar(500)        -- 临时变量
declare @strOrder varchar(400)        -- 排序类型
declare @strOrderw varchar(400)        -- 排序类型
-- 如果是查询记录总数,直接使用Count(0)函数
set @strOrderw= ' order by [' + @fldName +'] '
if @IsCount != 0
begin
if @strWhere != ''
set @strSQL = 'select count(*) as Total from ' + @tblName + ' where ' + @strWhere
else
set @strSQL = 'select count(*) as Total from ' + @tblName
end
--如果是想查询记录,则
else
begin
if @PageIndex = 1
begin
set @strTmp = ''
--如果是降序查询……
if @OrderType != 0
begin
set @strOrder = ' order by [' + @fldName +'] desc'
end
--如果是升序查询……
else
begin
set @strOrder = ' order by [' + @fldName +'] asc'
end
if @strWhere != ''
set @strTmp = ' where ' + @strWhere
set @strSQL = 'select top ' +cast(@PageSize as varchar)+ ' * from '+@tblName+@strTmp+' '+@strOrder
end
else
begin
declare @topTmp varchar(100)
--如果是降序查询……
if @OrderType != 0
begin
set @strTmp = '>=(select min'
set @strOrder = ' order by [' + @fldName +'] desc'
set @topTmp= cast((@PageIndex*@PageSize) as varchar)
end
--如果是升序查询……
else
begin
set @strTmp = '>(select max'
set @strOrder = ' order by [' + @fldName +'] asc'
set @topTmp= cast((@PageIndex*@PageSize-@PageSize) as varchar)
end
if @strWhere != ''
set @strSQL = 'select top ' + str(@PageSize) + ' * from '
+ @tblName + ' where [' + @fldName + ']' + @strTmp + '(['
+ @fldName + ']) from (select top ' +@topTmp+ ' ['
+ @fldName + '] from ' + @tblName + ' where ' + @strWhere + ' '
+ @strOrder + ') as tblTmp) and ' + @strWhere + ' ' + @strOrderw
else
set @strSQL = 'select top ' + str(@PageSize) + ' * from '
+ @tblName + ' where [' + @fldName + ']' + @strTmp + '(['
+ @fldName + ']) from (select top ' +@topTmp+ ' ['
+ @fldName + '] from ' + @tblName +  @strOrder + ') as tblTmp)'
+ @strOrderw
end
end
--print @strSQL
cxGrid滚动Bug和数据分页的解决办法
分类: Dev Express控件组2008-02-24 02:28 1886人阅读 评论(6) 收藏 举报
sql框架编程工作
使用SQL进行数据分页时,需要用数据集的滚动事件进行读包。而表格控件在设置数据源、其数据集状态改变时都会产生滚动事件。
下面我就cxGrid的滚动事件的处理及产生始末讲解一下:
进行SQL数据分页时,都是在滚动事件中判断记录是否到了最后一条,如果是则读下一个分页。此一分页的数据需要显示到到cxGrid中,因此读的时候又产生了滚动事件,也一定读到最后一条~如此又触发读包SQL......由此一直循环到读出所有数据,这使得数据分页的意义全无,而且~如果分页数据是主表,且存在从表,那我们程序就失去了响应。
在前一家公司工作时,开发组长对这个问题都没找到比较好的解决方案,只能强迫用户使用按钮来明确的显示调用读包操作!我对cxGrid研究很久,希望有一个简单的设置表格的属性来解决这一问题,但一无所获。上大富翁和CSDN提问都没人回答得了!最后想到一个笨拙但简单的方法:用标志变量配合用户操作事件解决了这个问题!
首先在数据处理类中加一标志变量,表示刚刚读了一个分页与否,并将其用可写属性导出;当滚动到最后一条记录时,判断此标志,不为真才读包;读取一个包后就设置此标志为真。其次在表格的键盘和鼠标事件中将该标志置为假。
怎么样,够简单的吧!此解决方案完美解决了上述问题及Bug,在公司的开发框架中运行表现良好!但我还是觉得有些烦琐,希望与同行切磋。
Xinggsf#t o m.c o m   # -> @  请注明技术或编程主题!
本站仅提供存储服务,所有内容均由用户发布,如发现有害或侵权内容,请点击举报
打开APP,阅读全文并永久保存 查看更多类似文章
猜你喜欢
类似文章
【热】打开小程序,算一算2024你的财运
实现千万级数据分页的存储过程!《
[百万级]通用分页存储过程.[千万级]实现千万级数据的分页显示! - SQL Server - 数据库开发 - 大家论坛 - Powered by Discuz!
实现千万级数据的分页显示!
sql分页存储过程
动软使用心得
sql 优化之:实现小数据量和海量数据的通用分页显示存储过程(系列四)
更多类似文章 >>
生活服务
热点新闻
分享 收藏 导长图 关注 下载文章
绑定账号成功
后续可登录账号畅享VIP特权!
如果VIP功能使用有故障,
可点击这里联系客服!

联系客服