对DataTable分页的方法?

chenger19890917 2010-11-12 09:40:15
想求教一种好的分页方法
1,sql语句有教繁琐的计算过程,使用sql分页。
2,直接得到结果集Datatable,然后使用控件内置分页。
3,把Datatable用session存储,使用手动计算方法分页。
4,使用第三方工具。
就是想寻找一种方便快捷的分页方式,请懂套路的兄弟帮个忙。
...全文
371 15 打赏 收藏 转发到动态 举报
写回复
用AI写文章
15 条回复
切换为时间正序
请发表友善的回复…
发表回复
高三石 2010-11-12
  • 打赏
  • 举报
回复
我一般都用存储过程+aspnetpager分页控件
http://www.cnblogs.com/qhnokia/archive/2010/02/04/1663497.html

set ANSI_NULLS ON
set QUOTED_IDENTIFIER ON
go
-- =============================================
-- Author: <Author,,Name>
-- Create date: <Create Date,,>
-- Description: <Description,,>
-- =============================================
CREATE PROCEDURE [dbo].[dividePage]
@tblName varchar(255), -- 表名
@strGetFields varchar(1000) = '*', -- 需要返回的列
@fldName varchar(255)='', -- 排序的字段名
@PageSize int = 10, -- 页尺寸
@PageIndex int = 1, -- 页码
@doCount bit = 0, -- 返回记录总数, 非 0 值则返回
@OrderType bit = 0, -- 设置排序类型, 非 0 值则降序
@strWhere varchar(1500) = '''' -- 查询条件 (注意: 不要加 where)
AS
declare @strSQL varchar(5000) -- 主语句
declare @strTmp varchar(110) -- 临时变量
declare @strOrder varchar(400) -- 排序类型
if @doCount != 0
begin
if @strWhere !=''''
set @strSQL = 'select count(*) as Total from'+ ' '+ @tblName + ' where' +@strWhere
else
set @strSQL = 'select count(*) as Total from ' + @tblName
end
--以上代码的意思是如果@doCount传递过来的不是0,就执行总数统计。以下的所有代码都是@doCount为0的情况:
else begin
if @OrderType != 0
begin
set @strTmp = '<(select min'
set @strOrder = ' order by '+ @fldName +' desc' --如果@OrderType不是0,就执行降序,这句很重要!
end
else
begin
set @strTmp = '>(select max'
set @strOrder = ' order by ' + @fldName +' asc'
end
if @PageIndex = 1
begin if @strWhere != ''''
set @strSQL = 'select top ' + str(@PageSize) +' '+@strGetFields+ '
from ' + @tblName + ' where ' + @strWhere + ' ' + @strOrder
else
set @strSQL = 'select top ' + str(@PageSize) +' '+@strGetFields+ '
from '+ @tblName + ' '+ @strOrder
--如果是第一页就执行以上代码,这样会加快执行速度
end
else
begin --以下代码赋予了@strSQL以真正执行的SQL代码 
set @strSQL = 'select top ' + str(@PageSize) +' '+@strGetFields+ ' from '
+ @tblName + ' where ' + @fldName + '' + @strTmp + '('+ @fldName + ')
from (select top ' + str((@PageIndex-1)*@PageSize) + ' '+ @fldName + '
from ' + @tblName + '' + @strOrder + ') as tblTmp)'+ @strOrder
if @strWhere != ''''
set @strSQL = 'select top ' + str(@PageSize) +' '+@strGetFields+ ' from ['
+ @tblName + '] where [' + @fldName + ']' + @strTmp + '(['
+ @fldName + ']) from (select top ' + str((@PageIndex-1)*@PageSize) + ' ['
+ @fldName + '] from [' + @tblName + '] where ' + @strWhere + ' '
+ @strOrder + ') as tblTmp) and ' + @strWhere + ' ' + @strOrder
end
end
print @strSQL
exec (@strSQL)
chenger19890917 2010-11-12
  • 打赏
  • 举报
回复
[Quote=引用 12 楼 dalmeeme 的回复:]
sql分页是一种比较好的方法,每次只取一页的记录(一般为几十条),效率高。如果楼主想简单点,就用MySql数据库,其支持limit关键字,比top好用。
select * from 表名 limit 0,50:取前50条记录,即第一页
select * from 表名 limit 50,50:取第二个50条记录,即第二页
非常简单。
[/Quote]
这些方法我知道,但sql有个最大的问题,就是有较为复杂的计算过程。光是要计算都要花费很长时间,然后再分页,就谈不上速度的问题了
dalmeeme 2010-11-12
  • 打赏
  • 举报
回复
sql分页是一种比较好的方法,每次只取一页的记录(一般为几十条),效率高。如果楼主想简单点,就用MySql数据库,其支持limit关键字,比top好用。
select * from 表名 limit 0,50:取前50条记录,即第一页
select * from 表名 limit 50,50:取第二个50条记录,即第二页
非常简单。
chenger19890917 2010-11-12
  • 打赏
  • 举报
回复
[Quote=引用 10 楼 flyerwing 的回复:]
还是每次少取点数据吧.
[/Quote]
你的意思是往sql方面靠近,简化sql的计算过程咯
flyerwing 2010-11-12
  • 打赏
  • 举报
回复
还是每次少取点数据吧.
chen_ya_ping 2010-11-12
  • 打赏
  • 举报
回复
使用第三方工具。
不要重复的制造轮子
网上也有很多好的分页的存储过程,楼主可以拿来使用。
zhouyongli41 2010-11-12
  • 打赏
  • 举报
回复
计算过程可以放在aspx处理吧,SQL分页就是个通用存储过程
只要把条件传递过去就行

datatable放在session要考虑数据量大不大,增加服务器端压力
session应该是安全的
  • 打赏
  • 举报
回复
而且你要知道为什么采用SQL 分页. SQL 分页 是就取你刚好要的条数, 快.
如果你一次全取出来 给sess 然后在分页 , 跟一起全出来给datagrid 让他自己分或者用第3方控件分没有区别吧

而且sess占资源很严重吧.

而且 SQL 计算条数应该快, 因为处理数据是他的强项
chenger19890917 2010-11-12
  • 打赏
  • 举报
回复
[Quote=引用 4 楼 wuhan_dotnet 的回复:]
DataTable如果数据量大,放Session就很占资源的。。
[/Quote]
嗯,这也是一个问题。请问还有好的建议没?
wuhan_dotnet 2010-11-12
  • 打赏
  • 举报
回复
DataTable如果数据量大,放Session就很占资源的。。
chenger19890917 2010-11-12
  • 打赏
  • 举报
回复
[Quote=引用 1 楼 zhouyongli41 的回复:]
做好了当然就快捷了,就是调用而以

而是要看哪个适用你
[/Quote]
比如sql分页,但是如果sql有大量的计算过程,那么你这个分页是没有意义的。
把DataTable放在Session中是否安全?
rwdong2199 2010-11-12
  • 打赏
  • 举报
回复

学习学习,一直都只用第三方控件来分页
zhouyongli41 2010-11-12
  • 打赏
  • 举报
回复
做好了当然就快捷了,就是调用而以

而是要看哪个适用你

62,046

社区成员

发帖
与我相关
我的任务
社区描述
.NET技术交流专区
javascript云原生 企业社区
社区管理员
  • ASP.NET
  • .Net开发者社区
  • R小R
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告

.NET 社区是一个围绕开源 .NET 的开放、热情、创新、包容的技术社区。社区致力于为广大 .NET 爱好者提供一个良好的知识共享、协同互助的 .NET 技术交流环境。我们尊重不同意见,支持健康理性的辩论和互动,反对歧视和攻击。

希望和大家一起共同营造一个活跃、友好的社区氛围。

试试用AI创作助手写篇文章吧