首页 新闻 论坛 群组 Blog 文档 下载 读书 Tag 网摘 搜索 .NET Java 游戏 视频 人才 外包 培训 数据库 书店 程序员
中国软件网
欢迎您:游客 | 登录 注册 帮助
  • AspNetPage控件的pagesize的问题? [已结贴,结贴人:Lib_LH]
    进入用户个人空间
    加为好友
    发送私信
    在线聊天
    发表于:2008-06-17 15:38:28 楼主
      使用AspNetPage控件,翻页成功,但是每个分页显示的pagesize不同,例如:设置pagesize为6,则分页显示为4或5;具体的代码如下:
      protected void Page_Load(object sender, EventArgs e)
      {
        if (!Page.IsPostBack)
        {
          int totalOrders = (int)SqlHelper.ExecuteScalar (CommandType.StoredProcedure,"B_GetOrderNumber");
          pager.RecordCount = totalOrders;
          BindData();         
        }
      }
      void BindData()
      {
        cmd = new SqlCommand("Blog_Article_GetPaged", conn);
        cmd.CommandType = CommandType.StoredProcedure;
        cmd.Parameters.Add("@pageindex", pager.CurrentPageIndex);
        cmd.Parameters.Add("@pagesize", 6);
        Repeater rpt1 = (Repeater)UpdatePanel1.FindControl("repeater1");
        conn.Open();
        rpt1.DataSource = cmd.ExecuteReader();
        rpt1.DataBind();
        conn.Close();
      }

    存储过程为:
    CREATE PROCEDURE B_GetOrderNumber
    AS
    select count(*) from Blog_Article where Type <>'文章点评';

    RETURN
    Go
    //--------------------------------------------------------------------------------------------------//
    CREATE procedure Blog_Article_GetPaged
    (@pagesize int,
    @pageindex int
    )
    as
    set nocount on
    begin
    declare @indextable table(id int identity(1,1),nid int)
    declare @PageLowerBound int
    declare @PageUpperBound int
    set @PageLowerBound=(@pageindex-1)*@pagesize
    set @PageUpperBound=@PageLowerBound+@pagesize
    set rowcount @PageUpperBound
    insert into @indextable(nid) select ArticleNumber from Blog_Article order by Create_date desc
    select O.ArticleNumber,O.Title,SUBSTRING(O.Content,0,20) as Content,O.Type,O.Status from Blog_Article O,@indextable t  where O.Type <>'文章点评' and O.ArticleNumber=t.nid
    and t.id>@PageLowerBound and t.id <=@PageUpperBound order by t.id  ,O.Create_date desc
    end
    set nocount off
    GO

     
    100  修改 删除 举报 引用 回复
    进入用户个人空间
    加为好友
    发送私信
    在线聊天
    发表于:2008-06-17 16:07:021楼 得分:0

    建议你把 电脑重启一下。
    修改 删除 举报 引用 回复
    进入用户个人空间
    加为好友
    发送私信
    在线聊天
    发表于:2008-06-17 16:29:462楼 得分:0
    修改 删除 举报 引用 回复
    进入用户个人空间
    加为好友
    发送私信
    在线聊天
    发表于:2008-06-17 16:32:373楼 得分:0
    没发现有什么错误
    修改 删除 举报 引用 回复
    进入用户个人空间
    加为好友
    发送私信
    在线聊天
    发表于:2008-06-17 17:06:034楼 得分:0
    cmd.Parameters.Add("@pagesize", 6);

    =========>

    应该改为:
    cmd.Parameters.Add("@pagesize", pager.PageSize);
    修改 删除 举报 引用 回复
    进入用户个人空间
    加为好友
    发送私信
    在线聊天
    发表于:2008-06-17 20:55:525楼 得分:0
    尝试过改成cmd.Parameters.Add("@pagesize", pager.PageSize); 但是效果相同,不知道为什么?
    修改 删除 举报 引用 回复
    进入用户个人空间
    加为好友
    发送私信
    在线聊天
    发表于:2008-06-17 21:48:236楼 得分:100
    抱歉,理解错了,还以为是改变了PageSize后每页的记录数仍然是6条,楼主的意思是设置PageSize为6时一页显示的不够6条记录对吗?从你的存储过程中可以看出来这个问题的原因,就是你向表变量中插入ArticleNumber时没有设置条件( Type <>'文章点评' ),而取数据时取设置了,就就导致插入的数据并不是所有符合条件的记录,不符合条件的记录就被过滤掉了,但因为取记录是通过连续的编号实现的,比如从6到11这六条记录却只有四条符合条件的记录被选出来,这就是为什么会出现每页记录时多时少的原因,解决的办法是:在把ArticleNumber插入表变量之前设置查询条件,而不是取数据时设置,也就是存储过程改为这样:

    CREATE procedure Blog_Article_GetPaged
    (@pagesize int,
    @pageindex int
    )
    as
    set nocount on
    begin
    declare @indextable table(id int identity(1,1),nid int)
    declare @PageLowerBound int
    declare @PageUpperBound int
    set @PageLowerBound=(@pageindex-1)*@pagesize
    set @PageUpperBound=@PageLowerBound+@pagesize
    set rowcount @PageUpperBound
    insert into @indextable(nid) select ArticleNumber from Blog_Article where Type <>'文章点评'  order by Create_date desc
    select O.ArticleNumber,O.Title,SUBSTRING(O.Content,0,20) as Content,O.Type,O.Status from Blog_Article O,@indextable t  where O.ArticleNumber=t.nid
    and t.id>@PageLowerBound and t.id <=@PageUpperBound order by t.id  ,O.Create_date desc
    end
    set nocount off
    GO
    修改 删除 举报 引用 回复
    进入用户个人空间
    加为好友
    发送私信
    在线聊天
    发表于:2008-06-17 21:55:077楼 得分:0
    insert into @indextable(nid) select ArticleNumber from Blog_Article order by Create_date desc

    select O.ArticleNumber,O.Title,SUBSTRING(O.Content,0,20) as Content,O.Type,O.Status from Blog_Article O,@indextable t  where O.Type <>'文章点评' and O.ArticleNumber=t.nid
    and t.id>@PageLowerBound and t.id <=@PageUpperBound order by t.id  ,O.Create_date desc

    这两个要一致,条件、排序字段!
    修改 删除 举报 引用 回复

    网站简介广告服务网站地图帮助联系方式诚聘英才English 问题报告
    北京创新乐知广告有限公司 版权所有 京 ICP 证 070598 号
    世纪乐知(北京)网络技术有限公司 提供技术支持
    Copyright © 2000-2008, CSDN.NET, All Rights Reserved