【开源】QuickPager ASP.NET2.0分页控件V2.0.0.3 【增加了使用说明】

原来的MyPage 更名为QuickPager ASP.NET2.0分页控件,版本升级到V2.0.0.3 功能更多,使用更方便、更灵活。 开放源代码。 增加了使用说明: 自定义提取数据; 自动提取数据; PostBack分页; 多种分页算法; 一个页面多个分页控件。    增加了几个属性、两个事件、修改了一下内部的代码。分页控件的大体结构终于确定下来了。详细说明一下功能吧。


1、基本信息
    控件名称:QuickPager ASP.Net2.0 分页控件。
    版本:V2.0.0.3。
    IDE:vs2005、vs2008。
    语言:C#
    Framework:.net 2.0。

2、两种分页方式: PostBack 和 URL。目前URL的分页方式不太完善。

3、两种数据提取方式:
        a、自动。由分页控件负责UI的绘制、计算总记录数、总页数、提取数据、事件的处理和绑定控件等功能。
        b、自定义。有调用控件者提供总记录数、数据的处理和控件绑定等,分页控件仅负责UI的绘制、计算页数和事件的触发(不对事件作具体的处理,仅通知调用者)。
    
4、数据源:自定义数据提取方式不限制数据库,自动分页方式目前支持SQL 2000、SQL2005,下一个版本会支持Access、Excell。 

    目前可以选择的分页算法:Row_Number(仅支持SQL2005)、表变量(支持SQL 2000 、SQL2005)。

5、支持的显示数据的控件:DataGrid、GridView、DataList、Repeater等。只要有DataSource、DataBind的控件都可以。

6、功能:分页。包括UI的绘制、分页算法(根据属性组合成SQL语句)、提取数据、绑定控件、计算总记录数(可以保存以提高效率)服务器控件,引用DLL即可。


7、2.0.0.3新增加了两个事件:
    PageChanged 在页号改变的时候触发,可以使用这个事件达到自定义提取数据的目的。
    GridBinded 在绑定控件后出发,采用自动提取数据的方式的时候可以修饰一下GridView控件。

8、新增了三个属性
    SetGetDataKind 提取数据的方式,myPageGetDataKind.Customer 自定义;myPageGetDataKind.Auto 自动。
    SetUIKind 分页方式,myPageUIKind.PostBack ;myPageUIKind.URL 。
    SetPageRecordCount = 200; 在采用自定义方式提取数据的时候,必须设置总记录数。
    SetSQLKind 可以选择的分页算法,myPageSQLKind.TableVar 表变量,myPageSQLKind.Row_Number 。以后还会增加几个。(这个属性以前的版本就有了。)

9、结构图:




在项目里添加控件地方法:http://www.cnblogs.com/jyk/archive/2008/07/05/1231337.html

分页控件的源码下载网址:http://www.cnblogs.com/jyk/archive/2008/04/25/1170979.html

一会写一下详细的使用说明。

关于自定义事件的问题,十分感谢园子里的兄弟,帮了很大的忙。

QuickPager v2.0.0.3的使用方法:

    老规矩,先修改 web.config里面的连接字符串的设置。demo使用的是 SQL 2000里面的 northwind数据库,
sa ,admin。如果您的环境是一样的话,那就可以下不用修改了。

    另外由于分页控件改了一下名称,所以如果您的工具箱里添加了以前版本的分页控件,那么还得麻烦一下,先把原来的删除掉,在重新添加一下。工具箱里添加控件的方法:myPage —— asp.net分页控件的使用示例。基本应用和查询功能

1、自定义提取数据 + PostBack分页
    有兄弟说我的分页控件“管得太多”了,数据处理的不应该包含在分页控件里面,如果您还有更好的处理数据地方法,或者分页控件自带的提取数据的方法不能满足您的需求(比如您相对XML进行分页)的话,可以使用这种方法。这个应该和吴旗娃的分页控件的使用方式是一样的。采用这种方法,分页控件只负责UI的绘制,页数的计算(需要设置总记录数和一页的记录数)和翻页时触发事件,其他的事情就要自行处理了。
    代码:
    

protected void Page_Load(object sender, EventArgs e)

    

{

        if (!Page.IsPostBack)

            ShowData();

    }


    private void ShowData()

    

{

        //给分页控件赋值

        //自定义提取数据的方式

        myPage1.SetGetDataKind = JYK.Controls.Page.myPageGetDataKind.Customer;


        myPage1.PageSize = 15;      //一页显示的记录数。

        myPage1.NaviCount = 8;      //页号导航的个数。

        myPage1.SetPageRecordCount = 1000;      //直接设置总记录数。获取总记录数方式自由发挥:)


        //ok。

        //提取数据就自己写了,因为这里是自定义提取数据的演示。

    }


    protected void myPage1_PageChanged(object sender, JYK.Controls.Page.PageArgs e)

    

{

        //页号改变时触发的事件

        Response.Write(e.CurrentPageIndex);     //要翻到的页号


        //由于我不会自己提取数据,我都是用分页控件的,所以这里的实现代码您自己写吧。

        //如果您也不熟的话,建议采用自动获取数据的方式。

    }



2、自定义提取数据 + URL分页的演示
    这个和上面的类似,如何处理数据还是要自己处理的。
    代码:

 protected void Page_Load(object sender, EventArgs e)

    

{

        ShowData();

    }


    private void ShowData()

    

{

        //给分页控件赋值


        //自定义提取数据的方式

        myPage1.SetGetDataKind = JYK.Controls.Page.myPageGetDataKind.Customer;


        //URL的分页方式

        myPage1.SetUIKind = JYK.Controls.Page.myPageUIKind.URL;


        myPage1.PageSize = 15;      //一页显示的记录数。

        myPage1.NaviCount = 8;      //页号导航的个数。

        myPage1.SetPageRecordCount = 1000;      //直接设置总记录数。获取总记录数方式自由发挥:)


        string tmpPageIndex = Request.QueryString["pageno"];

        if (!Functions.IsInt(tmpPageIndex))

        

{

            tmpPageIndex = "1";

        }


        Int32 pageIndex = Int32.Parse(tmpPageIndex);


        if (pageIndex > myPage1.PageCount)

            pageIndex = myPage1.PageCount;



        //显示第 pageIndex 页的数据,自定义提取数据的方式,所以请自己处理,呵呵。

        Response.Write(pageIndex);


        myPage1.PageIndex = pageIndex;  //设置页号。URL的方式还没有优化


        //ok。

        //提取数据就自己写了,因为这里是自定义提取数据的演示。

    }



3、自动提取数据 + PostBack分页的演示
    这个就是原先版本的方法,只是有一点变化,原来的 BindFirstPage() 方法不用再写了,又少了一行代码,呵呵。
    代码:请注意事件的应用。

 private DateTime dt1;

    private DateTime dt2;


    protected void Page_Load(object sender, EventArgs e)

    

{

        Response.Cache.SetNoStore();


        dt1 = DateTime.Now;

        dt2 = DateTime.Now;


        if (!Page.IsPostBack)

        

{

            setPageInfo();

        }

    }


    设置分页控件的属性#region 设置分页控件的属性

    private void setPageInfo()

    

{

        //以下三个属性必须赋值

        this.myPage1.ControlGridID = this.GV.ID;


        this.myPage1.TableName = " Products";      //表名或者视图名

        this.myPage1.TableOrderColumns = "ProductName,ProductID ";  //排序字段,可以写多个字段


        //以下属性可以不赋值

        //采用表变量的分页算法(默认值)

        this.myPage1.SetSQLKind = JYK.Controls.Page.myPageSQLKind.TableVar;


        this.myPage1.TableShowColumns = "*";    //显示的字段,可以不填,默认为 *

        this.myPage1.PageSize = 5;              //一页显示的记录数,默认一页显示20条记录

        this.myPage1.TableQuery = "";           //查询条件,不包含 where 

        this.myPage1.NaviCount = 8;             //页号导航的数量,默认10个


        this.myPage1.TableIDColumns = "ProductID";       //主键

        

        //this.myPage1.SetSQLKind = JYK.Controls.Page.myPageSQLKind.Row_Number;

        //this.myPage1.SetSQLKind = JYK.Controls.Page.myPageSQLKind.TableVar ;


        //原先的 BindFirstPage() 可以不必执行了。


    }

    #endregion


    protected void myPage1_PageChanged(object sender, JYK.Controls.Page.PageArgs e)

    

{

        //页号改变时触发的事件,在自动获取数据的情况下,可以不处理这个事件。

        //e.CurrentPageIndex     //要翻到的页号


        //这里用作计时。

        TimeSpan ts = DateTime.Now - dt1;

        Lbl_msg.Text = "组合SQL需要的时间:" + ts.Seconds + "秒" + ts.Milliseconds + "毫秒
";

        

    }

    protected void myPage1_GridBinded(object sender, JYK.Controls.Page.PageArgs e)

    

{

        //绑定GridView后触发的事件,在自动获取数据的情况下,可以不处理这个事件。

        TimeSpan ts = DateTime.Now - dt2;

        Lbl_msg.Text += "组合SQL和提取数据、绑定控件需要的时间:" + ts.Seconds + "秒" + ts.Milliseconds + "毫秒
";


    }



4、自动提取数据 + URL分页的演示
    这个还有点小问题,将在下一个版本里修改,这里就先不说了。
    
5、同一个页面使用两个分页控件的演示(仅限PostBack分页)
    有的时候我们需要在同一个网页对多个表(或者多表联合)进行分页,就是说一个页面需要放两个(或多个)不同的分页控件,那么要怎么设置呢?其实也很简单,分页控件和GridView对应正确就可以了。目前仅限于PostBack的分页方式。

    稍微修改一下就可以实现一个页面,多个数据库的分页了。这个在下一个版本里说明。
    代码:

private DateTime dt1;

    private DateTime dt2;


    protected void Page_Load(object sender, EventArgs e)

    

{

        Response.Cache.SetNoStore();


        dt1 = DateTime.Now;

        dt2 = DateTime.Now;


        Lbl_msg.Text = "";


        if (!Page.IsPostBack)

        

{

            setPageInfo1();

            setPageInfo2();

        }

    }


    设置分页控件的属性#region 设置分页控件的属性

    private void setPageInfo1()

    

{

        //以下三个属性必须赋值

        this.myPage1.ControlGridID = this.GV.ID;


        this.myPage1.TableName = " Products";      //表名或者视图名

        this.myPage1.TableIDColumns = "ProductID";       //主键

        this.myPage1.TableShowColumns = "*";    //显示的字段,可以不填,默认为 *

        this.myPage1.TableOrderColumns = "ProductName,ProductID ";  //排序字段,可以写多个字段

        this.myPage1.TableQuery = "";           //查询条件,不包含 where 

         

        this.myPage1.PageSize = 5;              //一页显示的记录数,默认一页显示20条记录

        this.myPage1.NaviCount = 8;             //页号导航的数量,默认10个



    }

    #endregion


    设置分页控件的属性#region 设置分页控件的属性

    private void setPageInfo2()

    

{

        //以下三个属性必须赋值

        this.myPage2.ControlGridID = this.GV2.ID;


        this.myPage2.TableName = " [Orders Qry]";      //视图名

        this.myPage2.TableIDColumns = "OrderID";       //主键

        this.myPage2.TableShowColumns = "*";    //显示的字段,可以不填,默认为 *

        this.myPage2.TableOrderColumns = "OrderID ";  //排序字段,可以写多个字段

        this.myPage2.TableQuery = "";           //查询条件,不包含 where 


        this.myPage2.PageSize = 10;              //一页显示的记录数,默认一页显示20条记录

        this.myPage2.NaviCount = 10;             //页号导航的数量,默认10个


    }

    #endregion


    protected void myPage1_PageChanged(object sender, JYK.Controls.Page.PageArgs e)

    

{

        //这里用作计时。

        TimeSpan ts = DateTime.Now - dt1;

        Lbl_msg.Text += "[控件1]组合SQL需要的时间:" + ts.Seconds + "秒" + ts.Milliseconds + "毫秒
";


    }

    protected void myPage1_GridBinded(object sender, JYK.Controls.Page.PageArgs e)

    

{

        //绑定GridView后触发的事件,在自动获取数据的情况下,可以不处理这个事件。

        TimeSpan ts = DateTime.Now - dt2;

        Lbl_msg.Text += "[控件1]组合SQL和提取数据、绑定控件需要的时间:" + ts.Seconds + "秒" + ts.Milliseconds + "毫秒
";


    }

    protected void myPager2_GridBinded(object sender, JYK.Controls.Page.PageArgs e)

    

{

        TimeSpan ts = DateTime.Now - dt1;

        Lbl_msg.Text += "[控件2]组合SQL需要的时间:" + ts.Seconds + "秒" + ts.Milliseconds + "毫秒
";


    }

    protected void myPager2_PageChanged(object sender, JYK.Controls.Page.PageArgs e)

    

{

        TimeSpan ts = DateTime.Now - dt2;

        Lbl_msg.Text += "[控件2]组合SQL和提取数据、绑定控件需要的时间:" + ts.Seconds + "秒" + ts.Milliseconds + "毫秒
";


    }


温馨提示:
SetGetDataKind 数据提取方式(默认:自动提取)
SetSQLKind 分页算法 (默认:表变量)
SetUIKind 分页方式 (默认:PostBack)
这三个属性在控件的属性窗口设置更为方便。


原文地址:https://blog.51cto.com/u_15179455/2729742

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。

相关推荐


数组的定义 Dim MyArray MyArray = Array(1‚5‚123‚12‚98) 可扩展数组 Dim MyArray() for i = 0 to 10
\'参数: \'code:要检测的代码 \'leixing:html或者ubb \'nopic:代码没有图片时默认值
演示效果: 代码下载: 点击下载
环境:winxp sp2 ,mysql5.0.18,mysql odbc 3.51 driver 表采用 myisam引擎。access 2003  不同的地方: 
其实说起AJAX的初级应用是非常简单的,通俗的说就是客户端(javascript)与服务端(asp或php等)脚本语言的数据交互。
<% ’判断文件名是否合法 Function isFilename(aFilename)  Dim sErrorStr,iNameLength,i  isFilename=TRUE
在调用的时候加入判断就行了. {aspcms:navlist type=0 } {if:[navlist:i]<6} < li><a href=\"[navlist:link]\" target=\"_top\">[navlist:name]</a> </li>
导航栏调用 {aspcms:navlist type=0}     <a href=\"[navlist:link]\">[navlist:name]</a>
1.引入外部文件: {aspcms:template src=infobar.html} 2.二级下拉菜单 <ul class=\"nav\">
downpic.asp页面:  <!DOCTYPE html PUBLIC \"-//W3C//DTD XHTML 1.0 Transitional//EN\" \"http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd\">
Cookies是数据包,可以让网页具有记忆功能,在某台电脑上记忆一定的信息。Cookies的工作原理是,第一次由服务器端写入到客户端的系统中。以后每次访问这个网页,都是先由客户端将Cookies发送到服务器端,再由服务器端
很简单,在需要调用的地方用这种模式 {aspcms:content sort={aspcms:sortid} num=17 order=isrecommend}
网站系统使用ACCESS数据库时,查询时怎么比较日期和时间呢?为什么常常比较出来却是错误的呢?比如早的日期比迟的日期大?
str1=\"1235,12,23,34,123,21,56,74,1232\" str2=\"12\" 问题:如何判断str2是否存在str1中,要求准确找出12,不能找出str1中的1235、123、1232
实例为最新版本的kindeditor 4.1.5. 主要程序: <% Const sFileExt=\"jpg|gif|bmp|png\" Function ReplaceRemoteUrl(sHTML,sSaveFilePath,sFileExt)
用ASP实现搜索引擎的功能是一件很方便的事,可是,如何实现类似3721的智能搜索呢?比如,当在搜索条件框内输入“中国人民”时,自动从中提取“中国”、“人民”等关键字并在数据库内进行搜索。看完本文后,你就可以发
首先感谢ASPCMS官网注册用户xing0203的辛苦付出!一下为久忆YK网络转载原创作者xing0203的文章内容!为了让小白更加清楚的体验替换过程,久忆YK对原文稍作了修改!
数据库连接: <% set conn=server.createobject(\"adodb.connection\") conn.open \"driver={microsoft access driver (*.mdb)};dbq=\"&server.mappath(\"数据库名\")
第1步:修改plugins下的image/image.js 找到\'<input type=\"button\" class=\"ke-upload-button\" value=\"\' + lang.upload + \'\" />\',
asp函数: <% Const sFileExt=\"jpg|gif|bmp|png\" Function ReplaceRemoteUrl(sHTML,sSaveFilePath,sFileExt)