用的是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");
{
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");
myAdapter.Fill(ds, AspNetPager1.PageSize * (AspNetPager1.当前页- 1), AspNetPager1.PageSize, "dtable");
AspNetPager1.StartRecordIndex 改为AspNetPager1.CurrentPageIndex这样改确实是正确的,不过,我记得以前 webdiyer 告诉过我,要把在 vs2003 时的什么属性改成StartRecordIndex ,我以为是改这地方,所以就这样改了,没想到竟然改错了,谢谢你们了
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<1 Then Page=1
If Page=null Then Page=1
If Page>rs.PageCount Then Page=rs.PageCount
' rs.PageCount是总页数rs.AbsolutePage=page
' 将要显示的页数If page<>1 Then
Response.Write"<a href=show.asp?page=1>第一页</a>"
Response.Write"<a href=show.asp?page="&(page-1)前一页</a>"
End If
If page<>rs.PageCount Then
Response.Write"<a href=show.asp?page="&(page+1)>后一页</a>"
Response.Write"<a href=show.asp?page="&rs.PageCount>最末页</a>"
End IfFor iPage=1 To rs.PageSize
' 显示分页
%>
<%=rs("显示字段")%>
<%rs.MoveNext
' 若到尾部则跳出
If rs.EOF Then Exit For
Next
%>
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
%>
这个方法的第二个参数值表示是从第几条记录开始填充数据,在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) 这样计算出来的值我也不知道是什么值了:)