asp.net自定义分页控件示例_实用技巧

一、.ascx页面

复制代码 代码如下:

<%@ Control Language="C#" AutoEventWireup="true" CodeBehind="Pagination.ascx.cs" Inherits="IOCS.WEB.UserControl.Pagination" %>
<link href="../Content/Css/Pager.css" rel="stylesheet" type="text/css" />
<div id="tbPage" class="pager" runat="server" >
    記錄總數:<asp:Label ID="LRecords" runat="server"></asp:Label>
    總頁數:<asp:Label ID="LPages" runat="server"></asp:Label>
    當前頁:<asp:Label ID="LPage" runat="server"></asp:Label>

        <asp:LinkButton ID="LinkFirst" runat="server" CommandArgument="first" nClick="PagerButtonClick"
            Text="首頁"></asp:LinkButton>

        <asp:LinkButton ID="LinkPrevious" runat="server" CommandArgument="prev" nClick="PagerButtonClick"
            Text="上一頁"></asp:LinkButton>

        <asp:LinkButton ID="LinkNext" runat="server" CommandArgument="next" nClick="PagerButtonClick"
            Text="下一頁"></asp:LinkButton>

        <asp:LinkButton ID="LinkLast" runat="server" CommandArgument="last" nClick="PagerButtonClick"
            Text="末頁"></asp:LinkButton>
    轉到第<asp:TextBox ID="txtpage"  CssClass="piut" runat="server"  MaxLength="5" AutoPostBack="True" nTextChanged="txtpage_TextChanged"></asp:TextBox>頁

二、.ascx.cs文件

复制代码 代码如下:

using System;
using System.Collections.Generic;
using System.Linq;
using System.Web;
using System.Web.UI;
using System.Web.UI.WebControls;

namespace IOCS.WEB.UserControl
{
    public partial class Pagination : System.Web.UI.UserControl
    {
        public event EventHandler PageButtonClick;
        public bool FirstPost = false;
        protected void Page_Load(object sender, EventArgs e)
        {
            if (!IsPostBack)
            {
              

            }
            // 只輸入數字
            txtpage.Attributes.Add("onclick",
                @"if(!((event.keyCode>=48&&event.keyCode<=57)
                    ||(event.keyCode>=96&&event.keyCode<=105)
                    ||(event.keyCode==8)))event.returnValue=false;"
              );

        }
        GridView _gv;

        /// <summary>
        /// 需要分頁的GridView
        /// </summary>
        public GridView TargetControlID
        {
            set
            {
                _gv = value;
            }
            get
            {
                return _gv;
            }
        }

        protected void PagerButtonClick(object sender, EventArgs e)
        {
            //獲得linkebutton的參數值
            string arg = ((LinkButton)sender).CommandArgument;
            switch (arg)
            {
                case ("next"):
                    {
                        if (_gv.PageIndex < _gv.PageCount - 1)
                        {
                            _gv.PageIndex=_gv.PageIndex+1;
                        }
                        break;
                    }
                case ("prev"):
                    {
                        if (_gv.PageIndex > 0)
                        {
                            _gv.PageIndex--;
                        }
                        break;
                    }
                case ("first"):
                    {
                        _gv.PageIndex = 0;
                        break;
                    }
                case ("last"):
                    {
                        if (_gv.PageCount > 0)
                        {
                            _gv.PageIndex = _gv.PageCount - 1;
                        }
                        break;
                    }

                default:
                    {
                        _gv.PageIndex = Convert.ToInt32(arg);
                        break;
                    }
            }
            PageButtonClick(sender, e);

        }

        

        public void SetPageButton()
        {
            if (_gv.PageIndex == 0)
            {
                LinkFirst.Enabled = false;
                LinkPrevious.Enabled = false;

                LinkFirst.Style["color"] = "gray";
                LinkPrevious.Style["color"] = "gray";

                object s = LinkFirst.Style.Keys;
                if (_gv.PageCount > 1)
                {
                    LinkNext.Enabled = true;
                    LinkLast.Enabled = true;
                    txtpage.Enabled = true;
                    txtpage.Enabled = true;
                    LinkNext.Style["color"] = "#000";
                    LinkLast.Style["color"] = "#000";
                    txtpage.Style["readonly"] = "false";
                }
                else
                {
                    LinkNext.Enabled = false;
                    LinkLast.Enabled = false;
                    txtpage.Enabled = false;
                    LinkNext.Style["color"] = "gray";
                    LinkLast.Style["color"] = "gray";
                    txtpage.Style["readonly"] = "true";//background-color
                }
            }
            else if (_gv.PageIndex == _gv.PageCount - 1)
            {
                LinkFirst.Enabled = true;
                LinkPrevious.Enabled = true;
                LinkNext.Enabled = false;
                LinkLast.Enabled = false;
                LinkFirst.Style["color"] = "#000";
                LinkPrevious.Style["color"] = "#000";
                LinkNext.Style["color"] = "gray";
                LinkLast.Style["color"] = "gray";
            }
            else
            {
                LinkFirst.Enabled = true;
                LinkPrevious.Enabled = true;
                LinkNext.Enabled = true;
                LinkLast.Enabled = true;
                LinkFirst.Style["color"] = "#000";
                LinkPrevious.Style["color"] = "#000";
                LinkNext.Style["color"] = "#000";
                LinkLast.Style["color"] = "#000";
            }
        }

        /// <summary>
        /// 設定頁面信息
        /// </summary>
        /// <param name="dsCount">DataSet的紀錄總數</param>

        public void SetPageRecord(int dsCount)
        {
            LRecords.Text = dsCount.ToString();
            int mod= dsCount%_gv.PageSize;
            LPages.Text = (mod == 0 ? dsCount / _gv.PageSize : dsCount / _gv.PageSize + 1).ToString();
            LPage.Text = (_gv.PageIndex + 1).ToString();
            tbPage.Visible = true;
            SetPageButton();
        }

        protected void txtpage_TextChanged(object sender, EventArgs e)
        {
            if (txtpage.Text != "")
            {
                try
                {
                    int index = int.Parse(txtpage.Text.Trim());
                    if (index <= _gv.PageCount && index >= 1)
                    {
                        _gv.PageIndex = index - 1;
                    }
                    else
                    {
                        Page.ClientScript.RegisterStartupScript(this.GetType(), "Script", "<script. language='javascript'>alert('對不起,頁數超過索引范圍!');</script>");
                    }
                }
                catch
                {

                    Page.ClientScript.RegisterStartupScript(this.GetType(), "Script", "<script. language='javascript'>alert('對不起,只能輸入數字!');</script>");
                }
            }
            PageButtonClick(sender, e);
        }
    }
}

时间: 2024-11-18 05:42:36

asp.net自定义分页控件示例_实用技巧的相关文章

ASP.net的验证控件浅析_实用技巧

①.数据格式验证控件(RegularExpressionValidator) 复制代码 代码如下: <asp:RegularExpressionValidator ID="RegularExpressionValidator1" runat="server" ErrorMessage="此用户名已注册过" ControlToValidate = "txtName" ValidationExpression = "

关于asp.net 自定义分页控件_实用技巧

这几天空学习了下自定义控件,参考了aspnetpager开发了自己的分页控件.相对aspnetpager来说功能是多,但个人感觉他的代码太多. 界面: 使用: <%@ Register assembly="YSM.AspNetPager" namespace="YSM.AspNetPager" tagprefix="cc1" %> 页面注册控件,也可以在web.config中配置 1.ajax之UpdatePanel分页则把控件放到U

ASP.NET 自定义分页控件的问题,在线等待高手解答

问题描述 我做了一个自定义的分页控件,page.ascx,调用他的页面为productList.aspx,其中用一个隐藏的控件存储当前页码,分页控件中采用Linkbutton作为翻页的按钮,也就是说采用postBack机制做分页处理,做成形如"上一页123456下一页",这种样式,其中"123456"是动态生成的LINKBUTTON,现在的问题是,我点击翻页之后,将productList.aspx文件中d的隐藏控件值更新,更新完毕之后,我需要调用页面文件中重新绑定数

ASP.NET用户控件技术_实用技巧

我们发现,利用代码绑定技术我们可以容易的将我们的代码和内容分离开来,利用它可以建立可重用的代码,只是这种技术本身也存在着一些局限性.在本文中,我们将会一同探讨另外一种新的ASP.NET技术:用户控件.    什么是用户控件(User Controls)?  为了能更好的理解用户控件的重要性,我们先来看看一段小小的"历史".在以前的ASP当中,可重用的技术实现选择是相当受限制的.许多的开发者一般都是借助将公共的常用的子过程放到那些包含文件当中的做法来实现一定的所谓代码重用的.比如,如我们

使用CustomValidator自定义验证控件检查是否有对ListBox控件选择_实用技巧

在前网页前端处,我们放置ListBox控件,在数据提交前,检查用户是否有对此控件进行选择? Insus.NET的方法是使用Javascript与CustomValidator自定义验证控件来检查. 可以看到最终结果:  你也想参此例子,可以参考下面数据与准备方法,写一个对象,它将用来产生十个天干. HeavenlyStem.cs 复制代码 代码如下: using System; using System.Collections.Generic; using System.Linq; using

.net 数据表格显示控件介绍_实用技巧

1. GridView 控件 GridView 控件用于显示表中的数据.通过使用 GridView控件,您可以显示.编辑.删除.排序和翻阅多种不同的数据源(包括数据库.XML 文件和公开数据的业务对象)中的表格数据. 显示表格数据是软件开发中的一个周期性任务.ASP.NET 提供了许多工具来在网格中显示表格数据,例如 GridView 控件.通过使用GridView 控件,您可以显示.编辑和删除多种不同的数据源(例如数据库.XML 文件和公开数据的业务对象)中的数据. 可以使用 GridView

ASP.NET 统计图表控件小结_实用技巧

1.OWC11       这个控件全称是:Office Web Component 11,是office2003中的一个组件,可惜的是office2007中没有了它的身影.不过安装office2003之后可以引用,然后使用.使用过的人都知道,就是它的效果要差一点. 2.dotnetCharting      http://www.dotnetcharting.com/      dotnetcharting是国外的一个产品,是要收费的.具体还没有使用,后面在我尝试之后,我会添加一些使用范例.大

ASP.NET 4中的可扩展输出缓存(可以缓存页面/控件等)_实用技巧

输出缓存的前世今生 ASP.NET 1.0引入输出缓存的概念,这使得开发者可以缓存页面.控件.控制器以及HTTP响应的输出到内存中.在后续的Web请求,ASP.NET就可以使用缓存中的内容更快响应. ASP.NET的输出缓存系统足够灵活,使得我们可以根据不同的查询字符串或者表单post参数来缓存不同版本的内容.例如test.aspx?category=Vegerable 和 test.aspx?category.aspx?category=Meat.它也允许我们根据浏览器类型或者用户语言偏好来缓

解决ASP.NET回传后div滚动条位置复位的问题(利用隐藏控件原理)_实用技巧

首先是为DIV添加一个onscroll="javascript:setScollTop()" 的方法(当然不一定是DIV其他的标签思路应该也是这样的) 复制代码 代码如下: <div style="overflow: auto; height: 152px" align="left" id="dvScoll_1"   onscroll="javascript:setScollTop()">www