当数据库的数据量比较大,对执行效率要求比较高的时候,我们可以考虑使用存储过程来实现分页,根据传入的页数返回需要显示的数据表,仅仅select出当前页的数据。(这个比使用PagedDataSource类而言效率要高。)
现在采用Repeater来实现一个数据分页,数据库采用SQL server2000,利用里面的系统表Northwind。
新建存储过程如下:
create PROCEDURE dbo.myPaging
(
@pagesize int,
@currentPage int,
@total int output
)
AS
create table #temp
(
ID int identity(1,1),
CustomerID varchar(50),
CompanyName varchar(50),
ContactName varchar(50),
ContactTitle varchar(50),
Phone varchar(50)
)
insert into #temp(CustomerID,CompanyName,ContactName,ContactTitle,Phone)
select CustomerID,CompanyName,ContactName,ContactTitle,Phone
from Customers
select @total=(select count(*) from Customers)
declare @startID int
declare @endID int
set @startID=(@currentpage-1)*@pagesize+1
set @endID=@currentpage*@pagesize
select * from #temp where ID>=@startID and ID<=@endID
GO
若不会写存储过程的话,可以参照网站在线生成分页的存储过程:http://www.webdiyer.com/AspNetPager/utility/sqlspgen.aspx
前台代码:
1
<body>2
<form id="Form1" method="post" runat="server">3
<FONT face="宋体">4
<asp:DataList id="DataList1" runat="server" Width="744px" DataKeyField="customerID">5
<HeaderTemplate>6
<TABLE id="Table2" cellSpacing="1" cellPadding="0" width="100%" bgColor="#990033" border="0">7
<TR>8
<TD bgColor="#ffffff">公司名称</TD>9
<TD bgColor="#ffffff">联系人名字</TD>10
<TD bgColor="#ffffff">联系标题</TD>11
<TD bgColor="#ffffff">联系电话</TD>12
</TR>13
</TABLE>14
</HeaderTemplate>15
<ItemTemplate>16
<TABLE id="Table1" cellSpacing="1" cellPadding="0" width="100%" bgColor="#990033" border="0">17
<TR>18
<TD bgColor="#ffffff">19
<asp:Label id="Label1" runat="server" Width="40%">20
<%# DataBinder.Eval(Container.DataItem,"CompanyName")%>21
</asp:Label></TD>22
<TD bgColor="#ffffff">23
<asp:Label id="Label2" runat="server" Width="20%">24
<%# DataBinder.Eval(Container.DataItem,"ContactName")%>25
</asp:Label></TD>26
<TD bgColor="#ffffff">27
<asp:Label id="Label3" runat="server" Width="20%">28
<%# DataBinder.Eval(Container.DataItem,"ContactTitle")%>29
</asp:Label></TD>30
<TD bgColor="#ffffff">31
<asp:Label id="Label4" runat="server" Width="20%">32
<%# DataBinder.Eval(Container.DataItem,"Phone")%>33
</asp:Label></TD>34
</TR>35
</TABLE>36
</ItemTemplate>37
</asp:DataList></FONT>38
<TABLE id="Table3" cellSpacing="0" cellPadding="1" width="744" border="0">39
<TR>40
<TD style="height: 20px"><FONT face="宋体">41
<P align="center">42
<asp:LinkButton id="LinkButton1" runat="server" onclick="LinkButton1_Click">第一页</asp:LinkButton></P>43
</FONT>44
</TD>45
<TD style="height: 20px">46
<P align="center">47
<asp:LinkButton id="LinkButton2" runat="server" onclick="LinkButton2_Click">上一页</asp:LinkButton></P>48
</TD>49
<TD style="height: 20px">50
<P align="center">51
<asp:LinkButton id="LinkButton3" runat="server" onclick="LinkButton3_Click">下一页</asp:LinkButton></P>52
</TD>53
<TD style="height: 20px">54
<P align="center">55
<asp:LinkButton id="LinkButton4" runat="server" onclick="LinkButton4_Click">最后一页</asp:LinkButton></P>56
</TD>57
</TR>58
<TR>59
<TD colSpan="2">60
<P align="center"><FONT face="宋体">当前第61
<asp:Label id="Label5" runat="server"></asp:Label>页</FONT></P>62
</TD>63
<TD colSpan="2">64
<P align="center"><FONT face="宋体">总共65
<asp:Label id="Label6" runat="server"></asp:Label>页</FONT></P>66
</TD>67
</TR>68
</TABLE>69
</form>70
</body>后台代码如下:
1
using System;2
using System.Collections;3
using System.ComponentModel;4
using System.Data;5
using System.Drawing;6
using System.Web;7
using System.Web.SessionState;8
using System.Web.UI;9
using System.Web.UI.WebControls;10
using System.Web.UI.HtmlControls;11
using System.Data.SqlClient;12

13
namespace Paging14


{15
public partial class WebForm1 : System.Web.UI.Page16

{17

18
//定义每页显示的长度19
int pagesize=5;20
21
protected void Page_Load(object sender, System.EventArgs e)22

{23
int currentpage=1;//设置当前页为124

25
if(!IsPostBack)26

{27
BindCustomers(pagesize,currentpage);28
} 29
}30

31
void BindCustomers(int pagesize,int currentpage)32

{33
Label5.Text=currentpage.ToString();34

35
string str="server=.;uid=sa;pwd=;database=Northwind";36
SqlConnection con=new SqlConnection(str);37
SqlDataAdapter da=new SqlDataAdapter("myPaging",con);//定义用存储过程38
da.SelectCommand.CommandType=CommandType.StoredProcedure;39
da.SelectCommand.Parameters.Add("@pagesize",pagesize);//每页显示页数40
da.SelectCommand.Parameters.Add("@currentpage",currentpage);//当前页41
da.SelectCommand.Parameters.Add("@total",SqlDbType.Int);//总共数据的条数42
43
//指示参数是输出,Output参数是输出参数44
da.SelectCommand.Parameters["@total"].Direction=ParameterDirection.Output;45
con.Open();46
DataSet ds=new DataSet();47
da.Fill(ds);48
DataList1.DataSource=ds;49
DataList1.DataBind();50

51
//获得总共数据数目52
int total=Convert.ToInt32(da.SelectCommand.Parameters["@total"].Value);53
//获得总页数54

55
int totalpage=Convert.ToInt32(Math.Ceiling(total*1.0/pagesize));56

57
Label6.Text=totalpage.ToString();58

59
//设置导航按钮的状态60
if(Label5.Text=="1") //当前页为第一页61

{62
LinkButton1.Enabled=false;63
LinkButton2.Enabled=false;64
LinkButton3.Enabled=true;65
LinkButton4.Enabled=true;66
}67
else if (Label5.Text == Label6.Text) //当前页为最后一页68

{69
LinkButton1.Enabled=true;70
LinkButton2.Enabled=true;71
LinkButton3.Enabled=false;72
LinkButton4.Enabled=false;73
}74
else75

{76
LinkButton1.Enabled=true;77
LinkButton2.Enabled=true;78
LinkButton3.Enabled=true;79
LinkButton4.Enabled=true;80
}81
}82

83
protected void LinkButton1_Click(object sender, System.EventArgs e) //首页84

{85
Label5.Text="1";86
int currentpage=int.Parse(Label5.Text);87
BindCustomers(pagesize,currentpage);88
}89

90
protected void LinkButton4_Click(object sender, System.EventArgs e) //尾页91

{92
Label5.Text=Label6.Text;93
int currentpage=int.Parse(Label5.Text);94
BindCustomers(pagesize,currentpage);95
}96

97
protected void LinkButton2_Click(object sender, System.EventArgs e) // 上一页98

{99
int currentpage=int.Parse(Label5.Text);100
currentpage--;101
Label5.Text=currentpage.ToString();102
BindCustomers(pagesize,currentpage);103
}104

105
protected void LinkButton3_Click(object sender, System.EventArgs e) //下一页106

{107
int currentpage=int.Parse(Label5.Text);108
currentpage++;109
Label5.Text=currentpage.ToString();110
BindCustomers(pagesize,currentpage);111
}112
}113
}114

感谢你阅读本文,希望这篇文章给你带来帮助!
浙公网安备 33010602011771号