用的是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)。当前页以1开始
    myAdapter.Fill(ds, AspNetPager1.PageSize * (AspNetPager1.当前页- 1), AspNetPager1.PageSize, "dtable");
      

  2.   

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

  3.   


    AspNetPager1.StartRecordIndex  改为AspNetPager1.CurrentPageIndex这样改确实是正确的,不过,我记得以前 webdiyer 告诉过我,要把在 vs2003 时的什么属性改成StartRecordIndex ,我以为是改这地方,所以就这样改了,没想到竟然改错了,谢谢你们了
      

  4.   

    稍候我问一下 webdiyer 到底是怎么回事,然后,结贴
      

  5.   

    <%
    page=Request.QueryString("page") 
    ' 取page值Set conn=Server.CreateObject("ADODB.Connection")
    sql="select * from table"
    Set rs=conn.Execute(sql)
    ' 在数据库中进行查询rs.PageSize=30
    ' 设置分的页数,设好后系统会自动将rs.PageCount计算出来
    If Page&lt1 Then Page=1
    If Page=null Then Page=1
    If Page&gtrs.PageCount Then Page=rs.PageCount 
    ' rs.PageCount是总页数rs.AbsolutePage=page
    ' 将要显示的页数If page<&gt1 Then
    Response.Write"&lta href=show.asp?page=1>第一页</a>"
    Response.Write"&lta href=show.asp?page="&(page-1)前一页</a>"
    End If
    If page<&gtrs.PageCount Then
    Response.Write"&lta href=show.asp?page="&(page+1)>后一页</a>"
    Response.Write"&lta href=show.asp?page="&rs.PageCount>最末页</a>"
    End IfFor iPage=1 To rs.PageSize
    ' 显示分页
    %>
    <%=rs("显示字段")%>
    <%rs.MoveNext 
    ' 若到尾部则跳出
    If rs.EOF Then Exit For
    Next
    %>
      

  6.   

    如果是sql的话
    lz是一试下面的这个
    <% 
    if Request.QueryString("PageNumber").count > 0 then 
    ' 指定页号的参数PageNumber.如果指定页号,则以指定页号为依据 
    PageNumber = Request.QueryString("PageNumber")(1)
    else
    PageNumber = 1
    ' 如没指定页号,缺省为1
    end ifRecordNumberPerPage = 10 
    ' 每页显示10条记录 set ARecordSet = Server.CreateObject("ADODB.RecordSet")
    ARecordSet.open "select * from contact1",AConnection,1
    ' 执行查询,注意Open语句中指定的第三个参数ARecordSet.PageSize = RecordNumberPerPage
    ' 指定每页记录条数 
    ARecordSet.AbsolutePage = PageNumber 
    ' 指定当前页号
    Response.Write "<br>每页有"&ARecordSet.PageSize&"条记录"
    Response.Write "<br>共有"&ARecordSet.PageCount&"页"
    Response.Write "<br>这是第"&PageNumber&"页"Response.Write "<Table border=1>"
    ' 以表格形式显示查询结果Response.Write "<TR>"
    For FieldNo = 0 to ARecordSet.Fields.count - 1 
    Response.Write "<TD>"&ARecordSet( FieldNo ).Name&"</TD>"
    Next
    Response.Write "</TR>"
    ' 显示字段名RecordCounter = 0
    Do while not ARecordSet.eof
    RecordCounter = RecordCounter + 1
    ' 显示查询if RecordCounter > RecordNumberPerPage then
    ' 如果要显示的记录数大于每页记录数目,则停止显示
    Exit do
    end if Response.Write "<TR>"
    For FieldNo = 0 to ARecordSet.Fields.count - 1 
    Response.Write "<TD>"&ARecordSet( FieldNo )&"</TD>"
    Next
    Response.Write "</TR>"
    ' 显示一条记录 ARecordSet.MoveNext
    Loop
    ' 转向下一条记录Response.Write "</Table>"if PageNumber > 1 then 
    ' 如果不是第一页,则提示上一页
    Response.Write "<p><A href = chunfeng.asp?PageNumber="&(PageNumber-1)&">[上一页]</a>"
    end ifif not ARecordSet.eof then 
    ' 如果还有记录没有显示,则提示下一页
    Response.Write "<A href = chunfeng.asp?PageNumber="&(PageNumber+1)&">[下一页]</a>"
    end ifARecordSet.close
    AConnection.close
    %>
      

  7.   

    上边的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) 这样计算出来的值我也不知道是什么值了:)
      

  8.   

    终于明白了,不过,webdiyer 说的这些我并没有在它的使用说明中看到啊,今天终于彻底会用 vs.net2005 下的 分页控件了!很高兴,谢谢大家,谢谢 webdiyer!!