纯ajax+asp.net+sqlserver多方式分页

分页,WEB程序中最常见的应用。现在很多网站也采了AJAX分页的方法。真的会提高分页速度嘛?我看,不一定,但给用户更好的视觉感,这是肯定的。。本想找在网上找个源码好好学习一下,这样也可以少走一些弯路。无耐找了一上午也没有找合意的。。。大部分是使用了第三方控件。 要么就是一些讲原理的..唉..还自己动手吧..自己动手,丰衣足食.呵呵...从找到的资料中总结了一下,AJAX分页大概有三种实现方式有(1)直接绑定Gridview,(2)输出xml,(3)输出JSON,首先我也采用GridView绑定,直接输出,这样做客户端JS代码也不要做太多事情,获取输出取直接加载到DIV标签中就是呢。这样做简单是简单,但在练习中遇到一个问题那就是总页码怎么传递过去,再者返回的东西太多,不如返回XML,JSON简洁。这样是否会影响传输速度呢?我也凝惑,还需要高人指点。XML与JSON两种格式,我采用了JSON。JSON比XML更简洁,传输速度更快。对于这样不复杂的数据JSON完全够用呢。
JSON:简单地说,JSON 可以将 JavaScript 对象中表示的一组数据转换为字符串,然后就可以在函数之间轻松地传递这个字符串,或者在异步应用程序中将字符串从 Web 客户机传递给服务器端程序。这个字符串看起来有点儿古怪(稍后会看到几个示例),但是 JavaScript 很容易解释它,而且 JSON 可以表示比名称/值对更复杂的结构。例如,可以表示数组和复杂的对象,而不仅仅是键和值的简单列表。
JSON参考文章:http://www.ibm.com/developerworks/cn/web/wa-ajaxintro10/
效果图
 1、创建显示页面PageShowAjax.aspx
  主要函数:
  createXMLHttpRequest()
  创建XMLHttpRequest对象

  GotoPage(actiontmp)
  actiontmp分页动作
  GotoPage()获取页码,异步调用CreatePageAjax。CreatePageAjax根据页码,查询数据表,返回JSON格式字符串。

  function CreateTable()
  CreateData()获取CreatePageAjax 返回的数据,CreateTable解析返回的JSON字符串,生成表格

  function CreateData()
  获取CreatePageAjax返回的JSON字符串,调用CreateTable() 生成表格 。并加载到DIV标签中。

详细代码如下:
<! 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 >
    
< style  type ="text/css" >
         body 
{  line-height : 20px ;  font-size : 12px ;  background : #ffffff ; color : #069 ; }
         a:link
{ padding 2px 0px 0px 2px;line-height : 18px ; color : #069 ; text-decoration : none ; }
         a:visited
{ padding 2px 0px 0px 2px;line-height : 18px ; color : #069 ; text-decoration : none ; bgckground : #CCC }
         a:hover
{ padding 2px 0px 0px 2px;line-height : 18px ; color : #069 ; text-decoration : none ; background : #FFFF99 ; }
         table
{
          border
: 1px   solid   #000000 ;
          background
: #f8f8ff ;
           hrong
: expression(this.cellSpacing=1) ;  
          
         
}
       
         
         .tr_head
{
         background
: #ffffe0 ;

         
}
         .tr_one
{
         background
: #fffafa ;
         
}
         .tr_two
{
         background
: #f8f8ff ;
         
}
          tr
{
           background
: #ffffff ;
           bencalie
: expression(this.οnmοuseοver=function(){this.style.background='#FFFF99' ; this.style.cursor='pointer' } );
           bencalie1:expression(this.οnmοuseοut=function()
{ this.style.background='#ffffff' } )
           }   
          
    
</ style >
< script  type ="text/javascript"  src ="JS/json.js" ></ script >
< script  language =javascript  type ="text/javascript" >
//  <!CDATA[
var  PageCurrenNO;
var  PageCount;
var  actiontmp;
var  ShowID;
var  xmlHttp;
var  ShowTalbe;
var  Rowset;
var  MaxPageNO;
var  n;

// 创建对象
function  createXMLHttpRequest()
{

    
var  isRight  =   true ;
    
try { xmlHttp  =   new  XMLHttpRequest(); }
    
catch (trymicrosoft)
    {
        
try {xmlHttp  =   new  ActiveXobject( " Msxml2.XMLHTTP " );}
        
catch (othermicrosoft)
        {
            
try {xmlHttp  =   new  ActiveXobject( " Microsoft.XMLHTTP " );}
            
catch (failed)
            {
                isRight 
=   false ;
            }
        }
    }
    
if ( ! isRight)
      alert(
" XML对象创建失败 " );
}

// 分页
function  GotoPage(actiontmp)
{
    PageCurrenNO 
=  document.getElementById( " PageCurren " ).innerText;
    MaxPageNO 
=  document.getElementById( " PageCount " ).innerText;              

    
if (PageCurrenNO == ""   ||  PageCurrenNO == null )
    {
        PageCurrenNO 
=   1 ;
    }
    
if (PageCurrenNO == 1 && actiontmp == " pre " )
    {
       alert(
" 以经是第一页 " );
       
return ;
    }
    
if (PageCurrenNO == MaxPageNO && actiontmp == " next " )
    {
       alert(
" 以经是最后一页 " );
       
return ;
    }
    
if (actiontmp == " go " )
    {
        n 
=  document.getElementById( " govalue " ).value;
        
if (n > MaxPageNO)
        {
          alert(
" 不能超过最大页 " );
          
return ;
        }
        
var  reg   =   / ( ^ [ 1 - 9 ]{ 1 }[ 0 - 9 ]{ 0 ,}$) / ;
        
if ( ! reg.test(n))
        {
           alert(
" 输入数字不是有效页码请重新输入 " );
           
return ;        
        } 
    }
    
    ShowID 
=  document.getElementById( " M1_0 " );
    ShowID.innerHTML
= " 正在载入...... " ;
    
// 创建xmlHttp对象
    createXMLHttpRequest()
    
// 第一页
     if (actiontmp == " a " )
    {
         n 
= 1 ;
        document.getElementById(
" PageCurren " ).innerText = " 1 " ;
        url 
=   " CreatePageAjax.aspx?PageNo=1 " ;
        xmlHttp.open(
" GET " ,url, true );
        xmlHttp.onreadystatechange 
=  CreateData;
        xmlHttp.send(
null );
    }
    
// 最后一页
     if (actiontmp == " z " )
    {
        n 
=  MaxPageNO;
        url 
=   " CreatePageAjax.aspx?PageNo= " + MaxPageNO;
        xmlHttp.open(
" GET " ,url, true );
        xmlHttp.onreadystatechange 
=  CreateData;
        xmlHttp.send(
null );
    }
    
// 上一页
     if (actiontmp == " pre " )
    {
        n 
=  parseInt(PageCurrenNO) - parseInt( 1 );
        url 
=   " CreatePageAjax.aspx?PageNo= " + n;
        xmlHttp.open(
" GET " ,url, true );
        xmlHttp.onreadystatechange 
=  CreateData;
        xmlHttp.send(
null );       
    }
    
// 下一页
     if (actiontmp == " next " )
    {
        n 
=   parseInt(PageCurrenNO) + parseInt( 1 );
        url 
=   " CreatePageAjax.aspx?PageNo= " + n;
        xmlHttp.open(
" GET " ,url, true );
        xmlHttp.onreadystatechange 
=  CreateData;
        xmlHttp.send(
null );  
    }
    
// 下拉框选择跳转
     if (actiontmp == " pagechange " )
    {
        
var  thisobj  =  document.getElementById( " svalue " );
        n 
=  thisobj.options(thisobj.selectedIndex).value;
        url 
=   " CreatePageAjax.aspx?PageNo= " + n;
        xmlHttp.open(
" GET " ,url, true );
        xmlHttp.onreadystatechange
= CreateData;
        xmlHttp.send(
null );
    }
    
// 输入数字跳转
     if (actiontmp == " go " )
    {
        n 
=  document.getElementById( " govalue " ).value;
        
var  reg   =   / ( ^ [ 1 - 9 ]{ 1 }[ 0 - 9 ]{ 0 ,}$) / ;
        
if (reg.test(n))
        {
           url 
=   " CreatePageAjax.aspx?PageNo= " + n;
           xmlHttp.open(
" GET " ,url, true );
           xmlHttp.onreadystatechange 
=  CreateData;
           xmlHttp.send(
null );         
        }
        
else
        {
           alert(
" 输入数字不是有效页码请重新输入 " );
           
return ;        
        } 
    }
    
// 生成下拉列表
    CreateSelect();
    
// 改变所有控件当前页码值
    ChangePageVaue();
 }

// 创健数据
  function  CreateData()
 {
    
if (xmlHttp.readyState == " 4 " )
      
if (xmlHttp.status == " 200 " )
      {
        
// ShowID.innerHTML=
        
        Rowset 
=  xmlHttp.responseText;
        
// 转换成JSON格式
        Rowset  =  Rowset.parseJSON();
        
// 创退表格
        CreateTable();
        ShowID.innerHTML
= ShowTalbe;
       }
       
else
       {
            ShowID.innerHTML
= " 数据读取错误 " + xmlHttp.status;
       }       
  }
  
// 创建表格
   function  CreateTable()
  {
     
// 获取最大页
      document.getElementById( " PageCount " ).innerText  =  Rowset.PageInfo[ 0 ].PageCount;
      MaxPageNO 
=  Rowset.PageInfo[ 0 ].PageCount;
     
// 获取当前页
      document.getElementById( " PageCurren " ).innerText  =   Rowset.PageInfo[ 0 ].PageNo;
     
// 获取显示记录条数
      var  m  =  parseInt(Rowset.PageInfo[ 0 ].ShowRows);
     ShowTalbe 
=   " <table> " ;
     
var  ID;
     
var  FirstName;
     
var  LastName;
     
var  Country;
     
var  Note;
     
var  ClasName;
     ClasName 
=   " tr_head "
     ShowTalbe 
=  ShowTalbe  + " <tr class=' " + ClasName + " '><td>ID</td><td>FirstName</td><td>LastName</td><td>LastName</td><td>Country</td><td>Note</td></tr> " ;
     
for ( var  i = 0 ;i < m;i ++ )
     {
        ID        
=  Rowset.RecordList[i].ID;
        FirstName 
=  Rowset.RecordList[i].FirstName;
        LastName  
=  Rowset.RecordList[i].LastName;
        Country   
=  Rowset.RecordList[i].Country;
        Note      
=  Rowset.RecordList[i].Note;

        ShowTalbe 
=  ShowTalbe  + " <tr ><td> " + ID + " </td><td> " + FirstName + " </td><td> " + LastName + " </td><td> " + LastName + " </td><td> " + Country + " </td><td> " + Note + " </td></tr> " ;
     }
     ShowTalbe 
=  ShowTalbe + " </table> " ;
 }
 
// 生成页码下拉列表
  function  CreateSelect()
 {
    
var  valuetmp  =  document.getElementById( " selectarea " ).innerText;
    
if (valuetmp == null || valuetmp == "" )
    {
        
var  str  =   " <select id="svalue" οnchange="GotoPage('pagechange');"> "
        
for ( var  j = 1 ;j < 50 ;j ++ )
       {
          str 
=  str + " <option value=' " + j + " '> " + j + " </option> " ;
       }
       str 
=  str  +   " </select> "     
      document.getElementById(
" selectarea " ).innerHTML  =   str;
      
// alert(str);
         // function add(){
         // var s=document.getElementById("lbxAccepter");
         // var n=hid.value;
         // hid.value=parseInt(n)+1;
        // var op=new Option(n,n);
        // s.add(op);
    }
 }
 
// 改变所有控件当前页码值
  function  ChangePageVaue()
 {
     document.getElementById(
" govalue " ).value = n;
     
if (n < 50 )
     {  
        
var  thisobj  =  document.getElementById( " svalue " ); 
        
var  mm  =  parseInt(n) - 1 ;
        thisobj.options[mm].selected 
=   true ;
     }
 } 
//  ]]>
</ script >

</ head >
< body  onload ="GotoPage('a')" >
< div  id ="M1_0" ></ div >
< span  id ="PageCount" ></ span > &nbsp;
< span  id ="PageCurren" ></ span > &nbsp;
< span >< href ="javascript:GotoPage('a');" > 首页 </ a ></ span > &nbsp;
< span >< href ="javascript:GotoPage('pre');" > 上一页 </ a ></ span > &nbsp;
< span >< href ="javascript:GotoPage('next');" > 下一页 </ a ></ span > &nbsp;
< span >< href ="javascript:GotoPage('z');" > 末页 </ a ></ span > &nbsp;
< span  id ="selectarea" ></ span > &nbsp;
< span >
   
< input  id ="govalue"  type =text  maxlength ="6"   size ="5"  value ="1" />
   
< input  type =button  value ="go"  onclick ="GotoPage('go')" />
</ span >
</ body >
</ html >
CreatePageAjax.aspx只有两句
<% @ Page Language = " C# "  AutoEventWireup = " true "  CodeFile = " CreatePageAjax.aspx.cs "  Inherits = " CreatePageAjax "   %>
<% @ OutputCache Duration = " 60 "  VaryByParam = " PageNo "   %>

CreatePageAjax.aspx.cs
根据获取到的页码,查询相关数据。并转换成JSON类型字符串输出。
//  (c) Copyright XXXXXXX Corporation.
//  多方式AJAX分页
//  See 
//  Email:alphacn@126.com
//  MSN  :cyulicn@hotmail.com
//  2007.9.25 Alpha 

using  System;
using  System.Data;
using  System.Configuration;
using  System.Collections;
using  System.Web;
using  System.Web.Security;
using  System.Web.UI;
using  System.Web.UI.WebControls;
using  System.Web.UI.WebControls.WebParts;
using  System.Web.UI.HtmlControls;

using  System.Data.SqlClient;
using  System.Text;
using  System.Xml;

///   <summary>
///  根据页码读取本页内容
///   </summary>
public   partial   class  CreatePageAjax : System.Web.UI.Page
{
    
// 当前页码
     private   int  PageNo;
    
// 当前页临时量
     private   string  PageNoTemp;
    
// 总页数
     private   int  PageCount;
    
// 总记录数
     private   int  ShowNumbers;
    
// 每页显示的条数
     private   int  ShowRows = 20 ;
    
// 查询SQL语句
     private   string  SqlStr;
    
// 开始条数
     private   int  StartRows;
    
// 总页数缓存变量
     object  o;
    
    
///   <summary>
    
///  
    
///   </summary>
    
///   <param name="sender"></param>
    
///   <param name="e"></param>
     protected   void  Page_Load( object  sender, EventArgs e)
    {
        
// 获取当然页码
        PageNoTemp  =  Request.QueryString[ " PageNo " ];
        
// PageNoTemp为空默认为第一页
         if  (PageNoTemp  ==   null   ||  PageNoTemp  ==   "" )
        {
            PageNo 
=   1 ;
        }
        
else
        {
            PageNo 
=   int .Parse(PageNoTemp);
        }
        
// 总页数缓存变量
        o  =  ViewState[ " PageCount " ];

        
using (SqlConnection Conn  =   new  SqlConnection( " server=.;database=PubData;uid=sa;pwd=123456 " ))
        {
            
// 打开数据库链接
            Conn.Open();
            
// o为空表示该用户第一次访问,需要统计总页数
             if  (o  ==   null )
            {
                SqlStr 
=   " select count(ID) from TestTable " ;
                SqlCommand cmd3 
=   new  SqlCommand(SqlStr, Conn);
                SqlDataReader  dr 
=  cmd3.ExecuteReader();
                dr.Read();
                ShowNumbers 
=   int .Parse(dr[ 0 ].ToString());
                
if (ShowNumbers  %  ShowRows > 0 )
                {
                    PageCount 
=  (ShowNumbers  /  ShowRows)  +   1 ;
                }
                
else
                {
                    PageCount 
=   ShowNumbers  /  ShowRows;
                }
                ViewState[
" PageCount " =  PageCount;
                dr.Close();
            }
            
// 从ViewState["PageCount"]中获取总页数
            PageCount  =   int .Parse(ViewState[ " PageCount " ].ToString());
            
// 计算开始条数
            StartRows  =  ( this .PageNo  -   1 *   this .ShowRows;

            SqlStr 
=   " select top  "   +  ShowRows  +   "  *  from  TestTable where ID not in(select top  "   +  StartRows  +   "  ID  from  TestTable order by ID desc) " ;
            
// 使用GridView传输
            
// SqlDataAdapter Da = new SqlDataAdapter(SqlStr, Conn);
            
// DataSet Ds = new DataSet();
            
// Da.Fill(Ds, "DsTest");
            
// GridView1.DataSource = Ds.Tables["DsTest"].DefaultView;
            
// GridView1.DataBind();
            SqlCommand cmd  =   new  SqlCommand(SqlStr, Conn);
            
// 用XML转输
            
//  System.Xml.XmlReader reader = cmd.ExecuteXmlReader();
            SqlDataReader reader  =  cmd.ExecuteReader();
            System.Text.StringBuilder sb 
=   new  StringBuilder();
            
int  n  =   0 ;
            
// 将记录信息生成JSON格式
            sb.Append( " {"RecordList":[ " );
            
while  (reader.Read())
            {
                sb.Append(
" { " );
                sb.Append(
"  "ID":" " + reader[ 0 ] + " ", " );
                sb.Append(
"  "FirstName":" "   +  reader[ 1 +   " ", " );
                sb.Append(
"  "LastName":" "   +  reader[ 2 +   " ", " );
                sb.Append(
"  "Country":" "   +  reader[ 3 +   " ", " );
                sb.Append(
"  "Note":" "   +  reader[ 4 +   " " " );
                sb.Append(
" }, " );
                n 
=  n  +   1 ;
            }
            sb.Append(
" ], " );
            sb.Append(
" "PageInfo":[{"PageCount":" "   +  ViewState[ " PageCount " +   " ","PageNo":" "   +  PageNo  +   " ","ShowRows":" "   +  n.ToString()  +   " "}] " );
            sb.Append(
" } " );
            reader.Close();
            
// 输出JSON变量
            Response.Write(sb.ToString());
            
// Response.End();
        }
    }
}

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 5
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值