分页页数太多怎么处理?

我写了一个分页实现的结果如下是一个表格======================================================当前第1页请选择:123... 我写了一个分页 实现的结果如下
是一个表格
======================================================
当前 第 1 页 请选择:1 2 3 4 5 6 7 8 9 上页 下页 末页
======================================================
10页以内还行可是页数太多就会把这个表格挤的变形!就会出现这样的效果
前 第 1 页 请选择: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 上页 下页 末页 首页
我的代码如下(代码太多只贴出来部分)
====================================
(查询数据库代码省略)
if not rs.bof=true and not rs.eof=true then
page_size=5
if request.querystring("page_no")="" or request.querystring("page_no")=0 then
page_no=1
else
page_no=cint(request.querystring("page_no"))
end if
rs.pagesize=page_size
page_total=rs.pagecount
rs.absolutepage=page_no
i=page_size
while rs.eof=false and i>0
i=i-1
a=rs(3)
(显示信息代码省略)
rs.movenext
wend
end if
'以下开始分页
response.Write "<table width='100%' border='0' align='center' cellpadding='0' cellspacing='0'><tr>"
response.Write"<td width='18%'><div align='center'>当前 第 <font color='#FF6600'>" & page_no &"</font> 页</div></td>"
for i=1 to page_total
if i=page_no then
response.Write "<td width='50'>请选择:" & i &"" & "  </td>"
else
response.Write "<td width='60%' ><a href='Map_Down_List.asp?page_no="& i &"'>" &i&"</a>  </td>"
end if
end if
next
if page_no=1 then
response.Write "<td valign='top' width='30'>上页" & " </td>"
else
response.write "<td valign='top' width='30'><a href='Map_Down_List.asp?page_no="& page_no-1 &"'>上页" & "  </a></td>"
end if
if page_no=rs.pagecount then
response.write "<td valign='top' width='30'>下页</td>"
else
response.write "<td valign='top' width='30'><a href='Map_Down_List.asp?page_no="& page_no+1 &"'>下页" & " </a></td>"
end if
response.Write "<td valign='top' width='30'><a href='Map_Down_List.asp?page_no="&rs.pagecount&"'>末页</a></td> "
response.Write "<td valign='top' width='30'><a href='Map_Down_List.asp?page_no=1'> 首页</a></td> "
response.Write "</td> </tr></table>"
没明白~请详细说明一下好吗?我还是个新手!!

意思是不是!!我不用123456789页这样的排列方式
而用个文本框
用户自己输入想进入到哪页??
展开
 我来答
匿名用户
推荐于2016-03-29
展开全部
  分页存储过程如果按主键来排序,速度还是比较快的,但是如果按照LIKE条件查询字符串,那速度会下降很多,排序字段是个非常关键的因素,提供一个存储过程,调用这个存储赛程就可以了,参考如下:
CREATE PROC proc_pageview
@tbname sysname, --要分页显示的表名
@FieldKey nvarchar(1000), --用于定位记录的主键(惟一键)字段,可以是逗号分隔的多个字段
@PageCurrent int=1, --要显示的页码
@PageSize int=10, --每页的大小(记录数)
@FieldShow nvarchar(1000)='', --以逗号分隔的要显示的字段列表,如果不指定,则显示所有字段
@FieldOrder nvarchar(1000)='', --以逗号分隔的排序字段列表,可以指定在字段后面指定DESC/ASC
@Where varchar(1000)='', --查询条件
@RecordCount int OUTPUT --总页数
AS
SET NOCOUNT ON
--检查对象是否有效
IF OBJECT_ID(@tbname) IS NULL
BEGIN
RAISERROR(N'对象"%s"不存在',1,16,@tbname)
RETURN
END
IF OBJECTPROPERTY(OBJECT_ID(@tbname),N'IsTable')=0
AND OBJECTPROPERTY(OBJECT_ID(@tbname),N'IsView')=0
AND OBJECTPROPERTY(OBJECT_ID(@tbname),N'IsTableFunction')=0
BEGIN
RAISERROR(N'"%s"不是表、视图或者表值函数',1,16,@tbname)
RETURN
END

--分页字段检查
IF ISNULL(@FieldKey,N'')=''
BEGIN
RAISERROR(N'分页处理需要主键(或者惟一键)',1,16)
RETURN
END

--其他参数检查及规范
IF ISNULL(@PageCurrent,0)<1 SET @PageCurrent=1
IF ISNULL(@PageSize,0)<1 SET @PageSize=10
IF ISNULL(@FieldShow,N'')=N'' SET @FieldShow=N'*'
IF ISNULL(@FieldOrder,N'')=N''
SET @FieldOrder=N''
ELSE
SET @FieldOrder=N'ORDER BY '+LTRIM(@FieldOrder)
IF ISNULL(@Where,N'')=N''
SET @Where=N''
ELSE
SET @Where=N'WHERE ('+@Where+N')'

--如果@PageCount为NULL值,则计算总页数(这样设计可以只在第一次计算总页数,以后调用时,把总页数传回给存储过程,避免再次计算总页数,对于不想计算总页数的处理而言,可以给@PageCount赋值)
IF @RecordCount IS NULL
BEGIN
DECLARE @sql nvarchar(4000)
SET @sql=N'SELECT @RecordCount=COUNT(*)'
+N' FROM '+@tbname
+N' '+@Where
EXEC sp_executesql @sql,N'@RecordCount int OUTPUT',@RecordCount OUTPUT
END

--计算分页显示的TOPN值
DECLARE @TopN varchar(20),@TopN1 varchar(20)
SELECT @TopN=@PageSize,
@TopN1=(@PageCurrent-1)*@PageSize

--第一页直接显示
IF @PageCurrent=1
EXEC(N'SELECT TOP '+@TopN
+N' '+@FieldShow
+N' FROM '+@tbname
+N' '+@Where
+N' '+@FieldOrder)
ELSE
BEGIN
--处理别名
IF @FieldShow=N'*'
SET @FieldShow=N'a.*'

--生成主键(惟一键)处理条件
DECLARE @Where1 nvarchar(4000),@Where2 nvarchar(4000),
@s nvarchar(1000),@Field sysname
SELECT @Where1=N'',@Where2=N'',@s=@FieldKey
WHILE CHARINDEX(N',',@s)>0
SELECT @Field=LEFT(@s,CHARINDEX(N',',@s)-1),
@s=STUFF(@s,1,CHARINDEX(N',',@s),N''),
@Where1=@Where1+N' AND a.'+@Field+N'=b.'+@Field,
@Where2=@Where2+N' AND b.'+@Field+N' IS NULL',
@Where=REPLACE(@Where,@Field,N'a.'+@Field),
@FieldOrder=REPLACE(@FieldOrder,@Field,N'a.'+@Field),
@FieldShow=REPLACE(@FieldShow,@Field,N'a.'+@Field)
SELECT @Where=REPLACE(@Where,@s,N'a.'+@s),
@FieldOrder=REPLACE(@FieldOrder,@s,N'a.'+@s),
@FieldShow=REPLACE(@FieldShow,@s,N'a.'+@s),
@Where1=STUFF(@Where1+N' AND a.'+@s+N'=b.'+@s,1,5,N''),
@Where2=CASE
WHEN @Where='' THEN N'WHERE ('
ELSE @Where+N' AND ('
END+N'b.'+@s+N' IS NULL'+@Where2+N')'
--执行查询
EXEC(N'SELECT TOP '+@TopN
+N' '+@FieldShow
+N' FROM '+@tbname
+N' a LEFT JOIN(SELECT TOP '+@TopN1
+N' '+@FieldKey
+N' FROM '+@tbname
+N' a '+@Where
+N' '+@FieldOrder
+N')b ON '+@Where1
+N' '+@Where2
+N' '+@FieldOrder)
END

GO
百度网友9dd5ebf66d5
推荐于2018-04-10 · TA获得超过4654个赞
知道大有可为答主
回答量:3723
采纳率:0%
帮助的人:0
展开全部
判断用户当前页 ... 假设为变量 CurrentPage ...

然后算出 CurrentPage - 2 和 CurrentPage + 2 ...

用一个 for 循环只显示当前五页 ...

假设当前页是 4 ...

结果是这样的 ... 2 3 4 5 6 ...
本回答被提问者和网友采纳
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
123190881
2006-10-16 · TA获得超过998个赞
知道小有建树答主
回答量:1143
采纳率:0%
帮助的人:718万
展开全部
分页太多可是改成上一页下一页在加个定位到 第N页

燕子说的那个页比较实用
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
收起 1条折叠回答
推荐律师服务: 若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询

为你推荐:

下载百度知道APP,抢鲜体验
使用百度知道APP,立即抢鲜体验。你的手机镜头里或许有别人想知道的答案。
扫描二维码下载
×

类别

我们会通过消息、邮箱等方式尽快将举报结果通知您。

说明

0/200

提交
取消

辅 助

模 式