当前位置:首页 > ASP.NET 数据列表控件的分页总结(二):使用存储过程分页

ASP.NET 数据列表控件的分页总结(二):使用存储过程分页

点击次数:1109  更新日期:2010-12-31
\n

当数据库的数据量比较大,对执行效率要求比较高的时候,我们可以考虑使用存储过程来实现分页,根据传入的页数返回需要显示的数据表,仅仅select出当前页的数据。(这个比使用PagedDataSource类而言效率要高。)


\n

现在采用Repeater来实现一个数据分页,数据库采用SQL server2000,利用里面的系统表Northwind。


\n

新建存储过程如下:


\n

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


\n

若不会写存储过程的话,可以参照网站在线生成分页的存储过程:http://www.webdiyer.com/AspNetPager/utility/sqlspgen.aspx


\n


\n

前台代码:


\n

Code
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>
后台代码如下:


\n

Code
1using System;
2using System.Collections;
3using System.ComponentModel;
4using System.Data;
5using System.Drawing;
6using System.Web;
7using System.Web.SessionState;
8using System.Web.UI;
9using System.Web.UI.WebControls;
10using System.Web.UI.HtmlControls;
11using System.Data.SqlClient;
12
13namespace Paging
14{
15 public partial class WebForm1 : System.Web.UI.Page
16 {
17
18 //定义每页显示的长度
19 int pagesize=5;
20
21 protected void Page_Load(object sender, System.EventArgs e)
22 {
23 int currentpage=1;//设置当前页为1
24
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 else
75 {
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
感谢你阅读本文,希望这篇文章给你带来帮助!


\n

上一篇:ASP.NET 数据列表控件的分页总结(一)—–自定义方法分页和PageDataSource类分页


\n

来源:http://www.cnblogs.com/songliang

\n