c#winform程序实现分页功能

纯新手,以下文章只为整理思路,记录一下。

思路如下:
1.在数据库中创建一个可以得到一定量数据的存储过程。
2.在winform应用程序下调用它,得到这个数据集,调用数据集,用代码根据数据自动生成控件。

第一步 创建储存过程

创建储存过程
加一个小判断方便重复生成

if exists(select * from sysobjects where name='pro_getdata')
drop procedure pro_getdata
go
create proc pro_getdata

首先先要声明3个变量:
pageCurrent(用于储存当前用户选择页)
pageSize(规定每页有多少条数据)
pageCount(用于储存总页数,这是一个输出参数)

@pageCurrent int,--当前页数
@pageSize int,--每页的大小
@pageCount int out--总页数 输出参数

然后给pageCount总页数赋值。
先用select获取到表中的总行数付给pagecount
再将,总行数/=每页的大小
就能够得到总页数了

select @pageCount=count(*) from Books
set @pageCount/=20

好了,就剩下最后一步获取数据了。
首先我们,我们获取数据的话,肯定不能全部一次性,全部获取。必须分批次获取,才对,那么就会存在一个上限值和一个下限值。
但是,直接用主键的话会有一些问题,而且我们得考虑到数据丢失的问题。
如果某一页需要20条数据才能算一页,假如先提取范围规定到1-20的二十条数据,而第15条数据被删除的话,用主键获取的数据将会只有19条,明显没有满足这个每页有20条数据要求。
所以在这里可以用到 ROW_NUMBER()这个排序函数就解决这个问题

select ROW_NUMBER() over(order by 主键名) from 表名

剩下 的就简单了,我们只需要将ROW_NUMBER()函数获取到的列做为查询数据的条件就ok了

select a.row,a.Title,a.Author,a.UnitPrice from (
select ROW_NUMBER() over(order by Id) as row,* from Books) as a where a.row between 1 and 20

当然,上面只是获取1到20的数据集,我们还得根据用户选择的当前页来得到数据。

select a.row,a.Title,a.Author,a.UnitPrice from (
select ROW_NUMBER() over(order by Id) as row,* from Books) as a where a.row between (@pageCurrent-1)*@pageSize+1 and (@pageCurrent*@pageSize)

结合起来就是

if(@pageCurrent=1)
begin
     select a.row,a.Title,a.Author,a.UnitPrice from (
select ROW_NUMBER() over(order by Id) as row,* from Books) as a where a.row between 1 and 20
end
else
begin
    select a.row,a.Title,a.Author,a.UnitPrice from (
select ROW_NUMBER() over(order by Id) as row,* from Books) as a where a.row between (@pageCurrent-1)*@pageSize+1 
  • 7
    点赞
  • 26
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值