B/S模式分页

SqlServer数据库准备工作:
(1)创建一张表Students,字段有Id,Name,Sex,Phone

CREATE TABLE Students(
Id INT IDENTITY(1,1),
Name VARCHAR(20),
Sex BIT,
Phone VARCHAR(11)
)

(2)添加数据

INSERT INTO Students(name,sex,phone) VALUES(‘小明’,0,‘13111111111’)
INSERT INTO Students(name,sex,phone) VALUES(‘小华’,1,‘13222222222’)
INSERT INTO Students(name,sex,phone) VALUES(‘小张’,0,‘13333333333’)
INSERT INTO Students(name,sex,phone) VALUES(‘小李’,1,‘13444444444’)
INSERT INTO Students(name,sex,phone) VALUES(‘小玉’,1,‘13555555555’)
INSERT INTO Students(name,sex,phone) VALUES(‘贝贝’,1,‘13666666666’)
INSERT INTO Students(name,sex,phone) VALUES(‘花花’,1,‘13777777777’)
INSERT INTO Students(name,sex,phone) VALUES(‘小杨’,0,‘13888888888’)
(3)创建存储过程spPage,存储过程返回结果集和总记录数。sqlServer没有limit,实际上是使用ID作为分页的标识,所以必须保证ID的连续才能正常分页。也可以使用TOP关键字分,但是使用TOP分页的原理是需要查出结果再筛选的,如果数据量大,TOP并不是一个好的选择

CREATE PROCEDURE spPage
	@pageSize INT,		--每页显示的记录数
	@pageIndex INT 		--显示第几页
AS
BEGIN
	DECLARE @returnValue INT --记录总数

	SELECT @returnValue=COUNT(1) from Students(NOLOCK)

	--计算应返回的结果集
	SELECT * FROM Students(NOLOCK)
	WHERE Id>(@pageIndex-1)*@pageSize and Id<=@pageIndex*@pageSize

	RETURN @returnValue
END

后台准备工作:
(1)引入AspNetPager.dll工具

(2)在webConfig的system.web标签中加入如下代码:
在这里插入图片描述
(3)创建DataProvider类,用于建立数据库连接,主要保证连接数的唯一

public class DataProvider
{
    private static volatile SqlConnection sqlConnection;
    private static object lockObj = new object();
    public static SqlConnection getConnection(string connectionStr)
    {
        lock(lockObj)
        { 
            if(sqlConnection==null)
            {
                sqlConnection = new SqlConnection(connectionStr);
            }
            return sqlConnection;
        }
    }
}

(4)创建Pager类,用于分页,因为只是个Demo,没有做更多的扩展,如果要通用性,这里可以在加入表名,存储那边加个参数用动态sql拼表名

public class Pager
{
    private DataSet _data;   //数据结果集
    private int pageSize;   //每页显示的数据量
    private int pageIndex;  //显示第几页
    private int count;      //总记录数
    private int pageCount;   //总页数

    public Pager(int pageSize, int pageIndex)
    {
        SqlConnection sqlConnection=DataProvider.getConnection("Server=.;user=sa;pwd=sa;database=RYTreasureDB");
        SqlCommand sqlCommand = new SqlCommand("spPage", sqlConnection);
        sqlCommand.CommandType = CommandType.StoredProcedure;
        sqlCommand.Parameters.AddWithValue("@pageIndex", pageIndex);
        sqlCommand.Parameters.AddWithValue("@pageSize", pageSize);
        SqlParameter returnValue_count = new SqlParameter("@returnValue",SqlDbType.Int);
        returnValue_count.Direction = ParameterDirection.ReturnValue;
        sqlCommand.Parameters.Add(returnValue_count);
        DataSet ds = new DataSet();
        SqlDataAdapter sda = new SqlDataAdapter(sqlCommand);
        sda.Fill(ds);
        //绑定相关数据项
        _data = ds;
        this.pageSize = pageSize;
        this.pageIndex = pageIndex;
        this.count = Convert.ToInt32(returnValue_count.Value);
        this.pageCount = (int)Math.Ceiling((Double)count / pageSize);
    }
    public int PageIndex
    {
        get { return pageIndex; }
    }
    public int PageCount
    {
        get { return pageCount; }
    }
    public DataSet data
    {
        get { return this._data; }
    }
    public int Count
    {
        get { return count; }
    }
}

(5)在相应web窗体的cs文件中加入如下代码

	private static Pager page;
    protected void Page_Load(object sender, EventArgs e)
    {
        if (!IsPostBack)
        {
        	//anpPage为前端的组件ID,PageSize每页显示数,值由前端指定
            page = new Pager(anpPage.PageSize, 1);
            anpPage.RecordCount = page.Count;
            repeater.DataSource = page.data;
            repeater.DataBind();
        }
    }
    protected void anpPage_PageChanged(object sender, EventArgs e)
    {
        page = new Pager(anpPage.PageSize, anpPage.CurrentPageIndex);
        anpPage.RecordCount = page.Count;
        repeater.DataSource = page.data;
        repeater.DataBind();
    }

前台准备工作:

<form runat="server" id="form1">
    <table>
        <tr>
            <td>编号</td>
            <td>姓名</td>
            <td>性别</td>
            <td>电话</td>
        </tr>
        <asp:Repeater runat="server" ID="repeater">
            <ItemTemplate>
                <tr>
                    <td><%# Eval("id") %></td>
                    <td><%# Eval("name") %></td>
                    <td><%# Eval("sex").ToString() == "False"?"男":"女" %></td>
                    <td><%# Eval("phone") %></td>
                </tr>
            </ItemTemplate>
        </asp:Repeater>
        <tr>
            <td colspan="3">
                <gsp:AspNetPager ID="anpPage" OnPageChanged="anpPage_PageChanged" runat="server" AlwaysShow="true" FirstPageText="首页" LastPageText="末页" PageSize="5" NextPageText="下页" PrevPageText="上页" ShowBoxThreshold="0" ShowCustomInfoSection="Left" LayoutType="Table" NumericButtonCount="5" CustomInfoHTML="总记录:%RecordCount% 页码:%CurrentPageIndex%/%PageCount% 每页:%PageSize%" UrlPaging="false">
                </gsp:AspNetPager>
            </td>
        </tr>
    </table>
</form>

结果展示:
在这里插入图片描述
在这里插入图片描述

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值