佳木斯湛栽影视文化发展公司

主頁 > 知識庫 > 一個Asp.Net的顯示分頁方法 附加實體轉(zhuǎn)換和存儲過程 帶源碼下載

一個Asp.Net的顯示分頁方法 附加實體轉(zhuǎn)換和存儲過程 帶源碼下載

熱門標簽:阿里云 團購網(wǎng)站 銀行業(yè)務(wù) Mysql連接數(shù)設(shè)置 電子圍欄 服務(wù)器配置 Linux服務(wù)器 科大訊飛語音識別系統(tǒng)

之前自己一直用Aspnetpager控件來顯示項目中的分頁,但是每次都要拖一個aspnetpager的控件進去,感覺很不舒服,因為現(xiàn)在自己寫的webform都不用服務(wù)器控件了,所以自己仿照aspnetpager寫了一個精簡實用的返回分頁顯示的html方法,其他話不說了,直接上代碼。
分頁顯示信息的實體類:

復(fù)制代碼 代碼如下:

public class Pager
    {
        private string _firstPageText;
        /// summary>
        /// 最前一頁文字顯示 默認顯示為"首頁"
        /// /summary>
        public string FirstPageText
        {
            get {
                return string.IsNullOrEmpty(_firstPageText)? "首頁" : _firstPageText;
            }
            set {
                _firstPageText = value;
            }
        }
        private string _prePageText;
        /// summary>
        /// 上一頁文字顯示 默認顯示為"上一頁"
        /// /summary>
        public string PrePageText
        {
            get
            {
                return string.IsNullOrEmpty(_prePageText) ? "上一頁" : _prePageText;
            }
            set
            {
                _prePageText = value;
            }
        }
        private string _nextPageText;
        /// summary>
        /// 下一頁文字顯示 默認顯示為"下一頁"
        /// /summary>
        public string NextPageText
        {
            get
            {
                return string.IsNullOrEmpty(_nextPageText) ? "下一頁" : _nextPageText;
            }
            set
            {
                _nextPageText = value;
            }
        }
        private string _lastPageText;
        /// summary>
        /// 末頁文字顯示 默認顯示為"末頁"
        /// /summary>
        public string LastPageText
        {
            get
            {
                return string.IsNullOrEmpty(_lastPageText) ? "末頁" : _lastPageText;
            }
            set
            {
                _lastPageText = value;
            }
        }
        /// summary>
        /// 總記錄數(shù)
        /// /summary>
        public int RecordCount { get; set; }
        private int _pagesize=15;
        /// summary>
        /// 每頁分頁尺寸 默認為15
        /// /summary>
        public int PageSize {
            get {
                return _pagesize == 0 ? 15 : _pagesize;
            }set{
                _pagesize = value;
            }
        }
        private int _pageIndex=1;
        /// summary>
        /// 當(dāng)前頁碼
        /// /summary>
        public int PageIndex {
            get {
                return _pageIndex == 0 ? 1 : _pageIndex;
            }
            set {
                _pageIndex = value;
            }
        }
        private int _maxShowPageSize = 10;
        /// summary>
        /// 顯示頁碼列表的最大個數(shù) 默認為10
        /// /summary>
        public int MaxShowPageSize {
            get {
                return _maxShowPageSize;
            }
            set {
                _maxShowPageSize = value;
            }
        }
        private string _queryStringName;
        /// summary>
        /// 頁碼在瀏覽器中傳值的名稱  默認為page
        /// /summary>
        public string QueryStringName {
            get {
                return string.IsNullOrEmpty(_queryStringName)? "page" : _queryStringName;
            }
            set {
                _queryStringName = value;
            }
        }
        /// summary>
        /// 頁面的URL
        /// /summary>
        public string URL {
            get {
                string url = HttpContext.Current.Request.Url.AbsoluteUri;//當(dāng)前頁面絕對路徑
                if (EnableUrlRewriting)//使用url重寫
                {
                    url=url.Substring(0, url.LastIndexOf("/") + 1);//獲取當(dāng)前頁面的目錄路徑
                    url += UrlRewritePattern;
                }
                else {//普通帶問號的頁面?zhèn)髦?BR>                    //demo.aspx
                    //demo.aspx?a=1
                    //demo.aspx?page=1
                    //demo.aspx?a=2page=1
                    if (url.Contains("aspx?"))
                    {
                        if (Regex.IsMatch(url,@"page=[0-9]*$",RegexOptions.IgnoreCase))//如果存在page=*的字符串
                        {
                            url = Regex.Replace(url, @"page=[0-9]*$", "", RegexOptions.IgnoreCase);//替換掉page=*的字符串
                        }
                        url += QueryStringName + "={0}";
                    }
                    else {
                        url += "?" + QueryStringName + "={0}";
                    }
                }
                return url;
            }
        }
        private bool _enableUrlRewriting;
        /// summary>
        /// URL是否重寫 默認為flase
        /// /summary>
        public bool EnableUrlRewriting {
            get {
                return (object)_enableUrlRewriting == null ? false : _enableUrlRewriting;
            }
            set {
                _enableUrlRewriting = value;
            }
        }
        /// summary>
        /// 頁面URL重寫規(guī)則,將頁碼傳值用{0}來代替  比如list-1-{0}.html,啟用該功能需要將EnableUrlRewriting屬性設(shè)為true
        /// /summary>
        public string UrlRewritePattern { get; set; }
        private string _className;
        /// summary>
        /// 分頁容器的css名稱
        /// /summary>
        public string ClassName {
            get {
                return string.IsNullOrEmpty(_className) ? "paginator" : _className;
            }set{
                _className = value;
            }
        }
        private string _currentPageCss;
        /// summary>
        /// 當(dāng)前頁面按鈕css
        /// /summary>
        public string CurrentPageButtonCss {
            get {
                return string.IsNullOrEmpty(_currentPageCss) ? "cpb" : _currentPageCss;
            }set{
                _currentPageCss = value;
            }
        }
        private bool _showSpanText;
        /// summary>
        /// Span 標簽中文字信息是否顯示 默認為false不顯示
        /// /summary>
        public bool ShowSpanText {
            get {
                return (object)_showSpanText == null ? false : _showSpanText;
            }
            set {
                _showSpanText = value;
            }
        }
        private string _spanTextClass;
        /// summary>
        /// 分頁文字描述span標簽css
        /// /summary>
        public string SpanTextClass {
            get {
                return string.IsNullOrEmpty(_spanTextClass) ? "stc" : _spanTextClass;
            }
            set {
                _spanTextClass = value;
            }
        }
        private string _submitButtonText;
        /// summary>
        /// 確定按鈕文字顯示 默認顯示"確定"
        /// /summary>
        public string SubmitButtonText {
            get {
                return string.IsNullOrEmpty(_submitButtonText) ? "確定" : _submitButtonText;
            }
            set {
                _submitButtonText = value;
            }
        }
    }

分頁顯示html代碼的拼接方法:
復(fù)制代碼 代碼如下:

public class SplitManager
    {
                public static string AspNetPagers(Pager pager)
        {
            StringBuilder sb = new StringBuilder();
            string attr="";
            int pagecount = 0;//當(dāng)前頁面的總層數(shù)
            int floorcount = 0;//分頁的總層數(shù)
            int currentLastPage = 0;//當(dāng)前最后一頁的頁碼
            int pageNum = pager.RecordCount / pager.PageSize + 1;//總頁數(shù) 1~24
            sb.AppendFormat("div class=\"{0}\">\n", pager.ClassName);
            attr=pager.PageIndex==1?"disabled=disabled":"";//標志當(dāng)前頁第一頁是否相等 來控制前倆個按鈕的有效性
            sb.AppendFormat(GetAHtml(attr,string.Format(pager.URL,1),pager.FirstPageText));//添加最前一頁的代碼
            sb.AppendFormat(GetAHtml(attr, string.Format(pager.URL, pager.PageIndex-1), pager.PrePageText));//添加上一頁的代碼
            pagecount = pager.PageIndex/pager.MaxShowPageSize;//當(dāng)前頁數(shù) 0~1~2
            pagecount = pager.PageIndex % pager.MaxShowPageSize == 0 ? pagecount - 1 : pagecount;//清除當(dāng) 當(dāng)前頁數(shù)為分頁頁碼數(shù)的整數(shù)倍頁時除數(shù)多一的狀況
            floorcount = pageNum / pager.MaxShowPageSize;//頁面層數(shù) 0~1~2
            currentLastPage=pageNumpager.MaxShowPageSize * (pagecount + 1)?pageNum:pager.MaxShowPageSize * (pagecount + 1);
            if (pager.PageIndex > pager.MaxShowPageSize)//當(dāng)當(dāng)前序號大于每頁頁碼個數(shù)時顯示再前端...
            {
                sb.AppendFormat(GetAHtml("", string.Format(pager.URL, pager.MaxShowPageSize * pagecount), "..."));
            }
            for (int i = pager.MaxShowPageSize * pagecount + 1; i = currentLastPage; i++)
            {
                if (i == pager.PageIndex)//判斷循環(huán)頁面是否為當(dāng)前頁
                {
                    sb.AppendFormat(GetSpanHtml(i, pager.CurrentPageButtonCss));
                }
                else {
                    sb.AppendFormat(GetAHtml("", string.Format(pager.URL, i),i.ToString()));
                }
            }
            if (pager.PageIndex = pager.MaxShowPageSize * floorcount)//當(dāng)當(dāng)前序號小于倒數(shù)第二頁頁碼時顯示在后端...
            {
                sb.AppendFormat(GetAHtml("", string.Format(pager.URL, pager.MaxShowPageSize * (pagecount + 1) + 1), "..."));
            }
            attr = pager.PageIndex == pageNum ? "disabled=disabled" : "";//標志當(dāng)前頁最后一頁是否相等 來控制后倆個按鈕的有效性
            sb.AppendFormat(GetAHtml(attr, string.Format(pager.URL, pager.PageIndex+1), pager.NextPageText));//添加后一頁的代碼
            sb.AppendFormat(GetAHtml(attr, string.Format(pager.URL, pageNum), pager.LastPageText));//添加最后一頁的代碼
            if (pager.ShowSpanText)//是否顯示分頁文字span標簽顯示
            {
                sb.AppendFormat("span class=\"" + pager.SpanTextClass + "\">共{0}頁,每頁{1}條記錄 \n", pageNum, pager.PageSize);
                sb.AppendFormat("到第input type=\"input\" id=\"jumpNum\" style=\"width:20px;\" name=\"jump\" value=\"{0}\" />頁", pager.PageIndex == pageNum ? pageNum : pager.PageIndex + 1);
                sb.AppendFormat("a href=\"#\" style=\"float:none;\" onclick=\"javascript:jump();\">" + pager.SubmitButtonText + "/a>/span>\n");
                sb.Append(GetJumpScript(pager.URL));//添加按鈕跳轉(zhuǎn)的javascript代碼
            }
            sb.AppendFormat("/div>");//
            return sb.ToString();
        }
        /// summary>
        /// get the html of a label
        /// /summary>
        /// param name="title">a's title/param>
        /// param name="url">the url of a/param>
        /// param name="attr">the attribute/param>
        /// returns>return html string/returns>
        private static string GetAHtml(string attr,string url,string title)
        {
            return "a " + attr + " href=\""+url+"\" style=\"margin-right:5px;\">"+title+"/a>\n";
        }
        /// summary>
        /// get the html of a label
        /// /summary>
        /// param name="num">the content of span/param>
        /// param name="className">Class style Name/param>
        /// returns>return html string /returns>
        private static string GetSpanHtml(int num, string className)
        {
            return "span class=\"" + className + "\">" + num + "/span>\n";
        }
        /// summary>
        /// 獲取跳轉(zhuǎn)的javascript代碼
        /// /summary>
        /// param name="url">當(dāng)前分頁的url規(guī)則/param>
        /// returns>返回一個javascript代碼/returns>
        private static string GetJumpScript(string url)
        {
            string scriptstr = "script type=\"text/javascript\">\n" +
                        "function jump(){\n" +
                            "var jnum=document.getElementById(\"jumpNum\").value;\n" +
                            "if(isNaN(jnum)){\n"+
                                "alert(\"在跳轉(zhuǎn)框中請輸入數(shù)字!\");\n" +
                                "}\n"+
                            "else{\n"+
                                //"alert(jnum);\n" +
                                "location.href=String.format(\"" + url + "\",jnum);\n" +
                            "}\n"+
                        "}\n"+
                        "String.format = function() {\n"+
                            "if( arguments.length == 0 )\n"+
                                "return null; \n"+
                            "var str = arguments[0]; \n"+
                            "for(var i=1;iarguments.length;i++) {\n"+
                                "var re = new RegExp('\\\\{' + (i-1) + '\\\\}','gm');\n"+
                                "str = str.replace(re, arguments[i]);\n"+
                            "}\n"+
                            "return str;\n"+
                        "}\n"+
                "/script>\n";
            return scriptstr;
        }
    }

最精簡必要的幾個參數(shù)傳進去就能顯示分頁效果了:
復(fù)制代碼 代碼如下:

protected string str = "";
        protected void Page_Load(object sender, EventArgs e)
        {
            Pager pager = new Pager() { RecordCount = 350,
                PageSize = 15,
                MaxShowPageSize=10,
                PageIndex = Convert.ToInt32(Request.QueryString["page"]),
            ShowSpanText=true};
            str = SplitManager.AspNetPagers(pager);
        }

仿csdn的分頁的效果圖

供測試的css:
復(fù)制代碼 代碼如下:

View Code
style type="text/css">
        /*分頁樣式控制的開始*/
.paginator { font: 12px Arial, Helvetica, sans-serif;
             padding:10px 20px 10px 0;
             margin: 0px;}
.paginator a {border:solid 1px #ccc;
              color:#0063dc;
              cursor:pointer;
              text-decoration:none;}
.paginator a:visited {padding: 1px 6px;
                      border: solid 1px #ddd;
                      background: #f0f1f1;
                      text-decoration: none;}
.paginator .cpb {border:1px solid #14316b;
                 font-weight:700;
                 color:#f0f1f1;
                 background-color:#1f3d76;}
.paginator a:hover {border:solid 1px #14316b;
                    color:#14316b;
                    text-decoration:none;}
.paginator a,.paginator a:visited,.paginator .cpb,.paginator a:hover{float:left;
                                                                     height:16px;
                                                                     line-height:16px;
                                                                     min-width:10px;_width:10px;
                                                                     margin-right:5px;
                                                                     text-align:center;
                                                                     white-space:nowrap;
                                                                     font-size:12px;
                                                                     font-family:
                                                                     Arial,SimSun;
                                                                     padding:0 3px;}
.paginator .stc{color:#999;margin-left:20px;}
.paginator .stc a{margin-left:10px;}
/*分頁樣式控制的結(jié)束*/
    /style>

同時配合為了配合分頁,再給出一個DataTable轉(zhuǎn)泛型列表的一個方法和一個分頁存儲過程。
此轉(zhuǎn)換方法需配合相應(yīng)的實體類,并且實體類中需對象相應(yīng)表的字段名,不區(qū)分大小寫。
復(fù)制代碼 代碼如下:

 #region DataTable To List/Model
        /// summary>
        /// DataTable To List
        /// /summary>
        /// typeparam name="TType">object type/typeparam>
        /// param name="dt">DataTable/param>
        /// returns>return a List Model type/returns>
        public static ListT> DataTableToObjectListT>(DataTable dt) where T : new()
        {
            DataRowCollection drc = dt.Rows;
            int columncount = drc.Count;
            ListT> result = new ListT>();    //declare the generic type of return
            Type type = typeof(T);
            PropertyInfo[] propertys = type.GetProperties(BindingFlags.IgnoreCase|BindingFlags.Instance|BindingFlags.Public|BindingFlags.SetProperty);   //get the collections of the model
            foreach (DataRow r in drc)
            {
                result.Add(DataRowToObjectModelT>(r, propertys));
            }    
            return result;
        }
        /// summary>
        /// DataRow To a Model
        /// /summary>
        /// typeparam name="T">the type of Model/typeparam>
        /// param name="r">DataRow/param>
        /// param name="propertys">the object to Model/param>
        /// returns>return a Model Type/returns>
        private static T DataRowToObjectModelT>(DataRow r, PropertyInfo[] propertys) where T : new()
        {
            T t = new T();
            for (int i = 0; i propertys.Length; i++)
            {
                object obj = r[propertys[i].Name];
                if (obj != null)
                {
                    if (propertys[i].PropertyType == typeof(int))
                        propertys[i].SetValue(t, PublicMethod.GetInt(obj), null);
                    if (propertys[i].PropertyType == typeof(string))
                        propertys[i].SetValue(t, obj.ToString(), null);
                    if (propertys[i].PropertyType == typeof(DateTime))
                        propertys[i].SetValue(t, PublicMethod.GetDateTime(obj), null);
                }
            }
            return t;
        }
        #endregion

分頁存儲過程。
復(fù)制代碼 代碼如下:

CREATE PROCEDURE [dbo].[proc_SplitPage]
    -- Add the parameters for the stored procedure here
    @tblName   varchar(255),       -- 表名
    @strFields varchar(1000) = '*', -- 需要返回的列,默認*
    @strOrder varchar(255)='',      -- 排序的字段名,必填
    @strOrderType varchar(10)='ASC', -- 排序的方式,默認ASC
    @PageSize   int = 10,          -- 頁尺寸,默認10
    @PageIndex int = 1,           -- 頁碼,默認1
    @strWhere varchar(1500) = '' -- 查詢條件 (注意: 不要加 where)
AS
declare @strSQL   varchar(5000)
if @strWhere !=''
set @strWhere=' where '+@strWhere
set @strSQL=
'SELECT '+@strFields+' FROM ('+
    'SELECT ROW_NUMBER() OVER (ORDER BY '+@strOrder+' '+@strOrderType+') AS pos,'+@strFields+' '+
    'FROM '+@tblName+' '+@strWhere+
') AS sp
WHERE pos BETWEEN '+str((@PageIndex-1)*@PageSize+1)+' AND '+str(@PageIndex*@PageSize)
exec (@strSQL)

以上是全部代碼,由于本人還是新手,請大家查找問題并指導(dǎo),謝謝。
有些朋友需要源碼的再此下載,方便測試

您可能感興趣的文章:
  • 分享一個asp.net pager分頁控件
  • Asp.Net數(shù)據(jù)控件引用AspNetPager.dll分頁實現(xiàn)代碼
  • asp.net中使用自定義控件的方式實現(xiàn)一個分頁控件的代碼
  • asp.net jquery無刷新分頁插件(jquery.pagination.js)
  • asp.net自定義分頁控件示例
  • asp.net利用后臺實現(xiàn)直接生成html分頁的方法
  • ASP.NET MVC 5使用X.PagedList.Mvc進行分頁教程(PagedList.Mvc)
  • 簡單好用的ASP.NET分頁類(支持AJAX、自定義文字)
  • asp.net中如何調(diào)用sql存儲過程實現(xiàn)分頁
  • ASP.NET MVC4 HtmlHelper擴展類,實現(xiàn)分頁功能

標簽:萍鄉(xiāng) 江蘇 廣元 蚌埠 衡水 棗莊 大理 衢州

巨人網(wǎng)絡(luò)通訊聲明:本文標題《一個Asp.Net的顯示分頁方法 附加實體轉(zhuǎn)換和存儲過程 帶源碼下載》,本文關(guān)鍵詞  ;如發(fā)現(xiàn)本文內(nèi)容存在版權(quán)問題,煩請?zhí)峁┫嚓P(guān)信息告之我們,我們將及時溝通與處理。本站內(nèi)容系統(tǒng)采集于網(wǎng)絡(luò),涉及言論、版權(quán)與本站無關(guān)。
  • 相關(guān)文章
  • 收縮
    • 微信客服
    • 微信二維碼
    • 電話咨詢

    • 400-1100-266
    荆州市| 安乡县| 隆化县| 林口县| 江达县| 通辽市| 顺义区| 宝鸡市| 阿瓦提县| 高碑店市| 彭泽县| 瓦房店市| 洛扎县| 阿合奇县| 宜都市| 双流县| 甘孜县| 墨竹工卡县| 南昌市| 监利县| 郯城县| 淮北市| 铁岭市| 沧源| 盐池县| 藁城市| 巢湖市| 余姚市| 新民市| 绥芬河市| 肇东市| 柳河县| 新营市| 克拉玛依市| 福贡县| 东港市| 雷山县| 宾阳县| 平利县| 安多县| 沂源县|