简单分页控件

来源:互联网 发布:数学四大期刊 知乎 编辑:程序博客网 时间:2024/06/03 18:21

这几天无意间看到一个关于分页的帖子,觉得写得挺好的。关于这些东西,自己一直都是只知道原理,却没有真正动手做过,于是研究了一下分页的原理自己动手写了一个十分特别非常简单的分页程序,在这里与大家分享一下。

这个程序取数据使用的ado.net,首先先新建一个取数据的类PageDAl

using System;using System.Collections.Generic;using System.Configuration;using System.Data;using System.Data.Common;using System.Data.SqlClient;using System.Linq;using System.Web;namespace page.DAL{    public class PageDal    {        public DataTable GetUserList(out int totalCount, int pageIndex = 1, int pagesize = 10)        {            using (                SqlConnection coon =                    new SqlConnection(ConfigurationManager.ConnectionStrings["userConnection"].ConnectionString))            {                coon.Open();                string sqlCount = "select count(F_Id) from Sys_User";                SqlCommand cmd = new SqlCommand(sqlCount, coon);                totalCount = int.Parse(cmd.ExecuteScalar().ToString());                string sql = "select F_Account,F_RealName from (select *,Row_Number() over(order by F_Account) r from Sys_User)as w where r>{0} and r<={1};";                SqlDataAdapter ad = new SqlDataAdapter(String.Format(sql, (pageIndex - 1) * pagesize, (pageIndex * pagesize)), coon);                DataTable dt = new DataTable();                ad.Fill(dt);                return dt;            }        }    }}

然后记得修改一下webconfig里面的连接数据库的字符串,数据库自己随便建一个就行。

接下来是ashx一般处理程序,html页面把需求传过来,他在从PageDal中取数据。

using page.DAL;using System;using System.Collections.Generic;using System.Data;using System.Linq;using System.Text;using System.Web;namespace page{    /// <summary>    /// WebHandler 的摘要说明    /// </summary>    public class WebHandler : IHttpHandler    {        public void ProcessRequest(HttpContext context)        {            try            {                int pageIndex = int.Parse(context.Request.Form["pageindex"]);                int pageSize = int.Parse(context.Request.Form["pagesize"]);                PageDal pd = new PageDal();                int totalCount;                DataTable dt = pd.GetUserList(out totalCount, pageIndex, pageSize);                string json = ToJson(dt, "data", totalCount);                context.Response.ContentType = "text/plain";                context.Response.Write(json);            }            catch            {                context.Response.Write("error");            }        }        public bool IsReusable        {            get            {                return false;            }        }        /// <summary>        /// DataTable转换为Json        /// </summary>        public static string ToJson(DataTable dt, string jsonName, int count)        {            StringBuilder Json = new StringBuilder();            if (string.IsNullOrEmpty(jsonName))                jsonName = dt.TableName;            Json.Append("{\"" + jsonName + "\":[");            if (dt.Rows.Count > 0)            {                for (int i = 0; i < dt.Rows.Count; i++)                {                    Json.Append("{");                    for (int j = 0; j < dt.Columns.Count; j++)                    {                        Type type = dt.Rows[i][j].GetType();                        Json.Append("\"" + dt.Columns[j].ColumnName.ToString() + "\":" + StringFormat(dt.Rows[i][j].ToString(), type));                        if (j < dt.Columns.Count - 1)                        {                            Json.Append(",");                        }                    }                    Json.Append("}");                    if (i < dt.Rows.Count - 1)                    {                        Json.Append(",");                    }                }            }            Json.Append("],");            Json.Append("\"count\":" + count + "}");            return Json.ToString();        }        /// <summary>        /// 格式化字符型、日期型、布尔型        /// </summary>        /// <param name="str"></param>        /// <param name="type"></param>        /// <returns></returns>        private static string StringFormat(string str, Type type)        {            if (type == typeof(string))            {                str = String2Json(str);                str = "\"" + str + "\"";            }            else if (type == typeof(DateTime))            {                str = "\"" + str + "\"";            }            else if (type == typeof(bool))            {                str = str.ToLower();            }            else if (type != typeof(string) && string.IsNullOrEmpty(str))            {                str = "\"" + str + "\"";            }            return str;        }        /// <summary>        /// 过滤特殊字符        /// </summary>        /// <param name="s">字符串</param>        /// <returns>json字符串</returns>        private static string String2Json(String s)        {            StringBuilder sb = new StringBuilder();            for (int i = 0; i < s.Length; i++)            {                char c = s.ToCharArray()[i];                switch (c)                {                    case '\"':                        sb.Append("\\\""); break;                    case '\\':                        sb.Append("\\\\"); break;                    case '/':                        sb.Append("\\/"); break;                    case '\b':                        sb.Append("\\b"); break;                    case '\f':                        sb.Append("\\f"); break;                    case '\n':                        sb.Append("\\n"); break;                    case '\r':                        sb.Append("\\r"); break;                    case '\t':                        sb.Append("\\t"); break;                    default:                        sb.Append(c); break;                }            }            return sb.ToString();        }    }}

最后就是html代码了

<!DOCTYPE html><html xmlns="http://www.w3.org/1999/xhtml"><head>    <meta http-equiv="Content-Type" content="text/html; charset=utf-8" />    <script src="../Content/jquery/jquery-1.11.1.min.js"></script>    <title></title></head><body>    <table id="datatable"></table>    <div id="pageination" style="width: 100%">        <a href="javascript:void(0);" onclick="GoFirst()">首页</a>&nbsp;<a href="javascript:void(0);" onclick="GoPre()">上一页</a>&nbsp;&nbsp;<span>当前<input id="pageindex" type="text" style="width:20px" value="1" disabled="disabled" />页,总共<input id="totalcount" type="text" style="width:20px" value="" disabled="disabled" />条数据,共<input id="pagecount" type="text" style="width:20px" value="" disabled="disabled" />页</span>&nbsp;&nbsp;<a href="javascript:void(0);" onclick="GoNext()">下一页</a>&nbsp;<a href="javascript:void(0);" onclick="GoLast()">尾页</a>    </div></body></html><script>    var pageindex = 1;    var pagesize = 15;    $(function () {        search();    });    function search() {        $.ajax({            url: "../WebHandler.ashx",            type: "post",            data: {                "pagesize": pagesize,                "pageindex": pageindex            },            success: function (daa) {                var json = JSON.parse(daa);                var tab = $("#datatable");                tab.empty();                for (var i = 0; i < json.data.length ; i++) {                    tab.append("<tr><td>" +                        json.data[i].F_Account +                        "</td><td>" +                        json.data[i].F_RealName +                        "</td></tr>");                }                var count = json.count;                var pagecount = Math.ceil(count / pagesize);                $("#totalcount").val(count);                $("#pagecount").val(pagecount);            }        });    };    function GoFirst() {        pageindex = 1;        $("#pageindex").val(pageindex);        search();    };    function GoLast() {        var pageindex = $("#pagecount").val();        $("#pageindex").val(pageindex);        search();    };    function GoPre() {        if (pageindex > 1) {            pageindex = pageindex - 1;            $("#pageindex").val(pageindex);            search();        } else {            alert("这是第一页!");        }    };    function GoNext() {        var pagecount = $("#pagecount").val();        if (pageindex < pagecount) {            pageindex = pageindex + 1;            $("#pageindex").val(pageindex);            search();        } else {            alert("这是最后一页!");        }    };</script>

看完那篇帖子自己又对照的看了一下公司做的分页,总结了一下,以前都没认真想过关于分页的东西,觉得还挺难的,但经过一次总结发现其实只要你按顺序一点一点理清楚,有一个清晰的思路,完全不难的。

首先取数据,分两个部分,一个是把所有的数据个数统计出来另一个是取当前页码的数据,这个是很简单的,自己把有关的sql语句写好就行,sql语句的写法有很多,我取当前页码用的语句是

select F_Account,F_RealName from (select *,Row_Number() over(order by F_Account) r from Sys_User)as w where r> (pageIndex - 1) * pagesize and r<=pageIndex* pagesize

数据取出来之后就是把页面栏拼好,并且把相关的方法写好,比如说首页,前一页,下一页,尾页等,之后把数据总数传过来,计算页数就OK了。

<div id="pageination" style="width: 100%">        <a href="javascript:void(0);" onclick="GoFirst()">首页</a>&nbsp;<a href="javascript:void(0);" onclick="GoPre()">上一页</a>&nbsp;&nbsp;<span>当前<input id="pageindex" type="text" style="width:20px" value="1" disabled="disabled" />页,总共<input id="totalcount" type="text" style="width:20px" value="" disabled="disabled" />条数据,共<input id="pagecount" type="text" style="width:20px" value="" disabled="disabled" /></span>&nbsp;&nbsp;<a href="javascript:void(0);" onclick="GoNext()">下一页</a>&nbsp;<a href="javascript:void(0);" onclick="GoLast()">尾页</a>    </div>function GoFirst() {        pageindex = 1;        $("#pageindex").val(pageindex);        search();    };    function GoLast() {        var pageindex = $("#pagecount").val();        $("#pageindex").val(pageindex);        search();    };    function GoPre() {        if (pageindex > 1) {            pageindex = pageindex - 1;            $("#pageindex").val(pageindex);            search();        } else {            alert("这是第一页!");        }    };    function GoNext() {        var pagecount = $("#pagecount").val();        if (pageindex < pagecount) {            pageindex = pageindex + 1;            $("#pageindex").val(pageindex);            search();        } else {            alert("这是最后一页!");        }    };

 

阅读全文
'); })();
0 0
原创粉丝点击
热门IT博客
热门问题 老师的惩罚 人脸识别 我在镇武司摸鱼那些年 重生之率土为王 我在大康的咸鱼生活 盘龙之生命进化 天生仙种 凡人之先天五行 春回大明朝 姑娘不必设防,我是瞎子 黍子面的吃法 黍子是什么 黍离诗经 诗经黍离朗诵 黍离之悲的典故 王爷在下妃在上 黍离 黍稷 黍米是什么米 黍米图片 黍米的图片 逆袭黎南 黎南全文免费阅读 黎南杨小丽 黎氏三兄弟 黎丹 黎丹图片 黎伟 汪小壹和黎伟结婚照片 黎傲 黎光 唐世李家 黎光 黎兵 黎兵个人资料 青青和黎叔 黎叔 黎叔教你 黎叔和箐箐全文阅读 黎城 黎城县 九黎城 上黎城营 黎城二手房 黎城房价 黎城征婚网 黎城暮光 山西黎城 黎城吧 黎城在线 九黎城门票多少元一人 潞城到黎城的火车