当前位置: 代码迷 >> ASP.NET >> 100 分! 在vs2005 下应用 webdiyer 的分页控件,不用存储过程,只是 sql 语句方法,为什么分页后数据不连续,请看.解决方法
  详细解决方案

100 分! 在vs2005 下应用 webdiyer 的分页控件,不用存储过程,只是 sql 语句方法,为什么分页后数据不连续,请看.解决方法

热度:9109   发布时间:2013-02-26 00:00:00.0
100 分!! 在vs2005 下应用 webdiyer 的分页控件,不用存储过程,只是 sql 语句方法,为什么分页后数据不连续,请看...


用的是webdiyer.com   网站上下载的最新的   vs.net2005下的分页控件。

我用的是普通的   sql   语句方法:

if   (!IsPostBack)
{
      string   sqlcount   =   "select   count(ID)   from   NewsTable ";
      //略
      int   totalOrders   =   (int)mycomm.ExecuteScalar();
      AspNetPager1.RecordCount   =   totalOrders;
      //以上取得分页的数据总数是没问题的,是正确的

      BindData();
}

public   void   BindData()
{
      string   sql   =   "select   *   from   NewsTable ";  
//略去声明myAdapter   和   DataSet  
//以下是填充数据方法
  myAdapter.Fill(ds,   AspNetPager1.PageSize   *   (AspNetPager1.StartRecordIndex   -   1),   AspNetPager1.PageSize,   "dtable ");


this.Repeater1.DataSource   =   ds.Tables[0].DefaultView;
this.Repeater1.DataBind();
}


  protected   void   AspNetPager1_PageChanged(object   sender,   EventArgs   e)
  {
        BindData();

  }

以上方法分页后,页面上的数据两页之间不连续,后面的许多页没有数据,我怀疑是不是这个地方出错了

  myAdapter.Fill(ds,   AspNetPager1.PageSize   *   (AspNetPager1.StartRecordIndex   -   1),   AspNetPager1.PageSize,   "dtable ");



------解决方案--------------------------------------------------------
计算起始位置错误,应该是=每页数量*(当前页数-1)。当前页以1开始
myAdapter.Fill(ds, AspNetPager1.PageSize * (AspNetPager1.当前页- 1), AspNetPager1.PageSize, "dtable ");


------解决方案--------------------------------------------------------
myAdapter.Fill(ds, AspNetPager1.PageSize * (AspNetPager1.StartRecordIndex - 1), AspNetPager1.PageSize, "dtable ");

AspNetPager1.StartRecordIndex 改为AspNetPager1.CurrentPageIndex
------解决方案--------------------------------------------------------
上边的greenery(greenery)和rony2006() 说的是正确的,myAdapter.Fill(ds, AspNetPager1.PageSize * (AspNetPager1.StartRecordIndex - 1), AspNetPager1.PageSize, "dtable ");
这个方法的第二个参数值表示是从第几条记录开始填充数据,在AspNetPager 6.0中新增了一个属性StartRecordIndex就是当前页起始记录的索引,不过这个值是从1开始的,而上面的Fill方法的第二个参数的值是从0开始的,所以要用StartRecordIndex属性的话,上面的代码正确写应该是:
myAdapter.Fill(ds, AspNetPager1.StartRecordIndex - 1, AspNetPager1.PageSize, "dtable ");

或者:
myAdapter.Fill(ds, AspNetPager1.PageSize * (AspNetPager1.CurrentPageIndex - 1), AspNetPager1.PageSize, "dtable ");

我没有说过6.0版中把什么属性改成StartRecordIndex了啊,这个属性的新增的,看源代码就可以看到,它只有一个get访问器:
public int StartRecordIndex
{
get
{
return (CurrentPageIndex - 1) * PageSize + 1;
}
}
它的值就是(CurrentPageIndex - 1) * PageSize + 1,就是当前页的起始记录编号,如果用楼主的方法,AspNetPager1.PageSize * (AspNetPager1.StartRecordIndex - 1) 这样计算出来的值我也不知道是什么值了:)
  相关解决方案