SqlDataReader读取数据如何实现分页(不用DataGird)? 可以这样子for(int i=0;i<PageSize*CurrentPageSize;i++){dr.read();}... 解决方案 » 免费领取超大流量手机卡,每月29元包185G流量+100分钟通话, 中国电信官方发货 datareader不是内存中的数据库在显示完成后就消失了,无法完成分页。如果非要追求速度,可以使用sql语言的top语句。在触发分页事件时在后台数据库不停的检索“相对”靠前的数据。可以完成分页效果。 参考:解决分页的例子。使用DataSet绑定到DataList实现的。数据库使用我刚才贴的这个。 blood 发表于 5/28/2002 4:13:21 PM ASP.NET ←返回版面 [快速返回] using System;using System.Data;using System.Data.SqlClient;using System.Web;using System.Web.UI.WebControls;namespace OSLeagueForumXP.admin{ /// <summary> /// 编辑公告页面 /// </summary> public class EditBoardPage : System.Web.UI.Page { protected System.Web.UI.WebControls.HyperLink hlkPrev; protected System.Web.UI.WebControls.HyperLink hlkNext; protected System.Web.UI.WebControls.HyperLink hlkFirst; protected System.Web.UI.WebControls.HyperLink hlkEnd; protected System.Web.UI.WebControls.Label lblPage; protected System.Web.UI.WebControls.Panel pelMain; protected System.Web.UI.WebControls.Label lblMessage; protected System.Web.UI.WebControls.HyperLink hlkReturn; protected System.Web.UI.WebControls.Panel pelMessage; protected System.Web.UI.WebControls.DataList DLBoard; private void Page_Load(object sender, System.EventArgs e) { Process clsProcess = new Process(); clsProcess.Common(); const int PAGESIZE = 5; int intPageCount; int intPage; if(Request.QueryString["Page"] == null) { intPage = 1; } else { intPage = Int32.Parse(Request.QueryString["Page"]); } int intStart = (intPage - 1) * PAGESIZE; SqlDataReader SqlReader = clsProcess.GetBoardCount(); if(SqlReader.Read()) { intPageCount = (int)SqlReader["PageCount"]; } else { intPageCount = 0; } int intAllPage = (int) Math.Floor(intPageCount / PAGESIZE) + 1; DLBoard.DataSource = clsProcess.GetBoard(intStart,PAGESIZE); DLBoard.DataBind(); if(clsProcess.GetBoard(intStart,PAGESIZE).Count == 0) { lblMessage.Text = "出现错误:<font color=\"red\">没有公告,请先添加公告</font>"; hlkReturn.Text = "添加公告"; pelMain.Visible = false; pelMessage.Visible = true; } else { lblPage.Text = intAllPage.ToString() + "/" + intPage.ToString(); if(intAllPage == 1) { hlkFirst.NavigateUrl = ""; hlkPrev.NavigateUrl = ""; hlkNext.NavigateUrl = ""; hlkEnd.NavigateUrl = ""; } else if(intPage == 1) { hlkFirst.NavigateUrl = ""; hlkPrev.NavigateUrl = ""; hlkNext.NavigateUrl = "editboard.aspx?Page=" + (intPage + 1); hlkEnd.NavigateUrl = "editboard.aspx?Page=" + intAllPage; } else if(intPage == intAllPage) { hlkFirst.NavigateUrl = "editboard.aspx?Page=1"; hlkPrev.NavigateUrl = "editboard.aspx?Page=" + (intPage - 1); hlkNext.NavigateUrl = ""; hlkEnd.NavigateUrl = ""; } else { hlkFirst.NavigateUrl = "editboard.aspx?Page=1"; hlkPrev.NavigateUrl = "editboard.aspx?Page=" + (intPage - 1); hlkNext.NavigateUrl = "editboard.aspx?Page=" + (intPage + 1); hlkEnd.NavigateUrl = "editboard.aspx?Page=" + intAllPage; } } } #region Web Form Designer generated code override protected void OnInit(EventArgs e) { // // CODEGEN:该调用是 ASP.NET Web 窗体设计器所必需的。 // InitializeComponent(); base.OnInit(e); } /// <summary> /// 设计器支持所需的方法 - 不要使用代码编辑器修改 /// 此方法的内容。 /// </summary> private void InitializeComponent() { this.Load += new System.EventHandler(this.Page_Load); } #endregion }} To:ponycsdn(驰骏) 我觉得你的方法可行,我也是想结合SQL语句来实现,但不知道具体如何做,是不是还得用到ViewStat[]吧,能给个简单的例子么? IIf语句中的双引号问题 Gridview的一个问题、 如何是英文? 求助:Excel文件打开时的编码问题? asp.net调用App_code以外的类 如何实现页面的传值 numeric 怎么给datalist设定滚动时间 现在有一个问题: 刷新页面的问题? 如何给iframe控件赋值?? 为何验证控件不好使?
blood 发表于 5/28/2002 4:13:21 PM ASP.NET ←返回版面 [快速返回] using System;
using System.Data;
using System.Data.SqlClient;
using System.Web;
using System.Web.UI.WebControls;namespace OSLeagueForumXP.admin
{
/// <summary>
/// 编辑公告页面
/// </summary>
public class EditBoardPage : System.Web.UI.Page
{
protected System.Web.UI.WebControls.HyperLink hlkPrev;
protected System.Web.UI.WebControls.HyperLink hlkNext;
protected System.Web.UI.WebControls.HyperLink hlkFirst;
protected System.Web.UI.WebControls.HyperLink hlkEnd;
protected System.Web.UI.WebControls.Label lblPage;
protected System.Web.UI.WebControls.Panel pelMain;
protected System.Web.UI.WebControls.Label lblMessage;
protected System.Web.UI.WebControls.HyperLink hlkReturn;
protected System.Web.UI.WebControls.Panel pelMessage;
protected System.Web.UI.WebControls.DataList DLBoard;
private void Page_Load(object sender, System.EventArgs e)
{
Process clsProcess = new Process();
clsProcess.Common();
const int PAGESIZE = 5;
int intPageCount;
int intPage;
if(Request.QueryString["Page"] == null)
{
intPage = 1;
}
else
{
intPage = Int32.Parse(Request.QueryString["Page"]);
}
int intStart = (intPage - 1) * PAGESIZE;
SqlDataReader SqlReader = clsProcess.GetBoardCount();
if(SqlReader.Read())
{
intPageCount = (int)SqlReader["PageCount"];
}
else
{
intPageCount = 0;
}
int intAllPage = (int) Math.Floor(intPageCount / PAGESIZE) + 1;
DLBoard.DataSource = clsProcess.GetBoard(intStart,PAGESIZE);
DLBoard.DataBind();
if(clsProcess.GetBoard(intStart,PAGESIZE).Count == 0)
{
lblMessage.Text = "出现错误:<font color=\"red\">没有公告,请先添加公告</font>";
hlkReturn.Text = "添加公告";
pelMain.Visible = false;
pelMessage.Visible = true;
}
else
{
lblPage.Text = intAllPage.ToString() + "/" + intPage.ToString();
if(intAllPage == 1)
{
hlkFirst.NavigateUrl = "";
hlkPrev.NavigateUrl = "";
hlkNext.NavigateUrl = "";
hlkEnd.NavigateUrl = "";
}
else if(intPage == 1)
{
hlkFirst.NavigateUrl = "";
hlkPrev.NavigateUrl = "";
hlkNext.NavigateUrl = "editboard.aspx?Page=" + (intPage + 1);
hlkEnd.NavigateUrl = "editboard.aspx?Page=" + intAllPage;
}
else if(intPage == intAllPage)
{
hlkFirst.NavigateUrl = "editboard.aspx?Page=1";
hlkPrev.NavigateUrl = "editboard.aspx?Page=" + (intPage - 1);
hlkNext.NavigateUrl = "";
hlkEnd.NavigateUrl = "";
}
else
{
hlkFirst.NavigateUrl = "editboard.aspx?Page=1";
hlkPrev.NavigateUrl = "editboard.aspx?Page=" + (intPage - 1);
hlkNext.NavigateUrl = "editboard.aspx?Page=" + (intPage + 1);
hlkEnd.NavigateUrl = "editboard.aspx?Page=" + intAllPage;
}
}
} #region Web Form Designer generated code
override protected void OnInit(EventArgs e)
{
//
// CODEGEN:该调用是 ASP.NET Web 窗体设计器所必需的。
//
InitializeComponent();
base.OnInit(e);
}
/// <summary>
/// 设计器支持所需的方法 - 不要使用代码编辑器修改
/// 此方法的内容。
/// </summary>
private void InitializeComponent()
{
this.Load += new System.EventHandler(this.Page_Load); }
#endregion
}
}