大家好!现在我遇到一个问题,我用下面的方式读取了每页三条记录!在页面上就只是显示三条记录!我想有“首页,上一页,下一页,未页等”这些来操作数据!请问我现在在这个基础上还要添加什么啊!我前台什么代码都没有写!麻烦大家了!!一直都在线上!
protected void Page_Load(object sender, EventArgs e)
{
string str = "Data Source=.\\SQLEXPRESS;AttachDbFilename=|DataDirectory|\\Fom1.mdf;Integrated Security=True;User Instance=True";
int currentIndex = 0;
int pagesize = 3;
SqlConnection sql = new SqlConnection(str);
string STR="select * from menu order by Id";
SqlDataAdapter da = new SqlDataAdapter(STR, sql);
DataSet ds = new DataSet();
da.Fill(ds,currentIndex, pagesize ,"menu");
DataTable dt = ds.Tables[0];
Response.Write("<table><tr><td></td><td></td></tr>");
foreach (DataRow dr in dt.Rows)
{
Response.Write("<tr>");
foreach (DataColumn dc in dt.Columns)
{
Response.Write("<td>" + dr[dc] + "</td>");
}
Response.Write("</tr>");
}
Response.Write("</table>"); }
protected void Page_Load(object sender, EventArgs e)
{
string str = "Data Source=.\\SQLEXPRESS;AttachDbFilename=|DataDirectory|\\Fom1.mdf;Integrated Security=True;User Instance=True";
int currentIndex = 0;
int pagesize = 3;
SqlConnection sql = new SqlConnection(str);
string STR="select * from menu order by Id";
SqlDataAdapter da = new SqlDataAdapter(STR, sql);
DataSet ds = new DataSet();
da.Fill(ds,currentIndex, pagesize ,"menu");
DataTable dt = ds.Tables[0];
Response.Write("<table><tr><td></td><td></td></tr>");
foreach (DataRow dr in dt.Rows)
{
Response.Write("<tr>");
foreach (DataColumn dc in dt.Columns)
{
Response.Write("<td>" + dr[dc] + "</td>");
}
Response.Write("</tr>");
}
Response.Write("</table>"); }
public partial class DynamicControl : System.Web.UI.Page
{
protected void Page_Load(object sender, EventArgs e)
{
string str = "Data Source=.\\SQLEXPRESS;AttachDbFilename=|DataDirectory|\\Fom1.mdf;Integrated Security=True;User Instance=True"; int currentIndex;
if (Request.QueryString["pageIndex"] == null)
{
currentIndex = 0;
}
else
{
currentIndex = Convert.ToInt32(Request.QueryString["pageIndex"]);
}
int pagesize = 3;
SqlConnection sql = new SqlConnection(str);
string STR = "select * from stu order by id";
SqlDataAdapter da = new SqlDataAdapter(STR, sql);
DataSet ds = new DataSet();
da.Fill(ds, currentIndex*pagesize, pagesize, "menu");
DataTable dt = ds.Tables[0];
Response.Write("<table><tr><td></td><td></td></tr>");
foreach (DataRow dr in dt.Rows)
{
Response.Write("<tr>");
foreach (DataColumn dc in dt.Columns)
{
Response.Write("<td>" + dr[dc] + "</td>");
}
Response.Write("</tr>");
}
if (dt.Rows.Count < pagesize)
{
Response.Write("<tr><td>下一页</td></tr>");
}
else
{
Response.Write("<tr><td><a href = 本页面.aspx?pageIndex=" + (currentIndex + 1).ToString() + ">下一页</a></td></tr>");
}
Response.Write("</table>");
using System;
using System.Data;
using System.Configuration;
using System.Web;
using System.Web.Security;
using System.Web.UI;
using System.Web.UI.WebControls;
using System.Web.UI.WebControls.WebParts;
using System.Web.UI.HtmlControls;namespace _GNewsSysWeb
{
[Serializable]
public abstract class UrlManager
{ protected int currentPageIndex; // 当前页码
protected int recordCount; // 记录总数
protected int pageSize; // 分页大小
protected int pageCount; // 总页数
protected string queryParam; // 传递页数的参数名称 protected UrlManager(int recordCount, int pageSize, string queryParam)
{ if (recordCount < 0)
throw new ArgumentOutOfRangeException("recordCount 应该大于等于 0 !");
if (pageSize <= 0)
throw new ArgumentOutOfRangeException("pageSize 应该大于 0 !");
if (String.IsNullOrEmpty(queryParam))
throw new ArgumentNullException("queryParam 不能为空!"); // 设置私有变量
this.recordCount = recordCount;
this.pageSize = pageSize;
this.queryParam = queryParam;
this.pageCount = getPageCount(recordCount, pageSize);
this.currentPageIndex = getPageIndex(recordCount, pageCount, queryParam);
}
// 获取页码总数
private int getPageCount(int recordCount, int pageSize)
{
int pageCount; // 如果记录数为0,也认为有一页(因为至少需要进行一个显示)
if (recordCount == 0)
{
pageCount = 1;
}
else
{
// 计算总页数
if (recordCount % pageSize == 0)
pageCount = recordCount / pageSize;
else
pageCount = (recordCount / pageSize) + 1;
} return pageCount;
} // 从Url参数中获得但前页码
private int getPageIndex(int recordCount, int pageCount, string queryParam)
{
if (recordCount == 0)
return 1; // 如果记录数为0,则显示为第一页 int pageIndex; // 从Url参数获得当前页码
string queryIndex =
HttpContext.Current.Request.QueryString[queryParam]; // 对页码进行一些校验
if (string.IsNullOrEmpty(queryIndex))
pageIndex = 1; // 显示第一页
else
{
try
{
pageIndex = Math.Abs(int.Parse(queryIndex)); if (pageIndex == 0)
pageIndex = 1; // 如果当前页大于总页数,设当前页为最后一页
if (pageIndex > pageCount)
pageIndex = pageCount;
}
catch
{
pageIndex = 1; // 显示第一页
}
} return pageIndex;
} public int PageCount
{
get { return pageCount; }
} public int RecordCount
{
get { return recordCount; }
} public int PageSize
{
get { return pageSize; }
} public int CurrentPageIndex
{
get { return currentPageIndex; }
}
public abstract string GetPageUrl(int pageIndex);
}
}
using System;
using System.Data;
using System.Configuration;
using System.Web;
using System.Web.Security;
using System.Web.UI;
using System.Web.UI.WebControls;
using System.Web.UI.WebControls.WebParts;
using System.Web.UI.HtmlControls;
using System.Text.RegularExpressions;namespace _GNewsSysWeb
{
[Serializable]
public class DefaultUrlManager : UrlManager
{ public DefaultUrlManager(int recordCount, int pageSize, string queryParam)
: base(recordCount, pageSize, queryParam) { } public DefaultUrlManager(int recordCount, int pageSize)
: this(recordCount, pageSize, "Page") { } public DefaultUrlManager(int recordCount)
: this(recordCount, 10) { } // 获得页面Url
public override string GetPageUrl(int pageIndex) {
string pageUrl = HttpContext.Current.Request.RawUrl; string pattern = @"(?<=[?&]"+ queryParam + @"=)(\d+)\b";
Regex reg = new Regex(pattern, RegexOptions.IgnoreCase);
// 如果找到匹配,也就是URL中含有类似 ?page=3 或者 &page=4 这样的字符串
// 则对后面的数值进行替换
if (reg.IsMatch(pageUrl)) {
pageUrl = reg.Replace(pageUrl, pageIndex.ToString());
} else {
string queryString = HttpContext.Current.Request.Url.Query; if (string.IsNullOrEmpty(queryString))
pageUrl += "?" + queryParam + "=" + pageIndex.ToString();
else
pageUrl += "&" + queryParam + "=" + pageIndex.ToString();
} return pageUrl;
}
}}
using System;
using System.Data;
using System.Configuration;
using System.Web;
using System.Web.Security;
using System.Web.UI;
using System.Web.UI.WebControls;
using System.Web.UI.WebControls.WebParts;
using System.Web.UI.HtmlControls;
using System.ComponentModel;namespace _GNewsSysWeb
{
[DefaultProperty("Text")]
[ToolboxData("<{0}:PagerControl runat=server></{0}:PagerControl>")]
public class PagerControl : WebControl
{ private int currentPage; // 当前页的页码
private int pageCount; // 总页数 private bool showPrevious = false; // 是否显示 上一页、第一页 的链接
private bool showNext = false; // 是否显示 下一页、最末页 的链接 private int startPage; // 显示的第一页 的 页码
private int endPage; // 显示的最末页 的 页码 public PagerControl()
{
// 当前页之前可以显示的最多链接数,大于此条链接将被隐藏
ViewState["PreviousPageCount"] = 5; // 当前页之后可以显示的最多链接数,大于此条链接将被隐藏
ViewState["AfterPageCount"] = 4; // 供客户端设置样式
ViewState["CssClass"] = "Pager";
} public new string CssClass
{
get { return ViewState["CssClass"].ToString(); }
set { ViewState["CssClass"] = value; }
} public int PreviousPageCount
{
get { return (int)ViewState["PreviousPageCount"]; }
set { ViewState["PreviousPageCount"] = value; }
} public int AfterPageCount
{
get { return (int)ViewState["AfterPageCount"]; }
set { ViewState["AfterPageCount"] = value; }
} public UrlManager UrlManager
{
get { return (UrlManager)ViewState["UrlManager"]; }
set { ViewState["UrlManager"] = value; }
} // 添加“第一页”,“上一页”的连接
private void AddPreviousLink(UrlManager UrlManager, HtmlTextWriter output)
{ output.AddAttribute(HtmlTextWriterAttribute.Class, "PagerIcon");
output.AddAttribute(HtmlTextWriterAttribute.Title, "第一页");
output.AddAttribute(HtmlTextWriterAttribute.Href, UrlManager.GetPageUrl(1));
output.RenderBeginTag(HtmlTextWriterTag.A);
output.Write("<<");
output.RenderEndTag(); output.AddAttribute(HtmlTextWriterAttribute.Class, "PagerIcon");
output.AddAttribute(HtmlTextWriterAttribute.Title, "上一页");
output.AddAttribute(HtmlTextWriterAttribute.Href, UrlManager.GetPageUrl(currentPage - 1));
output.RenderBeginTag(HtmlTextWriterTag.A);
output.Write("<");
output.RenderEndTag(); showPrevious = false; // 只显示一次
}
// 添加 “下一页”、“最末页” 的链接
private void AddNextLink(UrlManager UrlManager, HtmlTextWriter output)
{ output.AddAttribute(HtmlTextWriterAttribute.Class, "PagerIcon");
output.AddAttribute(HtmlTextWriterAttribute.Title, "下一页");
output.AddAttribute(HtmlTextWriterAttribute.Href, UrlManager.GetPageUrl(currentPage + 1));
output.RenderBeginTag(HtmlTextWriterTag.A);
output.Write(">");
output.RenderEndTag(); output.AddAttribute(HtmlTextWriterAttribute.Class, "PagerIcon");
output.AddAttribute(HtmlTextWriterAttribute.Title, "最末页");
output.AddAttribute(HtmlTextWriterAttribute.Href, UrlManager.GetPageUrl(pageCount));
output.RenderBeginTag(HtmlTextWriterTag.A);
output.Write(">>");
output.RenderEndTag(); showNext = false; // 可有可无,程序会跳出循环
}
// 根据当前页,当前页之前可以显示的页数,算得从第几页开始进行显示
private void SetStartPage()
{ // 如果当前页小于它前面所可以显示的条目数,
// 那么显示第一页就是实际的第一页
if (currentPage <= PreviousPageCount)
{
startPage = 1;
}
else
// 这种情况下 currentPage 前面总是能显示完,
// 要根据后面的长短确定是不是前面应该多显示
{
if (currentPage > PreviousPageCount + 1)
showPrevious = true; int linkLength = (pageCount - currentPage + 1) + PreviousPageCount; int startPage = currentPage - PreviousPageCount; while (linkLength < PreviousPageCount + AfterPageCount + 1 && startPage > 1)
{
linkLength++;
startPage--;
} this.startPage = startPage;
}
} // 根据CurrentPage、总页数、当前页之后长度 算得显示的最末页是 第几页
private void SetEndPage()
{
// 如果当前页加上它之后可以显示的页数 大于 总页数,
// 那么显示的最末页就是实际的最末页
if (currentPage + AfterPageCount >= pageCount)
{
endPage = pageCount;
}
else
{ // 这种情况下 currentPage后面的总是可以显示完,
// 要根据前面的长短确定是不是后面应该多显示 int linkLength = (currentPage - startPage + 1) + AfterPageCount; int endPage = currentPage + AfterPageCount; while (linkLength < PreviousPageCount + AfterPageCount + 1 && endPage < pageCount)
{
linkLength++;
endPage++;
} if (endPage < pageCount)
showNext = true; this.endPage = endPage;
}
}
// 显示在页面上
protected override void Render(HtmlTextWriter output)
{ output.AddAttribute(HtmlTextWriterAttribute.Class, CssClass);
output.RenderBeginTag(HtmlTextWriterTag.Div); if (UrlManager == null)
throw new ArgumentNullException("UrlManager 不能为 Null"); // 获取当前页
currentPage = UrlManager.CurrentPageIndex; // 获取总页数
pageCount = UrlManager.PageCount; SetStartPage();
SetEndPage(); // 循环打印链接
for (int i = startPage; i <= endPage; i++)
{
if (showPrevious) // 如果需要显示前一页、第一页链接
AddPreviousLink(UrlManager, output);
if (i == currentPage)
{
output.AddAttribute(HtmlTextWriterAttribute.Class, "CurrentPage");
} output.AddAttribute(HtmlTextWriterAttribute.Href, UrlManager.GetPageUrl(i));
output.RenderBeginTag(HtmlTextWriterTag.A);
output.Write(i);
output.RenderEndTag(); // A if (i == endPage && showNext) // 如果需要显示 下一页、最末页 链接
AddNextLink(UrlManager, output);
} output.RenderBeginTag(HtmlTextWriterTag.Span);
output.Write(String.Format(" ( 第<b>{0}</b>页/共<b>{1}</b>页 )", currentPage, pageCount));
output.RenderEndTag(); // Span output.RenderEndTag(); // Div
} }
}
测试:15万条数据,用时1s.--=====调用示例====
declare @str varchar(200);
set @str = 'select * from t_user order by id'
exec pagination @str,4,2--=====存储过程======
create procedure pagination
@sqlstr nvarchar(4000), --查询字符串
@currentpage int, --第N页
@pagesize int --每页行数
as
set nocount on
declare @P1 int, --P1是游标的id
@rowcount int
exec sp_cursoropen @P1 output,@sqlstr,@scrollopt=1,@ccopt=1,@rowcount=@rowcount output
declare @totalPage int --总页数
set @totalpage = ceiling(1.0*@rowcount/@pagesize)
--判断当前页是否大于总页数,如果大于总页数.当前页就是最后一页
if (@currentpage>=@totalpage)
set @currentpage = @totalpage
if(@currentpage<1) --如果当前页小于1,则默认当前页是1
set @currentpage=1 print '当前页'
print @currentpage select @totalpage as 总页数,@currentpage as 当前页 ,@rowcount as 总记录数--,@rowcount as 总行数,@currentpage as 当前页
declare @begin int --从哪条记录开始的
set @begin = (@currentpage-1)*@pagesize+1 exec sp_cursorfetch @P1,16,@begin,@pagesize
exec sp_cursorclose @P1
set nocount off
http://topic.csdn.net/u/20100302/09/9a6bd89a-019c-4fc6-9a4d-c30501d35ec5.html
可以告诉我吗?马上结分