asp.net分页

流年岁月 2009-07-04 11:41:24


现在我遇到这个一个需求:

某个页面Default.aspx , 要求每页显示三个产品(包括图片,类型跟简介),第三个产品下面有个分页的功能,就是上一页,下一页,首页,尾页这4个。 如果完全是从数据库读取出所有数据并显示在页面上。这个我会,就是将返回的datatable 在前台循环 然后 依次显示出来。
现在需求是 每页只显示三个, 并当我点击下一页的时候就显示第4条到第6条,依此类推...

希望有人能提供详细思路或者代码给我,本人感激不尽;

不知道我说的请不清楚呢?
...全文
2245 18 打赏 收藏 转发到动态 举报
写回复
用AI写文章
18 条回复
切换为时间正序
请发表友善的回复…
发表回复
  • 打赏
  • 举报
回复
对于2楼的示例 我系统说上下文中找不到bind()是为什么呢
songchangshuo 2011-11-16
  • 打赏
  • 举报
回复
对于2楼的示例 我系统说上下文中找不到bind()是为什么呢
SyaHiIsMy 2011-10-19
  • 打赏
  • 举报
回复

/// <summary>
/// 图书信息分页查询
/// </summary>
/// <returns></returns>
public List<Books> GetBookByInfo(int pageSize, int currentIndex)
{
List<Books> BookList = null;
string sql=string.Format("select top {0} * from Books where id not in(select top {1} id from Books order by id)",pageSize,currentIndex);
using (SqlConnection conn=new SqlConnection(DBHelper.str))
{
try
{
currentIndex = pageSize * (currentIndex - 1);
SqlCommand comm = new SqlCommand(sql, conn);
conn.Open();
SqlDataReader reader=comm.ExecuteReader();
if (reader.HasRows)
{
BookList = new List<Books>();
}
while (reader.Read())
{
Books bk = new Books();
bk.Id=Convert.ToInt32( reader["Id"]);
bk.Title = reader["Title"].ToString();
bk.Author = reader["Author"].ToString();
bk.PublisherId = GetPublishersByName(Convert.ToInt32( reader["PublisherId"]));
bk.PublishDate =Convert.ToDateTime( reader["PublishDate"]);
bk.ISBN = reader["ISBN"].ToString();
bk.UnitPrice = reader["UnitPrice"].ToString();
bk.ContentDescription = reader["ContentDescription"].ToString();
bk.TOC = reader["TOC"].ToString();
bk.CategoryId = GetCategoriesByName(Convert.ToInt32(reader["CategoryId"]));
bk.Clicks = Convert.ToInt32(reader["Clicks"]);
BookList.Add(bk);
}
reader.Close();
conn.Close();
}
catch (Exception ex)
{

Console.WriteLine(ex.Message);
}


}
return BookList;
}







/// 获得所有的图书数量
/// </summary>
/// <returns></returns>
public int GetBooksCount()
{
int cout = 0;
string sql = string.Format("select count(*) from books");
using (SqlConnection conn=new SqlConnection(DBHelper.str))
{
try
{
SqlCommand comm = new SqlCommand(sql, conn);
conn.Open();
cout =Convert.ToInt32( comm.ExecuteScalar());
conn.Close();
}
catch (Exception ex)
{

Console.WriteLine(ex.Message);
}

}

return cout;
}







//New对象
BookManager bm = new BookManager();
//每页的数量
private int pageSize = 6;
//当前页数
private int CurrentPageIndex = 1;
//保存总共有多少页
private int pageCount;
//保存所有的传递数据
private int totalCount;
//页面加载
protected void Page_Load(object sender, EventArgs e)
{

FillIsCount();

}
//显示页数
private void FillIsCount()
{
SayHi();
//获取总记录数
totalCount = bm.GetBooksCount();
//总页数
pageCount = (totalCount / pageSize) + (totalCount % pageSize > 0 ? 1 : 0);
this.lblBooks.Text = "第" + CurrentPageIndex + "页,共" + pageCount + "页";
}
//封装所有显示数据的方法
private void SayHi()
{
List<Books> bk = bm.GetBookByInfo(this.pageSize, CurrentPageIndex);
this.DlBooks.DataSource = bk;
this.DlBooks.DataBind();
}


//上一页
protected void LbntPrev_Click(object sender, EventArgs e)
{
//点击上一页就将下一页显示
this.LlblNext.Visible = true;
//ViewState取出全局变量
CurrentPageIndex = Convert.ToInt32(ViewState["CurrentPageIndex"]);
CurrentPageIndex--;
//将修改后的值保存
ViewState["CurrentPageIndex"] = CurrentPageIndex;

//取出总页数
pageCount = Convert.ToInt32(ViewState["pageCount"]);
if (CurrentPageIndex == 0)
{
this.LbntPrev.Visible = false;
}
else
{
this.LbntPrev.Visible = true;
}
FillIsCount();

}
//下一页
protected void LlblNext_Click1(object sender, EventArgs e)
{
//每次点击了上一页就显示下一页
this.LbntPrev.Visible = true;
//获取全局变量
CurrentPageIndex = Convert.ToInt32(ViewState["CurrentPageIndex"]);
CurrentPageIndex++;
//将修改后的值保存
ViewState["CurrentPageIndex"] = CurrentPageIndex;
//取出总页数
pageCount = Convert.ToInt32(ViewState["pageCount"]);
if (CurrentPageIndex == pageCount)
{

this.LlblNext.Visible = false;
}
else
{
this.LlblNext.Visible = true;
}

FillIsCount();
}
//首页
protected void lbntTop_Click(object sender, EventArgs e)
{
//重新赋值
CurrentPageIndex = 1;
this.LbntPrev.Visible = false;
this.LlblNext.Visible = true;
//重新保存值
ViewState["CurrentPageIndex"] = CurrentPageIndex;
this.lblBooks.Text = "第" + CurrentPageIndex + "页,共" + pageCount + "页";
SayHi();
}

//尾页
protected void lbtnFoot_Click(object sender, EventArgs e)
{
//当前页数等于总页数
CurrentPageIndex = pageCount;
this.LlblNext.Visible = false;
this.LbntPrev.Visible = true;
//重新保存值
ViewState["CurrentPageIndex"] = CurrentPageIndex;
this.lblBooks.Text = "第" + CurrentPageIndex + "页,共" + pageCount + "页";
SayHi();
}

homesos 2009-07-04
  • 打赏
  • 举报
回复
BAIDU GOOGLE上一大把
messi_yang 2009-07-04
  • 打赏
  • 举报
回复
學習學習!!!
流年岁月 2009-07-04
  • 打赏
  • 举报
回复
[Quote=引用 3 楼 myljg 的回复:]
看来楼主的.NET火候差了点
基本的分页问题……
量多应该考虑存储过程。
[/Quote]
恩是呀,基础不好,还要多学!
myljg 2009-07-04
  • 打赏
  • 举报
回复
看来楼主的.NET火候差了点
基本的分页问题……
量多应该考虑存储过程。
阿彪兄 2009-07-04
  • 打赏
  • 举报
回复
[Quote=引用 1 楼 gdjlc 的回复:]
简单分页参考:
testPage.aspx
HTML code<%@ Page Language="C#" AutoEventWireup="true" CodeFile="testPage.aspx.cs" Inherits="testPage"%><!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd"><htmlxmlns="http://www.w3.org/1999/xhtml"><headrunat="server"><title>无标题页</title></head><body><formid="form1" runat="server"><asp:DataListID="DataList1" runat="server"><ItemTemplate><tablecellpadding="0" cellspacing="0" style="width: 400px;"><tr><td><asp:LabelID="Label1" runat="server" Font-Size="9pt" Text='<%#Eval("title") %>' ForeColor="Black"></asp:Label></td></tr></table></ItemTemplate></asp:DataList><br/><tablecellpadding="0" cellspacing="0"><tr><tdstyle="width: 100px"><asp:LabelID="Label5" runat="server" Font-Size="9pt" Text="当前页为 [ "></asp:Label><asp:LabelID="Label7" runat="server" Text="1" Font-Size="9pt"></asp:Label><asp:LabelID="Label3" runat="server" Font-Size="9pt" Text=" ]"></asp:Label></td><tdstyle="width: 40px"><asp:LinkButtonID="LinkButton2" runat="server" Font-Size="9pt" Font-Underline="False"
ForeColor="Red" OnClick="LinkButton2_Click">首页</asp:LinkButton></td><tdstyle="width: 30px"><asp:LinkButtonID="LinkButton3" runat="server" Font-Size="9pt" Font-Underline="False"
ForeColor="Red" OnClick="LinkButton3_Click" Width="42px">上一页</asp:LinkButton></td><tdstyle="width: 48px"><asp:LinkButtonID="LinkButton4" runat="server" Font-Size="9pt" Font-Underline="False"
ForeColor="Red" OnClick="LinkButton4_Click" Width="48px">下一页</asp:LinkButton></td><tdstyle="width: 49px"><asp:LinkButtonID="LinkButton5" runat="server" Font-Size="9pt" Font-Underline="False"
ForeColor="Red" OnClick="LinkButton5_Click" Width="29px">尾页</asp:LinkButton></td><tdalign="center" style="width: 118px"><asp:LabelID="Label10" runat="server" Text="总页为 [ " Font-Size="9pt" Width="52px"></asp:Label><asp:LabelID="Label2" runat="server" Font-Size="9pt"></asp:Label><asp:LabelID="Label4" runat="server" Font-Size="9pt" Text=" ]"></asp:Label></td></tr></table></form></body></html>


testPage.aspx.cs
C# codeusing System;using System.Data;using System.Configuration;using System.Collections;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;publicpartialclass testPage : System.Web.UI.Page
{protectedvoid Page_Load(object sender, EventArgs e)
{if (!IsPostBack)
{
dlBind();
}
}publicvoid dlBind()
{int curpage= Convert.ToInt32(this.Label7.Text);
PagedDataSource ps=new PagedDataSource();
DataSet ds= bind();//这里是数据源
ps.DataSource= ds.Tables[0].DefaultView;
ps.AllowPaging=true;//是否可以分页 ps.PageSize=10;//显示的数量,也就是每页要显示多少条记录 ps.CurrentPageIndex= curpage-1;//取得当前页的页码this.LinkButton3.Enabled=true;this.LinkButton4.Enabled=true;this.LinkButton5.Enabled=true;this.LinkButton2.Enabled=true;if (curpage==1)
{this.LinkButton2.Enabled=false;//不显示第一页按钮this.LinkButton3.Enabled=false;//不显示上一页按钮 }if (curpage== ps.PageCount)
{this.LinkButton4.Enabled=false;//不显示下一页this.LinkButton5.Enabled=false;//不显示最后一页 }this.Label2.Text= Convert.ToString(ps.PageCount);this.DataList1.DataSource= ps;this.DataList1.DataKeyField="id";this.DataList1.DataBind();
}protectedvoid LinkButton2_Click(object sender, EventArgs e)//第一页 {this.Label7.Text="1";//Label7.Text为当前页this.dlBind();
}protectedvoid LinkButton3_Click(object sender, EventArgs e)//上一页 {this.Label7.Text= Convert.ToString(Convert.ToInt32(this.Label7.Text)-1);this.dlBind();
}protectedvoid LinkButton4_Click(object sender, EventArgs e)//下一页 {this.Label7.Text= Convert.ToString(Convert.ToInt32(this.Label7.Text)+1);this.dlBind();
}protectedvoid LinkButton5_Click(object sender, EventArgs e)//最后一页 {this.Label7.Text=this.Label2.Text;//Label2.Text为总页数this.dlBind();
}

}
[/Quote]
同意,如果用DataList做的话可以用PagedDatasource分页
gdjlc 2009-07-04
  • 打赏
  • 举报
回复
简单分页参考:
testPage.aspx

<%@ Page Language="C#" AutoEventWireup="true" CodeFile="testPage.aspx.cs" Inherits="testPage" %>

<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">

<html xmlns="http://www.w3.org/1999/xhtml" >
<head runat="server">
<title>无标题页</title>
</head>
<body>
<form id="form1" runat="server">

<asp:DataList ID="DataList1" runat="server">
<ItemTemplate>
<table cellpadding="0" cellspacing="0" style="width: 400px;">
<tr>
<td>
<asp:Label ID="Label1" runat="server" Font-Size="9pt" Text='<%# Eval("title") %>' ForeColor="Black"></asp:Label></td>
</tr>
</table>
</ItemTemplate>
</asp:DataList>
<br />
<table cellpadding="0" cellspacing="0">
<tr>
<td style="width: 100px">
<asp:Label ID="Label5" runat="server" Font-Size="9pt" Text="当前页为 [ ">
</asp:Label><asp:Label ID="Label7" runat="server" Text="1" Font-Size="9pt"></asp:Label>
<asp:Label ID="Label3" runat="server" Font-Size="9pt" Text=" ]"></asp:Label></td>
<td style="width: 40px">
<asp:LinkButton ID="LinkButton2" runat="server" Font-Size="9pt" Font-Underline="False"
ForeColor="Red" OnClick="LinkButton2_Click">首页</asp:LinkButton></td>
<td style="width: 30px">
<asp:LinkButton ID="LinkButton3" runat="server" Font-Size="9pt" Font-Underline="False"
ForeColor="Red" OnClick="LinkButton3_Click" Width="42px">上一页</asp:LinkButton></td>
<td style="width: 48px">
<asp:LinkButton ID="LinkButton4" runat="server" Font-Size="9pt" Font-Underline="False"
ForeColor="Red" OnClick="LinkButton4_Click" Width="48px">下一页</asp:LinkButton></td>
<td style="width: 49px">
<asp:LinkButton ID="LinkButton5" runat="server" Font-Size="9pt" Font-Underline="False"
ForeColor="Red" OnClick="LinkButton5_Click" Width="29px">尾页</asp:LinkButton></td>
<td align="center" style="width: 118px">
<asp:Label ID="Label10" runat="server" Text="总页为 [ " Font-Size="9pt" Width="52px"></asp:Label>
<asp:Label ID="Label2" runat="server" Font-Size="9pt"></asp:Label>
<asp:Label ID="Label4" runat="server" Font-Size="9pt" Text=" ]"></asp:Label></td>
</tr>
</table>
</form>
</body>
</html>




testPage.aspx.cs

using System;
using System.Data;
using System.Configuration;
using System.Collections;
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;

public partial class testPage : System.Web.UI.Page
{
protected void Page_Load(object sender, EventArgs e)
{
if (!IsPostBack)
{
dlBind();
}
}
public void dlBind()
{
int curpage = Convert.ToInt32(this.Label7.Text);
PagedDataSource ps = new PagedDataSource();
DataSet ds = bind(); //这里是数据源

ps.DataSource = ds.Tables[0].DefaultView;
ps.AllowPaging = true; //是否可以分页
ps.PageSize = 10; //显示的数量,也就是每页要显示多少条记录
ps.CurrentPageIndex = curpage - 1; //取得当前页的页码
this.LinkButton3.Enabled = true;
this.LinkButton4.Enabled = true;
this.LinkButton5.Enabled = true;
this.LinkButton2.Enabled = true;
if (curpage == 1)
{
this.LinkButton2.Enabled = false;//不显示第一页按钮
this.LinkButton3.Enabled = false;//不显示上一页按钮
}
if (curpage == ps.PageCount)
{
this.LinkButton4.Enabled = false;//不显示下一页
this.LinkButton5.Enabled = false;//不显示最后一页
}
this.Label2.Text = Convert.ToString(ps.PageCount);
this.DataList1.DataSource = ps;
this.DataList1.DataKeyField = "id";
this.DataList1.DataBind();
}

protected void LinkButton2_Click(object sender, EventArgs e) //第一页
{
this.Label7.Text = "1"; //Label7.Text为当前页
this.dlBind();
}
protected void LinkButton3_Click(object sender, EventArgs e) //上一页
{
this.Label7.Text = Convert.ToString(Convert.ToInt32(this.Label7.Text) - 1);
this.dlBind();
}
protected void LinkButton4_Click(object sender, EventArgs e) //下一页
{
this.Label7.Text = Convert.ToString(Convert.ToInt32(this.Label7.Text) + 1);
this.dlBind();
}
protected void LinkButton5_Click(object sender, EventArgs e) //最后一页
{
this.Label7.Text = this.Label2.Text; //Label2.Text为总页数
this.dlBind();
}

}

myljg 2009-07-04
  • 打赏
  • 举报
回复
[Quote=引用 9 楼 jasondct 的回复:]
3楼的话不要理,1楼、2楼的是 对DataList1 这个控件的 分页。 那个代码 也挺好的。
[/Quote]

等待到记录超过一数量你就知道该理了!
本人曾经给本地的一个政府单位做了一个项目,
当时没有考虑他们会有那么记录,
当50万左右或更高时你就知道仅仅用DataList或Gridview自身的分页功能而不在数据层做优化会给你带来什么了。

我真怀疑你有没有做过较大点的项目,
本人只是友情的提醒一下楼主罢了。
gui0605 2009-07-04
  • 打赏
  • 举报
回复
用AspNetPager这个控件,再加一个存储过程就OK了
feifeiyiwen 2009-07-04
  • 打赏
  • 举报
回复
jf
z307821318 2009-07-04
  • 打赏
  • 举报
回复
datalist绑定数据再分页就行了
sijin 2009-07-04
  • 打赏
  • 举报
回复
网上游很多方法的
阿彪兄 2009-07-04
  • 打赏
  • 举报
回复
支持一下
jasondct 2009-07-04
  • 打赏
  • 举报
回复
3楼的话不要理,1楼、2楼的是 对DataList1 这个控件的 分页。 那个代码 也挺好的。
baykermr 2009-07-04
  • 打赏
  • 举报
回复
1,sql语句分页(数据量大用)
2..net提供了PagedDatasource这个类。(数据量小用,因为他每次是查的全部)
jasondct 2009-07-04
  • 打赏
  • 举报
回复
你用iframe框架试试 , 能满足你的要。
在页面 嵌入一个框架,里面显示三个, 单击下一个触发框架的另一个页面 。 显示另外几个。

62,074

社区成员

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

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

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

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