aspnetpager.dll分页控件

在网站的bin中添加aspnetpager.dll
你可以在:http://download.csdn.net/source/320371
下载这个控件
如果无法实现功能可以发邮件到:
fangquanwei@21cn.com
或者qq:570917820(本人不太上qq)
然后再页面aspx中添加如下的语句
 <%@ Page Language="C#" AutoEventWireup="true"  CodeFile="Default.aspx.cs" Inherits="_Default" %>
<%@ Register Assembly="AspNetPager" Namespace="Wuqi.Webdiyer" TagPrefix="webdiyer" %>
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">

<html xmlns="http://www.w3.org/1999/xhtml" >
<head runat="server">
    <title>无标题页</title>
</head>
<body>
    <form id="form1" runat="server">
    <div>

<webdiyer:aspnetpager id="anp_user" runat="server" alwaysshow="True" horizontalalign="Right" onpagechanged="anp_user_PageChanged" pagesize="10" showcustominfosection="Left"> </webdiyer:aspnetpager>
    </div>
    </form>
</body>
</html>
然后在cs中添加如下的的语句(面向过程能够的)
    public void BindRepeater()
    {
        DBClass db=new DBClass();
        string sql = @"SELECT dbo.eb_apply_domainNameMember.experimentID,
        dbo.eb_apply_domainNameMember.stuID,
        dbo.eb_apply_domainNameMember.UserAccounts,
        dbo.eb_apply_domainName_mainSell.MainframeNum,
        dbo.eb_apply_domainName_main.MainframeType,
        dbo.eb_apply_domainName_mainSell.ApplicationStartTime,
        dbo.eb_apply_domainName_mainSell.ApplicationEndTime,
        dbo.eb_apply_domainName_mainSell.IsAvailability
        FROM dbo.eb_apply_domainName_main INNER JOIN
        dbo.eb_apply_domainName_mainSell ON
        dbo.eb_apply_domainName_main.experimentID = dbo.eb_apply_domainName_mainSell.experimentID
        AND
        dbo.eb_apply_domainName_main.stuID = dbo.eb_apply_domainName_mainSell.stuID
        AND
        dbo.eb_apply_domainName_main.Id = dbo.eb_apply_domainName_mainSell.MainframeNum
        INNER JOIN
        dbo.eb_apply_domainNameMember ON
        dbo.eb_apply_domainName_mainSell.experimentID = dbo.eb_apply_domainNameMember.experimentID
        AND
        dbo.eb_apply_domainName_mainSell.stuID = dbo.eb_apply_domainNameMember.stuID
        AND
        dbo.eb_apply_domainName_mainSell.Id = dbo.eb_apply_domainNameMember.Id
        WHERE (dbo.eb_apply_domainName_mainSell.IsAvailability = '1')";
        DataTable dt = db.DBClass_getDataTable(sql);
        DataSet ds = new DataSet();

        ds.Tables.Add(dt.Copy());

        anp_user.RecordCount = ds.Tables[0].Rows.Count;

        ds = GetNewStructTbl(ds, anp_user.PageSize * (anp_user.CurrentPageIndex - 1), anp_user.PageSize * anp_user.CurrentPageIndex);

        Repeater1.DataSource = ds;
        anp_user.CustomInfoHTML = "<font color='#000'>记录总数:</font><font color=/"blue/"><b>" + anp_user.RecordCount.ToString() + " </b></font>";
        anp_user.CustomInfoHTML += "<font color='#000'>总页数:</font><font color=/"blue/"><b>" + anp_user.PageCount.ToString() + " </b></font>";
        anp_user.CustomInfoHTML += "<font color='#000'>当前页:<font><font color=/"red/"><b>" + anp_user.CurrentPageIndex.ToString() + " </b></font>";
 
        Repeater1.DataBind();
    }
        //这个是这个分页控件的一个事件
    protected void anp_user_PageChanged(object sender, EventArgs e)
    {
        BindRepeater();
    }
GetNewStructTbl函数如下定义
public static DataSet GetNewStructTbl(DataSet OldDs, int StartRowNum, int MaxRowNum)
        {
            DataSet ds = new DataSet();

            DataTable table = new DataTable();

            int maxNum = 0;

            for (int m = 0; m < OldDs.Tables[0].Columns.Count; m++)
            {
                table.Columns.Add(OldDs.Tables[0].Columns[m].ColumnName);
            }

            object[] objs = new object[table.Columns.Count];

            if (OldDs.Tables[0].Rows.Count < MaxRowNum)
            {
                maxNum = OldDs.Tables[0].Rows.Count;
            }
            else
            {
                maxNum = MaxRowNum;
            }

            for (int i = StartRowNum; i < maxNum; i++)
            {
                for (int j = 0; j < objs.Length; j++)
                {
                    objs[j] = OldDs.Tables[0].Rows[i][j].ToString();
                }

                table.Rows.Add(objs);
            }

            ds.Tables.Add(table);

            return (ds);
        }
然后在cs中添加如下的的语句(面向对象的)
 public void BindRepeater()
    {
        string what = @"Id,MainframeType,FunctionExplain,MainframePrice,MainframePic,IsComment=CASE
       
        WHEN  IsComment ='0'
       
        THEN ''

        WHEN  IsComment ='1'
       
        THEN '√'
        END,

        IsSalepromotioin=CASE
       
        WHEN  IsSalepromotioin ='0'
       
        THEN ''

        WHEN  IsSalepromotioin ='1'
       
        THEN '√'
        END,
        SalesPromotionPrice,
        IsIssue,experimentID,stuID";
        string strwhere = "IsIssue='1' and experimentID=" + Convert.ToDecimal(user.ExamId) + " and stuID='"+user.StuId+"'";

        BLL.eb_apply_domainName_main bllMain = new BLL.eb_apply_domainName_main();
        List<Model.eb_apply_domainName_main> modelMain = new List<APEB_apply_domainName.Model.eb_apply_domainName_main>();
        List<Model.eb_apply_domainName_main> modelMain2 = new List<APEB_apply_domainName.Model.eb_apply_domainName_main>();
        modelMain = bllMain.GetList(what, strwhere, "");
       
        anp_user.RecordCount = modelMain.Count;
        modelMain2 = APEB_applyLic.Common.CommentFunction<Model.eb_apply_domainName_main>.GetList(modelMain, anp_user.PageSize * (anp_user.CurrentPageIndex - 1), anp_user.PageSize * anp_user.CurrentPageIndex);
        anp_user.CustomInfoHTML = "<font color='#000'>记录总数:</font><font color=/"blue/"><b>" + anp_user.RecordCount.ToString() + " </b></font>";
        anp_user.CustomInfoHTML += "<font color='#000'>总页数:</font><font color=/"blue/"><b>" + anp_user.PageCount.ToString() + " </b></font>";
        anp_user.CustomInfoHTML += "<font color='#000'>当前页:<font><font color=/"red/"><b>" + anp_user.CurrentPageIndex.ToString() + " </b></font>";
        foreach (Model.eb_apply_domainName_main m in modelMain2)
        {
            m.MainframePrice = MainframePricezToZH(m.MainframePrice.ToString());
        }
        Repeater1.DataSource = modelMain2;
        Repeater1.DataBind();
   
    }
GetList APEB_applyLic.Common.CommentFunction<Model.eb_apply_domainName_main>.GetList如下定义
public class CommentFunction<T>
    {
        public static List<T> GetList(List<T> modelList, int StartRowNum, int MaxRowNum)
        {
            List<T> modelListTemp = new List<T>();
            int maxNum = 0;
            if (modelList.Count < MaxRowNum)
            {
                maxNum = modelList.Count;
            }
            else
            {
                maxNum = MaxRowNum;
            }
            for (int i = StartRowNum; i < maxNum; i++)
            {
                modelListTemp.Add(modelList[i]);
            }
            return modelListTemp;
        }
        public static DataSet GetNewStructTbl(DataSet OldDs, int StartRowNum, int MaxRowNum)
        {
            DataSet ds = new DataSet();

            DataTable table = new DataTable();

            int maxNum = 0;

            for (int m = 0; m < OldDs.Tables[0].Columns.Count; m++)
            {
                table.Columns.Add(OldDs.Tables[0].Columns[m].ColumnName);
            }

            object[] objs = new object[table.Columns.Count];

            if (OldDs.Tables[0].Rows.Count < MaxRowNum)
            {
                maxNum = OldDs.Tables[0].Rows.Count;
            }
            else
            {
                maxNum = MaxRowNum;
            }

            for (int i = StartRowNum; i < maxNum; i++)
            {
                for (int j = 0; j < objs.Length; j++)
                {
                    objs[j] = OldDs.Tables[0].Rows[i][j].ToString();
                }

                table.Rows.Add(objs);
            }

            ds.Tables.Add(table);

            return (ds);
        }
    }
        //这个是这个分页控件的一个事件
    protected void anp_user_PageChanged(object sender, EventArgs e)
    {
        BindRepeater();
    }
控件的设计者的设计思路
楼主webdiyer(.net资源精华—www.dotneturls.com) 2003-04-25 16:03:16 在 .NET技术 / ASP.NET 提问

前两天发布了我做的一个自定义分页控件AspNetPager,承蒙各位朋友的厚爱,在短短的三四天时间中这个控件连同源代码已被下载了将近一千次,其中有一位朋友叫我说一下这个控件的设计思路,尤其是怎么处理回发数据的。本人文才实在太敢恭维,再加上 技术 水平有限,说不出什么高深的原理,只能简单地向大家做一下介绍。在说明这个控件的工作原理之前,我先想说一下它的由来,如果大家对此没有兴趣,请直接跳转到下一段,谢谢!  
   
  一、AspNetPager分页控件的由来:  
    去年大概十月份左右,学习asp .net 将满四个月的时候,为了锻炼自己的编程能力,我将原来一个用asp写的留言簿做为模板,重新用asp.net+Access数据库设计了一个新的留言簿(就是在我的下载页面上同AspNetPager一起提供下载的那个),增加了一些新的 功能 ,在这个留言簿里,虽然使用了DataGrid控件,但我还是又自己花了半天功能做了一个分页导航栏,看起来很不错,到年底 准备 把 吴旗热线全部用asp.net+Sql   Server重写一遍,做新闻显示页面时要用分页,原来以为只要简单地把原先留言簿中的分页代码拷过来用就行了,谁知道问题并不是这么简单,代码拷过来后 还要修改许多地方才能正常运行,因为以后还要常用分页功能,这样劳心费神地去修改实在是一件麻烦事,我于是萌生了专门做一个分页导航用的自定义控件的念 头,本来以为只要用CreateChildControls 方法 动 态创建几个LinkButton再加一个委托处理翻页事件就行了。但在实际做时才发现难度远比自己想象的大,最重要的问题就是这个控件的回发事件不能被正 确处理,比如我第一次点击一个8按钮,控件只是回发了一次,但再没有任何反应,然后再点一个2按钮,这下有反应了,但当前页变成了8,即上一次点击时应该 显示的页数,随后再点一个5按钮,当前页又变成了2,原来这个控件的反应老是慢了半拍,实在没办法我便把这个自定义控件放在一用户控件中,怪了,把这个用 户控件再加到aspx页上就可以正常使用。可这样一来也太麻烦了,一个小小的分页功能竟得两个不同的控件来做,实在有点不伦不类。于是重新回到解决自定义 控件的问题上来,可是不管怎么样就是解决不了这个控件反应慢半拍的问题,我以为是因为保存在ViewState中的分页的一些数据无法同控件同步的问题, 于是到   www.asp.net   论坛去发了一个帖子专门问这个问题,那里有一个高手给我解决了这个问题,如果你感兴趣,可以看看这个帖了,它的地址是:http: //www.asp.net/Forums/ShowPost.aspx?tabindex=1&PostID=120379   (请别笑话我的 英文 水平!:),我随后就在这个解决方案上反复琢磨,终于完美地解决了这个分页控件无法正确处理回发事件和数据的问题,也就有了个现在这个AspNetPager。  
   
   
  二、AspNetPager分页控件中对回发数据的处理:  
   
  AspNetPager分页控件不是一个复合控件,也就是说它并没有包含任何现有的.net控件。这个控件是从 System.Web.UI.WebControls.Panel继承,之所以从Panel继承,大家也应该看清楚了,是这个控件只显示一系列的分页导航 控钮或文本输入框,把它包在一个要占用单独一行的HTML的div标签中是最合适不过了!也许你会问:从Label继承不是也可以吗?答案当然是可以的, 但如果从Label继承,最明显的问题是:1、Label控件发送到客户端后被转换为span标签,span标签并不单独占用一行,如果在Label控件 之后没有加HTML的换行标签br,那么后面的内容就会和这个控件处在同一行,我们不希望我们的AspNetPager分页控件和页面上别的内容挤在一 行;2、用Label控件没法象Panel控件一样有居中、居右等对齐方式,而我们的分页控件必须允许用户选择不同的对齐方式,比如多数用户都会将分页导 航元素放在页面上水平居中的位置,用Label控件你无法做到这一点。  
   
  除从Panel类继承外,AspNetPager还实现了三个接口,一个是INamingContainer,没有任何方法,实现这个接口可以保证 AspNetPager控件在页面上具有唯一的ID命名空间,即不会与其它的控件标识冲突,更重要的是,我们要在这个控件中处理回发事件和数据,如果不实 现这个接口,页框架就不会知道到底哪一个控件引发了回发事件,因为你没有标识自己的控件的唯一性,就象一个人没有自己的名字,大家就叫他sir,有一天你 听人说:“弟兄们,sir被染了非典了,小心别也中招哦!”,你十有八九会追着人家不放,直到问清了那个sir原来是**局的*胖子,既不是你们家左对门 的那个在外面包小蜜的款爷也不是右对门那个凡事都爱“研究研究”的局长,你才能放下心来。页框架可不一样,它没这闲功夫去一个一个打听是不是这个控件引回 了回发事件。就因为你这个控件没有标识自己的唯一的ID,页框架无法确认它就是那个引发了回发事件而又要自己处理回发事件和数据的控件,所以它是不会把回 发事件和数据通知你这个控件的,任何试图去处理回发事件和数据的努力都是徒劳。  
  问题点数:100、回复次数:15Top

scrolling="no" frameborder="0" src="http://topic.csdn.net/Include/Board.htm?Tags=">

1 楼webdiyer(.net资源精华—www.dotneturls.com)回复于 2003-04-25 16:03:39 得分 0

 
  AspNetPager实现的其它两个接口分别是IPostBackEventHandler和IPostBackDataHandler,前者处理回发 事件,后者处理回发数据。AspNetPager是通过两种方式来对回发的数据进行处理的,一种就是点击分页导航按钮时引发的回发事件,该回发事件带了一 个参数,这个参数值就是该按钮对应的页索引值,比如点击分页按钮的“8”,那么由此引起的回发事件中就带了一个值为“8”的参数,点击“第一页”按钮带回 的就是“1”(AspNetPager的页索引是从1开始的,这和DataGrid不一样)。那么你是不是很想知道这个参数是如何传回来的呢?如果你用过 LinkButton控件,你就会清楚这一点,LinkButton是怎么引发服务器事件的呢?查看aspx页发送到客户端的HTML代码,你会发现,在 HTML的form标签下,多了两个隐藏的文本框,一个叫“__EVENTTARGET”,另一个叫“__EVENTARGUMENT”,而那个 LinkButton控件呢?它转换成了一个超链接,它链接一个类似于“javascript:__doPostBack('btn','')”这样的 Javascript函数,这个__doPostBack函数的代码是这样:  
   
  function   __doPostBack(eventTarget,   eventArgument)   {  
  var   theform   =   document._ctl0;  
  theform.__EVENTTARGET.value   =   eventTarget;  
  theform.__EVENTARGUMENT.value   =   eventArgument;  
  theform.submit();}  
   
  其中的_ctl0是你的HtmlForm控件(即<form   runat="server">标签)的客户端ID,如果你懂点Javascript就不理解这段代码,__doPostBack函数带了两个参 数,一个叫eventTarget,一个叫eventArgument,它把eventTarget参数的值赋给我们前面提到的 __EVENTTARGET隐藏文本框的value属性,把eventArgument赋给另一个同样的文本框__EVENTARGUMENT的 value属性,然后提交表单,结合上面那个LinkButton转换成的超链接   javascript:__doPostBack('btn','')",你该明白这个LinkButton做什么了吧?它把自己的客户端ID提交回服务 器端(eventArgument是空的),服务器端怎么处理这个回发呢?很简单,页框架从回发到服务器的参数上确定这是哪个LinkButton引发了 回发事件,然后就把回发事件中传上来的参数传递给这个LinkButton的IPostBackEventHandler接口 RaisePostBackEvent()方法,在该方法中执行该LinkButton的Click事件处理程序,再把结果页面发回客户端。  
   
  AspNetPager中的页导航元素,象上一页、下一页及数值页索引按钮等其实就是LinkButton,所不同的是我们并没有象创建LinkButton服务器控件一样用  
  LinkButton   btn=new   LinkButton();  
  btn.Text="上一页";  
  btn.Click+=new   EventHandler(this.btnClick);  
  this.Controls.Add(btn);  
  这样的方式来创建,而是直接创建HTML代码,即<a   href=..>标签,它的超链接值是通过Page.GetPostBackClientHyperlink()这个方法来获得的, Page.GetPostBackClientHyperlink()是个重载方法,其中一个重载是   GetPostBackClientHyperlink(Control,String),它带两个参数,一个是引发回发的服务器控件,另一个是回发附带 的参数,这个方法产生一个类似于“javascript:__doPostBack('mycontrol','argument')”这样的引发控件回 发的用Javascript函数做超链接的字符串值,如果你不需要前面的“javascript:”,可以用   Page.GetPostBackEventReference()   这个方法,这个方法也有两个重载,视重载的不同,它产生类似于“__doPostBack('mycontrol','argument')”这样的 Javascript函数字符串值,调用这个函数就会将相应的参数发送回服务器端。服务器端页框架根据传回的值来看引发回发的控件是否需要自己处理回发事 件(即是否实现IPostBackEventHandler接口),如果需要自己处理回发事件,页框架就会通知该控件并将回发的数据作为参数交给 IPostBackEventHandler接口的RaisePostBackEvent()方法去处理,前面不是说了吗?我们给每个页导航元素都赋了一 个参数,即该元素对应的页索引值,这样我们在RaisePostBackEvent()方法的参数中接收到的数据就是用户点击的页导航元素对应的页索引, 我们用这个索引值来初始化PageChangedEventArgs这个传递数据给OnPageChanged()方法的EventArgs类,然后通过 PageChangedEventHandler这个委托,把PageChanged事件和事件处理程序挂钩,在该事件处理程序中用户可以执行数据绑定等 操作,这样就实现了翻页的功能。  
   
  Top

2 楼webdiyer(.net资源精华—www.dotneturls.com)回复于 2003-04-25 16:03:54 得分 0

前面只说了第一种处理回发数据的方法,另一种方法,也就是处理那个页索引输入文本框中的值的方法,是实现IPostBackDataHandler 接口,该接口有两个方法,一个是LoadPostData(),用来接收回发的数据,一个是RaisePostDataChangedEvent(),它 是用来通知回发数据的控件该控件的状态(如输入到TextBox中的值)已更改,如果控件状态更改后你需要执行某些操作,可以在该方法中执行。是否执行 RaisePostDataChangedEvent()方法是由LoadPostData()方法的返回值来决定的,如果LoadPostData() 返回true就执行RaisePostDataChangedEvent(),否则不引发。实现这个接口要注意的一点,就是必须把其中一个事件回发元素的 name属性值设为这个控件的UniqueID,这样做很容易理解,就象上面那个LinkButton传递的参数一样,这个发回服务器端的 UniqueID值使页框架能够确认这些数据是哪个控件发回来的。这个方法是标准的form回发,就象我们用asp时,一个表单中有一大堆的文本框、下拉 框或者单选复选框,点击Submit按钮就将所有的这些表单元素的name属性值和它们的数据或状态发回服务器端,在asp.net中,这些回发的数据就 是一个NameValueCollection对象,即一系列键、值对的集合。前面已经说过了,这其中必须有一个键名是这个引发回发的控件的 UniqueID,否则页框架就分不清是哪个控件引发了回发事件以及回发的数据应该交给哪个控件去处理,这是很多编写自定义控件的网友最容易犯的错误。页 框架在接收到的回发数据中如果发现某个键名是页面上某个控件的UniqueID,就知道这些数据是这个控件回发的,然后检查该控件是否需要自己处理回发的 数据(即是否实现IPostBackDataHandler接口),如果需要自己处理,页框架就会把该控件的标识和回发的数据作为参数传递给 IPostBackDataHandler接口的LoadPostData()方法去处理,AspNetPager就是从这个方法所传递的参数中取得用户 在页索引输入文本框中输入的值,因为不管回发的数据是否已改变,我们都要引发翻页事件,所以让该方法返回false以避免执行 RaisePostDataChanged()。为了使用户输入的值在下次页面回发之后仍保持原值,我们把它保存在ViewState中,这样即使你点击 了某一个翻页导航按钮而引发页面回发,但你上次在文本框中输入的值仍然有该文本框中,而不会丢失。  
   
  到这里关于如何在自定义控件中处理回发事件和回发数据已基本说完了,也许你看了AspNetPager的源代码后还有点疑问,即既然在 IPostBackDataHandler接口的LoadPostData()方法中得到了用户在页索引输入文本框中输入的值,就可以直接调用 OnPageChanged()事件处理程序来翻页了,何必再注册一次回发事件而在IPostBackEventHandler接口的 RaisePostBackEvent()方法中来翻页呢?这是因为既然AspNetPager控件向服务器端回发了数据,也必然引发 IPostBackEventHandler接口的RaisePostBackEvent()方法的执行,在这个方法中因为它的参数值是null,如果没 有验证就用它来初始化PageChangedEventArgs数据类,就会出现类似“输入的内容不是有效的格式”这样的意外,再说把翻页事件放在一个方 法中,更易于维护和调试。  
   
  以上就是兄弟对自定义控件处理回发事件和数据的一点拙见,大家可别扔臭鸡蛋,兄弟为写这个中午还没吃饭呢!你们大家哪位请客?:)  
  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
首页 更新历史 在线演示 下载 帮助文档 常见问题 代码工具 分页资源 客户站点 留言簿 .Net资源 登录 注册 AspNetPager分页件 分页是Web应用程序中最常用到的功能之一,在ASP.NET中,虽然自带了一个可以分页的DataGrid(asp.net 1.1)和GridView(asp.net 2.0)件,但其分页功能并不尽如人意,如可定制性差、无法通过Url实现分页功能等,而且有时候我们需要对DataList和Repeater甚至自定义数据绑定件进行分页,手工编写分页代码不但技术难度大、任务繁琐而且代码重用率极低,因此分页已成为许多ASP.NET程序员最头疼的问题之一。 AspNetPager针对ASP.NET分页件的不足,提出了与众不同的解决asp.net中分页问题的方案,即将分页导航功能与数据显示功能完全独立开来,由用户自己制数据的获取及显示方式,因此可以被灵活地应用于任何需要实现分页导航功能的地方,如为GridView、DataList以及Repeater等数据绑定件实现分页、呈现自定义的分页数据以及制作图片浏览程序等,因为AspNetPager件和数据是独立的,因此要分页的数据可以来自任何数据源,如SQL Server、Oracle、Access、mysql、DB2等数据库以及XML文件、内存数据或缓存中的数据、文件系统等等。 AspNetPager 7.1 版发布(2008-7-20) 新增 LayoutType 属性,该值是 LayoutType 枚举Table或Div,默认值是Div,即使用div布局,若设为Table则使用表格布局方式; 新增 UrlPageSizeName 属性,可以通过在url参数中指定PageSize属性的值,该UrlPageSizeName属性值若为空或负数忽略,否则PageSize属性将返回从Url中获取的UrlPageSizeName 参数的值; 新增SubmitButtonImageUrl属性,支持使用图片按钮,当该属性的值不为空时,分页件使用该属性的值做为图片按钮路径,如果该值为空或默认值则时使用普通按钮; 修正了设计时支持中设置页索引文本或下拉框选项时,在页索引文本或下拉框显示方式中选择“自动”时属性被设置为Always而非Auto的错误; 解决了设计时EnableUrlRewriting 为true 时 UrlRewritePattern属性出错的出错问题; 代码精简及其它优化; 上一版本中标记为已废弃的如下属性:ShowInputBox、InputBoxClass、InputBoxStyle、TextBeforeInputBox、TextAfterInputBox 已去掉,新版本中已不存在这些属性,升级时请注意; AspNetPager 7.0.2 版发布(2008-1-26) 所有属性除CloneFrom外都支持使用皮肤Scheme主题(7.0.1版中大部分都不支持)。 修正了在居中当前页索引按钮的情况下(CenterCurrentPageButton=true),总页数小于数字页索引按钮数(即:PageCount小于NumericButtonCount的值)时出现负页数的bug。 新增属性CurrentPageButtonTextFormatString,可以获取或设置当前页数字页索引文本的显示格式,感谢网友asuka08的建议! 新增属性UrlPagingTarget,可以获取或设置Url分页方式下分页按钮或超链接指向的目标窗口或框架的名称。 当使用下拉框显示页索引时(即PageIndexBoxType=DropDownList时),如果总页数超过80页,将在下拉框中只列出部分页索引而不是全部页索引,以防页数太多导致下拉框选项太多而拖慢页面下载和打开速度。页索引下拉框的页索引选取规则是:当前页小于或等于15页时,显示前15页及最后5页;当前页索引大于总页数-14页时,显示前5页和最后15页;否则显示前5页、从当前页索引前5页到后5页的十一页以及最后5页。如果您有更好的下拉框页索引选取规则,请留言或发邮件联系我,我会及时更新。谢谢!

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值