对DATAGRID与DATALIST分页的一点见解.

ykwang 2004-03-24 09:01:43
我是一个初学者,我只是觉得如下的分页方法比较简便.如果我的方法不好的话,不要笑话.

我刚学ASP.NET,现在自己的感觉是在ASP.NET中保存变量最好的方法是用控件,如LABEL控件.
DATAGRID中分页的方法是将数据一次性进入DATASET中,然后每次第几页第几页时再选取绑定.

我是这样做分页的.
我用四个LABEL控件.
LAB1 保存总数量
LAB2 保存每页数量
LA3 保存总页数
LA4 保存当前页

代码如下:
Dim ds As DataSet
Dim ConnectionString As SqlConnection = New SqlConnection(System.Configuration.ConfigurationSettings.AppSettings("ConnectionString"))
Dim rsda As SqlDataAdapter
DIM SQLLJ AS STRING 'SQL语句
DIM COUNTBB AS STRING '计算页面

PAGE_LOAD中
IF PAGE.ISPOSBACK=FALSE THEN
LA2.TEXT=20 '每页显示20条记录
RSDA=NEW SQLDATAADAPTER ("SELECT COUNT(统计字段) AS COUNTA FROM 表名",CONNECTIONSTRING)
DS=NEW DATASET
RSDA.FILL (DS,"ABCD")
IF DS.TABLE ("ABCD").ROWS(0).ITEM("COUNTA")<>"0" THEN
LA1.TEXT=DS.TABLE ("ABCD").ROWS(0).ITEM("COUNTA")
IF LA1.TEXT /LA2.TEXT=0 THEN
LA3.TEXT=LA1.TEXT/LA2.TEXT
ELSE
LA3.TEXT=INT(LA1.TEXT/LA2.TEXT)+1
ENDIF
LA4.TEXT='1' 第一页
PAGEFIND()

ENDIF


定义一个通用过程
PRIVATE SUB PAGEFIND()
SJJS=LA4.TEXT*LA2.TEXT -LA2.TEXT '只取每页所需数据
SQLLJ="SELECT TOP "&LA2.TEXT "字段,IDENTITYCOL(代表唯一字段) AS IDEN FROM 表名 WHERE IDENTITYCOL NOT IN (SELECT TOP "&SJJS &" IDENTITYCOL FROM 表名"
DS=NEW DATASET
RSDA.FILL(DS,"ABCD")
绑定
END PRIVATE

ENDIF


然后在加入 四个LINKBUTTON控件分页是 首页 上一页 下一页 尾页,其它需要的话可以自己加
现在只要在首页上输入
LA4.TEXT='1' '设为第一页
PAGEFIND()
就可以了

上一页的话只要
IF VAL(LA4.TEXT)<="1" THEN
LA4.TEXT="1"
ELSE
LA4.TEXT=LA4.TEXT-1
ENDIF
PAGEFIND()

下一页
IF VAL(LA4.TEXT)>=VAL(LA3.TEXT) THEN
LA4.TEXT=LA3.TEXT
ELSE
LA4.TEXT=LA4.TEXT+1
ENDIF
PAGEFIND()

尾页
LA4.TEXT=LA3.TEXT
PAGEFIND()

这样分页就完成了.
而且当数据量大的时候,速度也比DATAGRID分页快.
谢谢指点.
...全文
95 1 打赏 收藏 转发到动态 举报
写回复
用AI写文章
1 条回复
切换为时间正序
请发表友善的回复…
发表回复
athossmth 2004-03-24
  • 打赏
  • 举报
回复
你这样做是把工作量从Application 转移到了SQL SERVER上而已,那种效果好要看实际需求。

62,046

社区成员

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

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

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

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