Asp.Net自定义分页控件(前台/后台)有图

 

Asp.Net自定义分页控件(前台/后台)有图
2008年10月15日 星期三 05:42 P.M.

    用了一天的时间整理了上一家公司后台用的分页类和分页控件,然后结合网上的一些事例,因此有了前台分页控件,很实用的控件,在这里跟大家分享下。

    前序:分页控件.ascx和页面之间沟通的方式有很多(读者可以去网上找找),这里的分页后台控件跟页面间的沟通方式是用了ViewState来记录当前的CurrentPage,通过分页类获取PageCount,ItemCount返回给分页控件。(当数据上百万(我测试的时候是250万)的时候,这个分页控件有点慢2-5秒,主要是由于绑定后面的DropDownList,读者可以自己改成输入数字的方式,我正在修改)。

              前台分页控件就非常好用,做的时候参考了张子阳的分页控件,测试的时候翻页页面几乎不动。^_^,其实这些跟控件没有关系,就跟分页的SQL有关系,控件只是展示用的。btw,我用的是SQL语句,没有用存储过程。


    <1>先来看后台控件:

     1.1.截图:

分页效果图
    1.2.控件用法:

    //四个LinkButton的代码:
    protected void lbFirstPage_Click(object sender, EventArgs e)
    {
        CurrentPage = 1;
    }

    protected void lbPreviousPage_Click(object sender, EventArgs e)
    {
        if (CurrentPage > 1)
        {
            CurrentPage = CurrentPage - 1;
        }
    }

    protected void lbNextPage_Click(object sender, EventArgs e)
    {
        if (CurrentPage < PageCount)
        {
            CurrentPage = CurrentPage + 1;
        }
    }

    protected void lbLastPage_Click(object sender, EventArgs e)
    {
        CurrentPage = PageCount;
    }

    //1.3控件属性
    private bool mbChanged = false;

    #region property

    public int PageCount
    {
        get
        {
            if (ViewState["PageCount"] == null) return 1;
            else return (int)ViewState["PageCount"];
        }
        set
        {
            ddlPage.Items.Clear();
            if (value < 1) value = 1;
            for (int i = 1; i <= value; i++)
            {
                ddlPage.Items.Add(new ListItem("第" + i + "/" + value + "页", i.ToString()));
            }
            ViewState["PageCount"] = value;
        }
    }

    public int ItemCount
    {
        set
        {
            lblPageInfo.Text = "(" + value + "条)";
        }
    }

    public int CurrentPage
    {
        get
        {
            if (ViewState["CurrentPage"] == null) CurrentPage = 1;
            return (int)ViewState["CurrentPage"];
        }
        set
        {
            ViewState["CurrentPage"] = value;
            mbChanged = true;
        }
    }

    public bool Changed
    {
        get { return mbChanged; }
    }

    #endregion

   //1.4页面调用
   private const int miPageSize = 10;
    private bool mbRebind = false;

    protected void Page_PreRender(object sender, EventArgs e)
    {
        if (myPaging.Changed) mbRebind = true;
        if (!IsPostBack || mbRebind) BindData();
    }

    private void BindData()
    {
        string sKeyword = string.Empty;
        string sOrderBy = string.Empty;
        int iPageSize = miPageSize;
        int? iTopCount = null;               //当iTopCount<iPageSize,取后者.为null时获取所有数据.
        int iCurrentPage = myPaging.CurrentPage;
        int iItemCount;
        int iPageCount;

        MyPage.BLL.User user = new MyPage.BLL.User();
        IList<UserInfo> userList = user.GetUserList("", sKeyword, sOrderBy, iPageSize, ref iTopCount, ref iCurrentPage, out iItemCount, out iPageCount);
        rptMain.DataSource = userList;
        rptMain.DataBind();

        myPaging.CurrentPage = iCurrentPage;
        myPaging.ItemCount = iItemCount;
        myPaging.PageCount = iPageCount;
    }


     <2>前台控件

     2.1还是先看效果图
     

    2.2代码贴上来可能太多,放不下。该控件没有使用ViewState

    2.3大致思路:控件可以设置当前页面的前后几页,比如当前1996页,计算出1996的前三页,后四页,然后做一个for循环:
     list.InnerHtml += "共<font color=blue>" + itemCount + "</font>条&nbsp;&nbsp;";
        list.InnerHtml += string.Format("第{0}页/共{1}页", currentPage, pageCount);
        list.InnerHtml += "<a href=" + pageUrl + "Page=1>&laquo;</a>&nbsp;";
        list.InnerHtml += "<a href=" + pageUrl + "Page=" + GetPage(currentPage - 1) + ">&lt;</a>&nbsp;";

        ShowStartPage();    //计算当前页的前三页.
        ShowEndPage();    //计算当前页的后四页.

        for (int i = startPage; i <= endPage; i++)
        {
            if (i == currentPage)
            {
                list.InnerHtml += "<a href=" + pageUrl + "Page=" + i.ToString() + "><font style='color:red;'>" + i.ToString() + "</font></a>&nbsp;";
            }
            else
            {
                list.InnerHtml += "<a href=" + pageUrl + "Page=" + i.ToString() + ">" + i.ToString() + "</a>&nbsp;";
            }
        }

        list.InnerHtml += "<a href=" + pageUrl + "Page=" + (currentPage + 1).ToString() + ">&gt;</a>&nbsp;";
        list.InnerHtml += "<a href=" + pageUrl + "Page=" + pageCount.ToString() + ">&raquo;</a>";

        希望对你有帮助,谢谢!

  • 0
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
再次声明 千万不要把XiaoQi.dll 跟 XiaoQi.XML 给分开 2013年3月8号 修复了很多bug 调整了源代码 添加的时候 一定要引用 不要直接复制DLL 不然没有方法注释 最强大分分页控件 华丽的分页控件 实用的分页控件 有最新最实用的方法 联系小柒 下面是 AspNetHelp 类 方法概述 ///Show()弹出对话框 ///重载Show()弹出对话框 并且跳转界面 ///ShowJavascript()执行javascript脚本 ///FileDelete()给出文件虚拟路径删除文件 ///FileSize()获取上传文件大小 ///FileUpload()文件上传 路径upload/ 自动重命名 ///FileDownload()文件下载 调用方法如 FileDownload(Response,Server,文件虚拟路径) ///FileTxtWrite()写入TXT文本 给出要创建Txt 文本的地址 ///FileTxtReader()读取TXT文本 Txt 文本的地址 返回一个数组 每一行为数组里的一个元素 ///StringEncrypt() DES字符串加密中文不可以加密 ///StringDecrypt()DES解密字符串 ///StringMD5Encrypt()MD5加密 ///StringPYChar()单个汉字返回该汉字首字母 ///StringRandom()生成指定位数的随机数 ///StringEdit()给出指定字符串长度多少位后用点显示... ///StringReplaceSpace()替换文本中的空格和换行 ///StringColor()改变字的颜色 ///StringNull()当对象是空的时候 转为空字符串 ///StringConvert()汉字转拼音 ///StringNumber()数字转换中文 ///StringRep()url参数为中文时候转换加密 ///StringRes()url参数为中文时候转换解密 ///ShowWindowForm()弹出新窗口页面 ///ShowFormModalDialog()弹出模式窗口页面 ///SqlGetMaxID()给出表名列名 int类型 查询出最大列值+1 适用于主键 ///SqlGetSingle()执行一条计算查询结果语句,返回查询结果(object)。 ///SqlExecute()执行SQL语句,返回影响的记录数 ///SqlRunStr()执行SQL语句,不返回影响的记录数 ///SqlRunReturn()执行SQL语句,并返回第一行第一列结果 ///SqlGetReader()获得SqlDataReader对象 使用完须关闭DataReader,关闭数据库连接 ///SqlGetTable()执行查询语句,返回DataTable ///SqlDataSet()执行查询语句,返回DataSet ///SqlIsCunZai()执行Sql 语句查询是否有数据 如果没有返回假 ///SqlRunProc()执行存储过程 ///DataBindDropDownListDefault()DropDownList控件绑定 带默认选择项 如"请选择" ///DataBindDropDownList()DropDownList控件绑定 不带默认选择项 ///DataBindRadioButtonList()RadioButtonList控件绑定 默认第一个选中 ///DataBindCheckBoxList()CheckBoxList控件绑定 ///ElseIpAddr()调用此方法 返回当前登录的省市IP地址 ///ElseDataTimeIng()返回本地电脑的当前日期的年月日时分秒 动态的显示 JS实现 ///ElsePageLoad()页面加载数据加载完成呈现页面 ///ElseCkeck()返回页面验证码图片 使用方法:单独创建一个页面 在首次加载事件里写 AspNetHelp.ElseCkeck(Page); 在使用验证码的页面直接写 img src="这个页面的路径" 注意验证码保存在 Session["CheckCode"]中 这里是区分大小写的 ///ElseColorRGB()由于QQ截图的取色会出现RGB的颜色 这里能转换成16进制 分页控件详情请看内置文档

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值