这两天的成果:分页、CodeSmith简单三层模板

灵活的分页控件:

using System;
using System.Collections.Generic;
using System.Linq;
using System.Web;
using System.Text;
using System.Diagnostics;

namespace SearchSite.Ctrls
{
    public class RupengPager
    {
        /// <summary>
        /// 总数据条数
        /// </summary>
        public int TotalCount { get; set; }

        /// <summary>
        /// 每页数据条数
        /// </summary>
        public int PageSize { get; set; }

        /// <summary>
        /// 当前页码(从1开始)
        /// </summary>
        public int CurrentPageIndex { get; set; }

        /// <summary>
        /// 显示出来最多的页码数量,因为假设有100页,不可能把100页都显示到界面上
        /// </summary>
        public int MaxPagerCount { get; set; }

        /// <summary>
        /// 页码链接的地址格式,页码用{n}占位。
        /// </summary>
        public string UrlFormat { get; set; }

        public RupengPager()
        {
            PageSize = 10;
            MaxPagerCount = 10;
        }

        /// <summary>
        /// 尝试从字符串pn中解析当前页面赋值给CurrentPageIndex
        /// </summary>
        /// <param name="pn"></param>
        public void TryParseCurrentPageIndex(string pn)
        {
            int temp;
            if (int.TryParse(pn, out temp))
            {
                CurrentPageIndex = temp;
            }
            else
            {
                CurrentPageIndex = 1;
            }
        }

        /// <summary>
        /// 创建页码链接
        /// </summary>
        /// <param name="i">页码</param>
        /// <param name="text">链接文本</param>
        /// <returns></returns>
        private string GetPageLink(int i,string text)
        {
            StringBuilder sb = new StringBuilder();
            string url = UrlFormat.Replace("{n}", i.ToString());
            sb.Append("<a href='").Append(url).Append("'>").Append(text).Append("</a>");
            return sb.ToString();
        }
        private void Check()
        {
            Debug.Assert(PageSize>0);
            Debug.Assert(CurrentPageIndex >= 0);
            Debug.Assert(!string.IsNullOrWhiteSpace(UrlFormat));
        }
        public string Render()
        {
            Check();

            StringBuilder sb = new StringBuilder();
            //TotalCount=35,PageSize=10,pageCount=4

            //计算总页数,如果是30条,则是3页,31条也是3页,29条也是3页,因此是
            //天花板运算Ceiling
            double tempCount = TotalCount / PageSize;
            int pageCount = (int)Math.Ceiling(tempCount);

            //计算显示的页码数(当总页码大于MaxPagerCount)的起始页码
            int visibleStart = CurrentPageIndex-MaxPagerCount/2;
            if (visibleStart <1)
            {
                visibleStart = 1;
            }

            //计算显示的页码数(当总页码大于MaxPagerCount)的起始页码
            int visibleEnd = visibleStart + MaxPagerCount;
            //显示最多MaxPagerCount条
            //如果算出来的结束页码大于总页码的话则调整为最大页码
            if (visibleEnd >pageCount)
            {
                visibleEnd = pageCount;
            }

            if (CurrentPageIndex > 1)
            {
                sb.Append(GetPageLink(1, "首页"));
                sb.Append(GetPageLink(CurrentPageIndex - 1, "上一页"));
            }
            else
            {
                sb.Append("<span>首页</span>");
                //如果没有上一页了,则只显示一个上一页的文字,没有超链接
                sb.Append("<span>上一页</span>");
            }

            //绘制可视的页码链接
            for (int i = visibleStart; i < visibleEnd; i++)
            {
                //当前页不是超链接
                if (i == CurrentPageIndex)
                {
                    sb.Append("<span>").Append(i).Append("</span>");
                }
                else
                {
                    sb.Append(GetPageLink(i,i.ToString()));
                }               
            }
            if (CurrentPageIndex < pageCount)
            {
                sb.Append(GetPageLink(CurrentPageIndex + 1, "下一页"));
                sb.Append(GetPageLink(pageCount + 1, "末页"));
            }
            else
            {
                sb.Append("<span>下一页</span>");
                sb.Append("<span>末页</span>");
            }           
            return sb.ToString();
        }
    }
}

CodeSmith简单三层模板:http://files.cnblogs.com/rupeng/3Tiers.zip

有时间再写文章详细讲解。

如鹏网.Net培训班正在报名,有网络的地方就可以参加如鹏网的学习,学完就能高薪就业,点击此处了解

 

    三年前只要懂“三层架构”就可以说“精通分层架构”;现在则需要懂IOC(AutoFac等)、CodeFirst、lambda、DTO等才值钱;

    三年前只要会SQLServer就可以说自己“精通数据库开发”;现在则需还需要掌握MySQL等开源数据库才能说是“.Net开源”时代的程序员;

    三年前只要会进行用户上传内容的安全性处理即可;现在则需要熟悉云存储、CDN等才能在云计算时代游刃有余;

    三年前只要掌握Lucene.Net就会说自己“熟悉站内搜索引擎开发”;现在大家都用ElasticSearch了,你还用Lucene.Net就太老土了;

    三年前发邮件还是用SmtpClient;现在做大型网站发邮件必须用云邮件引擎;

    三年前缓存就是Context.Cache;现在则是Redis、Memcached的天下;

    如鹏网再次引领.Net社区技术潮流!点击此处了解如鹏网.Net最新课程

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值