技术文档 >AJAX技术 >

基于Ajaxpro.net的客户端数据分页控件--PageList

作者:shenjk 2007-6-26 12:25:22 浏览/评论:458/1

前面写了一个简单的基于AjaxPro.net的客户端数据绑定控件,今天花了点时间,写了一个基于AjaxPro.net的客户端分页控件,可根据需求修改成通用客户端数据分页控件.

CS代码.注册Ajaxpro.net控件,这里省略.

页码代码:

<%@ Page Language="C#" AutoEventWireup="true" CodeFile="index.aspx.cs" Inherits="index" %>
<!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>
    <meta http-equiv="Content-Type" content="text/html; charset=utf-8"/>
    <style type="text/css">
        .table{background:#000;border:0;}
        .table td{background:#fff;}
    </style>
</head>
<body>
    <form id="form1" runat="server">
        &nbsp;<div id="ShowData">
                   
                </div>
                <div id="showpage">
                    &nbsp;</div>
            <script language="javascript" type="text/javascript">
                //记录页码变化
                var expectedHash = "";
                function makeHistory(newHash)
                {
                  window.location.hash = newHash;
                  expectedHash = window.location.hash;
                }
                /*------------------------------------
                 *类:PageList       用于数据分页
                 *参数:func         callback函数--用于数据绑定.
                 *     pagesize     分页大小
                 *     pagecount    总页码
                 *     recordcount  总记录数
                 *     container    控件容器
                 *     width        控件宽度,简单实现样式控制,复杂的样式控制,可以根据需求自行添加
                 *     作者:        shenjk
                 *     日期:        2007-6-29
                 *      http://www.shenjk.com
                 *-------------------------------------*/
                var PageList=function(func,pagesize,pagecount,recordcount,container,width){                   
                    this.func=func;
                    this.pagesize=pagesize;
                    this.pagecount=pagecount;                   
                    this.recordcount=recordcount;
                    this.container=container;
                    this.width=width!=null?((width.indexOf('px')>0)?width:width+'px'):this.container.offsetWidth+'px';      
                };
                PageList.prototype={
                    Page:function(){                       
                        var func=this.func;
                        var previous=this.previous;
                        var next=this.next;  
                        var pagesize=this.pagesize;
                        var pagecount=this.pagecount;
                        var recordcount=this.recordcount;
                        var container=this.container;
                        var width=this.width;
                        
                        var _id=this.container.id+"_PAGELIST";
                        if(document.getElementById(_id)!=null){
                            this.container.removeChild(document.getElementById(_id));
                        }
                        var div=document.createElement("div");
                        div.id=_id;
                        div['style']['width']=width;
                        div.innerHTML='共'+this.recordcount+'条记录,'+this.pagecount+'页&nbsp;';
                        var i_start=this.ipageindex-4<1?1:this.ipageindex-4;
                        var i_end=i_start+4>this.pagecount?this.pagecount:i_start+4;
                       
                        var pre=document.createElement("a");
                        pre.innerHTML='上一页';
                        pre.href="javascript:void(0)";
                        div.appendChild(pre);
                        if(previous>=1){
                            addEvent(pre,'click',this.PageFormat.bind(this,previous)); 
                        }  
                        for(var i=i_start;i<=i_end;i++){
                            var cur=document.createElement("a");
                            cur.innerHTML=i;
                            cur.href="javascript:void(0)";
                            cur['style']['margin']='0 2px 0 2px';
                            if(this.ipageindex==i)cur.style.color='red';                           
                            div.appendChild(cur);
                            addEvent(cur,'click',this.PageFormat.bind(this,i));  
                            cur=null;                           
                        }                       
                        var nx=document.createElement('a');
                        nx.innerHTML='下一页';
                        nx.href='javascript:void(0)';
                        div.appendChild(nx);
                        if(next<=this.pagecount){
                            addEvent(nx,'click',this.PageFormat.bind(this,next));
                        }
                        var span=document.createElement('span');
                        span.innerHTML="&nbsp;转到第";
                        div.appendChild(span);
                        var intext=document.createElement('input');
                        intext.type='text';
                        intext.style.width='20px';
                        intext.style.border='1px solid #999';
                        intext.style.padding='0';
                        intext.style.margin='0';
                        intext.value=this.ipageindex;
                        intext.onkeypress=function(event){
                            evt = event || window.event;
                            var k = evt.keyCode | evt.which;
                         if (k < 48 || k > 57){
                          alert("你输入的不是数字!");
                          if(document.all!=null){evt.keyCode = 0 ;}
                      }
                        }
                        div.appendChild(intext);
                        var span1=document.createElement('span');
                        span1.innerHTML="页&nbsp;";
                        div.appendChild(span1);
                        var go=document.createElement("input");
                        go.type="button";
                        go.style.padding='0';
                        go.style.margin='0';
                        go.value='GO';
                      
                        go.onclick=function(){
                            new PageList(func,pagesize,pagecount,recordcount,container,width).PageFormat(intext.value);
                        }
                        div.appendChild(go);                       
                        this.container.appendChild(div);
                    },
                    PageFormat:function(index){                       
                        makeHistory(index);
                        this.ipageindex=index;
                        this.ipageindex=parseInt(((this.ipageindex>0?this.ipageindex:1)<this.pagecount)?(this.ipageindex>0?this.ipageindex:1):this.pagecount);
                        this.previous=parseInt(this.ipageindex>1?this.ipageindex-1:this.ipageindex);                       
                        this.next=parseInt(this.ipageindex<this.pagecount?this.ipageindex+1:this.ipageindex);
                        this.func(this.ipageindex);
                        this.Page(this.container,this.width);
                    }
                };
                //测试例子
                function $(sid){return document.getElementById(sid);}
                function pageds(index){
                    var ds= new Ajax.Web.DataSet();                   
                    var dt = new Ajax.Web.DataTable();
                    dt.addColumn("FirstName", "System.String");
                    dt.addColumn("Age", "System.Int32");
                    if(index<1)index=1;
                    for(var i=(index-1)*10;i<index*10;i++){
                        dt.addRow({"FirstName":"Michael_"+i,"Age":i});
                    }
                    ds.addTable(dt);
                    return ds;
                }
                function Test(){                  

                    var ipageindex=(window.location.hash).substr(1);;
                    if(ipageindex==null && typeof(ipageindex)!='number')ipageindex=1;

                    var P= new PageList(function(res){
                        var t=new DataList(document.getElementById('ShowData'),pageds(res));
                        t.CreateTable('shenjk',200,0,'table',1,1);
                        t.HeaderTemplate(new Array('姓名','年龄'));
                        t.DataBind()
                    },10,10,100,$('showpage'));
                    P.PageFormat(ipageindex);
                   
                }
                addEvent(window,'load',this.Test.bind(this));
                /*------------------------------------
                 *类:DataList 用于绑定ds
                 *参数:container 控件容器.
                 *      ds       数据源
                 *-------------------------------------*/
                var DataList=function(container,ds){
                    this.container=(typeof container=='undefined' || typeof container!='object')?document.body:container;                   
                    this.dt=ds.Tables[0];
                    this.rowsCount=ds.Tables[0].Rows.length;
                    this.columnsCount=ds.Tables[0].Columns.length;
                };
                DataList.prototype={
                    //创建数据表格
                    CreateTable:function(_Id,width,height,cssName,cellPadding,cellSpacing){
                        var Id='_UNDEDINEDID';
                        if(_Id!=null && _Id!='')Id=_Id;
                        if($(Id)==null){
                            var table=document.createElement('table');
                            table.id=Id;
                            this.container.appendChild(table);              
                            this.table=table;
                        }else{
                            this.table=$(Id);
                            this.table.removeChild(this.table.getElementsByTagName('tbody')[0]);//清除现有数据,处理方法有待改进                                               
                        }
                        if(width!=null && width!='' && parseInt(width)!=0)this.table['style']['width']=width+'px';
                        if(height!=null && height!='' && parseInt(height)!=0)this.table['style']['height']=height+'px';
                        if(cssName!=null && typeof(cssName=='string') && cssName!='')this.table.className=cssName;  
                        if(cellPadding!=null && typeof(cellPadding)=='number')this.table.cellPadding=cellPadding;
                        if(cellSpacing!=null && typeof(cellSpacing)=='number')this.table.cellSpacing=cellSpacing;                  
                    },
                    //自定义表格头部内容
                    HeaderTemplate:function(header){               
                        if(header.length!=this.columnsCount){
                            throw('HeaderTemplate length is not matched.');                           
                        }else{
                            var r_head=this.table.insertRow(0);
                            for(var i=0;i<this.columnsCount;i++){
                                var cell=r_head.insertCell(i);
                                cell.innerHTML=header[i];
                            }
                        }
                    },
                    //数据绑定
                    DataBind:function(){   
                        //绑定头部
                        if(this.table.rows.length==0){   //如果没有自定头部,则采用数据字段作为头部.
                            var r_head=this.table.insertRow(0);
                            for(var i=0;i<this.columnsCount;i++){
                               var cell=r_head.insertCell(i);
                               cell.innerHTML=this.dt.Columns[i].Name;
                            }
                        }
                        //绑定数据
                        for(var i=0;i<this.rowsCount;i++){
                            var r=this.table.insertRow(i+1);
                            for(var j=0;j<this.columnsCount;j++){
                                var cell=r.insertCell(j);
                                cell.innerHTML=this.dt.Rows[i][this.dt.Columns[j].Name];
                            }
                        }                  
                    }
                };           
            </script>
    </form>
</body>
</html>

网友评论

lemon(北京市联通:211.160.*.*)于 2008-8-15 10:40:21 发布评论:

学习一下..我对javascript也很感兴奋..

我来说几句:

主题:
作者:
内容: