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

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

当数据库的数据量比较大,对执行效率要求比较高的时候,我们可以考虑使用存储过程来实现分页,根据传入的页数返回需要显示的数据表,仅仅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>

后台代码如下:

 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

感谢你阅读本文,希望这篇文章给你带来帮助!