求一个分页算法???

qingYun1029 2011-03-25 12:04:02




求一个淘宝分页的例子。。
我是动态输出分页的HTML代码,关键是算法,类似于数据库里面PageIndex*PageSize+PageSize

期待中??
...全文
358 29 打赏 收藏 转发到动态 举报
写回复
用AI写文章
29 条回复
切换为时间正序
请发表友善的回复…
发表回复
qingYun1029 2011-03-26
  • 打赏
  • 举报
回复
谢谢了!
Shalves 2011-03-26
  • 打赏
  • 举报
回复
http://hi.baidu.com/roleya/blog/item/6c3fe12429bcfe3a8644f926.html

转一个我09年做的页码分页,里面有一小段算得上是算法的方法吧。
gengchenhui 2011-03-26
  • 打赏
  • 举报
回复
貌似写一个也不是很难啊。。。
子夜__ 2011-03-26
  • 打赏
  • 举报
回复
刘婷婷 2011-03-25
  • 打赏
  • 举报
回复
/// <summary>
/// 检索
/// </summary>
/// <param name="sender">客户信息</param>
/// <param name="e">履历信息</param>
protected void btnSelect_Click(object sender, EventArgs e)
{
BindUsers();//客户信息
PageBind();//履历信息分页
}
//分页
protected void PageBind()
{
btnFirst.Visible = true;
btnPre.Visible = true;
btnNext.Visible = true;
btnEnd.Visible = true;
lbl_page.Visible = true;
lbl_pages.Visible = true;
lbl_count.Visible = true;
int curpage = int.Parse(lbl_page.Text.Trim());//当前页
PagedDataSource ps = new PagedDataSource();
viewCRM_HisInfo hisinfo = new viewCRM_HisInfo();
//履历信息
if (!string.IsNullOrEmpty(txtc_num.Text.Trim()))
{
hisinfo.Where.C_num.Value = txtc_num.Text.Trim();
}
if (ddlarea_cd.SelectedValue != "" && ddlarea_cd.SelectedValue != null)
{
hisinfo.Where.Area_cd.Value = ddlarea_cd.SelectedItem.Text;
}
hisinfo.Query.Load();
ps.DataSource = hisinfo.DefaultView; //绑定分页信息
ps.AllowPaging = true; //是否分页
ps.PageSize = 3; //每页数量
ps.CurrentPageIndex = curpage - 1; //当前页
if (curpage == 1) //当当前页是1时,第一页和上一页按钮不可用
{
btnFirst.Enabled = false;
btnPre.Enabled = false;
btnNext.Enabled = true;
btnEnd.Enabled = true;
}
else
{
btnFirst.Enabled = true;
btnPre.Enabled = true;
}
if (curpage == ps.PageCount)//当当前页是最后一页时,下一页和最后一页按钮不可用
{
btnNext.Enabled = false;
btnEnd.Enabled = false;
btnFirst.Enabled = true;
btnPre.Enabled = true;
}
else
{
btnNext.Enabled = true;
btnEnd.Enabled = true;
}
lbl_pages.Text = Convert.ToString(ps.PageCount);//总页数
lbl_count.Text = ps.DataSourceCount.ToString();//总记录数
DataList1.DataSource = ps; //绑定datalist数据
DataList1.DataKeyField = "Id";
DataList1.DataBind();
}
//第一页
protected void btnFirst_Click(object sender, EventArgs e)
{
lbl_page.Text = "1";
PageBind();
}
//上一页
protected void btnPre_Click(object sender, EventArgs e)
{
lbl_page.Text = Convert.ToString(Convert.ToInt32(lbl_page.Text) - 1);
PageBind();
}
//下一页
protected void btnNext_Click(object sender, EventArgs e)
{
lbl_page.Text = Convert.ToString(Convert.ToInt32(lbl_page.Text) + 1);
PageBind();
}
//最后一页
protected void btnEnd_Click(object sender, EventArgs e)
{
lbl_page.Text = lbl_pages.Text;
PageBind();

}
随风落梦 2011-03-25
  • 打赏
  • 举报
回复
[Quote=引用 1 楼 fengyarongaa 的回复:]
C# code
using System;
using System.Collections.Generic;
using System.Web;
using System.Text;
using System.Text.RegularExpressions;
namespace cofcms
{
public class PagingCollection<T>
……
[/Quote]
DD.可以搞个分页存储过程,这样效率高
叶子 2011-03-25
  • 打赏
  • 举报
回复
用分页存储过程不行吗?
ycproc 2011-03-25
  • 打赏
  • 举报
回复
using System;
using System.Collections.Generic;
using System.Web;
using System.Text;
using System.Text.RegularExpressions;
namespace cofcms
{
public class PagingCollection<T>
{
private int pagezise;

public int Pagezise
{
get { return pagezise; }
set { pagezise = value; }
}
private int pageindex;

public int Pageindex
{
get { return pageindex; }
set { pageindex = value; }
}
private int TotalCount;

public int TotalCount1
{
get { return TotalCount; }
set { TotalCount = value; }
}
private int TotalPage=0;

public int TotalPage1
{
get { return TotalPage; }
set { TotalPage = value; }
}
private string url;

public string Url
{
get { return url; }
set { url = value; }
}
private string urlparms;

public string Urlparms
{
get {

return urlparms; }
set { urlparms = value; }
}
/// <summary>
/// 分页数据构造
/// </summary>
/// <param name="source"></param>
/// <param name="pageindex"></param>
/// <param name="pagezise"></param>
/// <param name="totalcount"></param>
/// <param name="url"></param>
public PagingCollection(int pageindex, int pagezise, int totalcount, string url)
{
this.pageindex = pageindex;
this.pagezise = pagezise;
TotalCount = totalcount;
TotalPage = (int)Math.Ceiling(TotalCount / (double)pagezise);
this.url = url;

}

public PagingCollection(int pageindex, int pagezise, int totalcount, string url,string urlparms)
{
this.pageindex = pageindex;
this.pagezise = pagezise;
TotalCount = totalcount;
TotalPage = (int)Math.Ceiling(TotalCount / (double)pagezise);
this.url = url;
this.urlparms = urlparms;

}

#region 分页属性 返回分页数据
public string GetPatePar
{
get
{
if (TotalCount1 > 0)
{
StringBuilder str = new StringBuilder();
int startpage = (pageindex - 1) / 10 * 10 + 1;
int endpage = (pageindex - 1) / 10 * 10 + 10;
int x = endpage > TotalPage ? TotalPage : endpage;
str.Append("<div style=' color:#1E5494;'>共" + TotalPage1 + "页 / 当前第" + pageindex + "页   ");

if (HasPreviousPage)
{
str.Append("<a href=" + url + "?page=1" + GetURLParms + "" + urlparms + ">首页</a> ");
str.Append("<a href=" + url + "?page=" + (pageindex - 1) + GetURLParms + "" + urlparms + ">上一页</a>");
}
else
{
str.Append("<a href=#>首页 </a>");
str.Append("<a href=#>上一页</a>");
}
for (int i = startpage; i <= x; i++)
{
if (i == pageindex)
{
str.Append(string.Format("<a style='margin-left:3px; margin-right:3px;padding:2px 4px 2px 4px;color:red;border:1px solid #cccccc;background-color:#ffffff; '>" + i + "</a>"));
}
else
{
str.Append(string.Format("<a style='margin-left:3px; margin-right:3px;' href=" + url + "?page=" + i + GetURLParms + "" + urlparms + ">" + i + "</a>"));
}
}
if (HasNextPage)
{

str.Append("<a href=" + url + "?page=" + (pageindex + 1) + GetURLParms + "" + urlparms + ">下一页 </a>");
str.Append("<a href=" + url + "?page=" + TotalPage + GetURLParms + "" + urlparms + ">尾页</a>");
}
else
{
str.Append("<a href=#>下一页 </a>");
str.Append("<a href=#>尾页</a>");
}
str.Append("</div>");
return str.ToString();
}
else
{
return "<font color=red>暂无数据!</font>";
}

}
}
#endregion
/// <summary>
/// url重写
/// </summary>
private string GetURLParms
{
get
{
string query = HttpContext.Current.Request.Url.Query;
query = Regex.Replace(query, @"\?page=\d*", "", RegexOptions.Compiled);
return query;

}
}
/// <summary>
///判断是否有上一页
/// </summary>
public bool HasPreviousPage
{
get
{
return (pageindex > 1);
}
}
/// <summary>
///判断是否有下一页
/// </summary>
public bool HasNextPage
{
get
{
return (pageindex < TotalPage);
}
}
}

/// <summary>
/// 分页数据类
/// </summary>
/// <typeparam name="T"></typeparam>
public class PageBean<T>
{

IList<T> datasource = new List<T>();

public IList<T> Datasource
{
get { return datasource; }
set { datasource = value; }
}

int pagesum;

public int Pagesum
{
get { return pagesum; }
set { pagesum = value; }
}
public PageBean(IList<T> datasource, int pagesum)
{
this.datasource = datasource;
this.pagesum = pagesum;
}
public PageBean()
{
//
// TODO: 在此处添加构造函数逻辑
//
}
}


}
qingYun1029 2011-03-25
  • 打赏
  • 举报
回复
在此谢过!!!

感激涕零!!!
无爱大叔 2011-03-25
  • 打赏
  • 举报
回复
[Quote=引用 12 楼 qingyun1029 的回复:]
引用 11 楼 pjw100 的回复:

用aspnetpager吧
http://www.webdiyer.com/controls/aspnetpager
用起来很简单,分页存储过程也帮你生成。


确实是个好东西,虽然跟“京东商城”的那个分页有点差距。
只不过感觉麻烦,用起来不怎么方便,尤其是要自己定义样式的时候。

哎,现在深刻体会到了算法的重要性了...
晕死,这些……
[/Quote]
自定义样式也比较容易的,aspnetpager网上有很多种样式风格:拍拍、淘宝、迅雷...

http://www.baidu.com/s?wd=aspnetpager+%D1%F9%CA%BD&ch=&tn=17gameyes&bar=&oq=aspnetpager&rsp=1&f=3&sugT=3781
满CD的程序猿 2011-03-25
  • 打赏
  • 举报
回复
首先建议LZ用存储过程吧因为防止SQL注入以及一些7788的东西,其实分页的关键点还是那个SQL语句:select r_1,r_2 from (select row_number() over (order by r_ID) as r_row,r_name from table_1) as table_2 where r_row>= n_1 and r_row<=n_2 这个存储过程的参数就是n_1,n_2。楼主看看行得通不,算法就看你每页显示多少条数据了咯
大Y 2011-03-25
  • 打赏
  • 举报
回复
路过,N久没有手写过了!
Valefish 2011-03-25
  • 打赏
  • 举报
回复
找个存储过程 分页吧
qingYun1029 2011-03-25
  • 打赏
  • 举报
回复
[Quote=引用 14 楼 maple_clever 的回复:]

仿19楼分页控件 一个url静态化的分页控件
http://www.xunxt.com/forum-viewthread-tid-83-fromuid-1.html
[/Quote]

19楼???
qingYun1029 2011-03-25
  • 打赏
  • 举报
回复
[Quote=引用 13 楼 our651 的回复:]

这个应该是一大堆IF ELSE吧
[/Quote]

曾经我也以为应该是一大堆的if else,
后来发现还是“PageIndex*PageSize——PageIndex*PageSize+PageSize”更美好
Maple_clever 2011-03-25
  • 打赏
  • 举报
回复
仿19楼分页控件 一个url静态化的分页控件
http://www.xunxt.com/forum-viewthread-tid-83-fromuid-1.html
our651 2011-03-25
  • 打赏
  • 举报
回复
这个应该是一大堆IF ELSE吧
qingYun1029 2011-03-25
  • 打赏
  • 举报
回复
[Quote=引用 11 楼 pjw100 的回复:]

用aspnetpager吧
http://www.webdiyer.com/controls/aspnetpager
用起来很简单,分页存储过程也帮你生成。
[/Quote]

确实是个好东西,虽然跟“京东商城”的那个分页有点差距。
只不过感觉麻烦,用起来不怎么方便,尤其是要自己定义样式的时候。

哎,现在深刻体会到了算法的重要性了...
晕死,这些个东西到底该怎么写,需要注意什么地方,有没有大师过来指点指点啊???


pjw100 2011-03-25
  • 打赏
  • 举报
回复
用aspnetpager吧
http://www.webdiyer.com/controls/aspnetpager
用起来很简单,分页存储过程也帮你生成。
qq346127416 2011-03-25
  • 打赏
  • 举报
回复
直接用aspnetpaper不行么
加载更多回复(5)

62,050

社区成员

发帖
与我相关
我的任务
社区描述
.NET技术交流专区
javascript云原生 企业社区
社区管理员
  • ASP.NET
  • .Net开发者社区
  • R小R
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告

.NET 社区是一个围绕开源 .NET 的开放、热情、创新、包容的技术社区。社区致力于为广大 .NET 爱好者提供一个良好的知识共享、协同互助的 .NET 技术交流环境。我们尊重不同意见,支持健康理性的辩论和互动,反对歧视和攻击。

希望和大家一起共同营造一个活跃、友好的社区氛围。

试试用AI创作助手写篇文章吧