使用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  

解决方案 »

  1.   

    cmd.Parameters.Add("@pagesize", 6); =========>应该改为:
    cmd.Parameters.Add("@pagesize", pager.PageSize); 
      

  2.   

    尝试过改成cmd.Parameters.Add("@pagesize", pager.PageSize); 但是效果相同,不知道为什么?
      

  3.   

    抱歉,理解错了,还以为是改变了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 
      

  4.   

    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 这两个要一致,条件、排序字段!