Asp.Net教程,WinForm教程,Asp.Net MVC,vs2008教程,vs2010教程,Silverlight技术,源码下载,Asp.Net视频教程
全站热门标签
vs2010 Silverlight 存储过程 水晶报表 ADO.NET JavaScript LINQ AjaxPro DataGridView 面向对象 Extjs GridView XML DevExpress HTML教程 Oracle jQuery 分页 GDI+ Visual C++2010 MySQL Office2010 WPF MVC Dojo WCF4.0 VB.NET Sql2005 textbox cookie WCF WinForm Discuz!NT SQL经典语句 T-SQL checkbox ASPxGridView F# asp.net SQL VS2008新特性 DropDownList Access TreeView Ajax VS2008 页面执行时间 Flex 字符串 回调 VB2005 DataSet C#时间 ASP.NET性能优化 用户在线检测 动画
jQuery JavaScript Html/Css Flex Dojo ExtJSAJAX
当前位置: 主页 > Web编程 > AJAX >

AjaxPro实现无刷新翻页效果及数据库分页技术介绍

时间:2010-03-02 20:27来源:未知 作者:admin 点击:

一、数据库分页理论
在实际项目中经常会遇到一个表里有几K、几M以上的数据,而呈现给用户时并不会一下子都显示出来,所以都是分批展示给用户,这样一来可以减小网络传输量,二来也减轻服务器压力。

通常在不同数据库中都有查询从第N条到第M条记录的方法(M>N>=0),不过其效率和性能都不太一样。假如有如下一个表:


DROP TABLE IF EXISTS `zhoufoxcn`.`userlist`;
CREATE TABLE  `zhoufoxcn`.`userlist` (
  `UserId` int(10) unsigned NOT NULL auto_increment,
  `UserName` varchar(45) NOT NULL,
  `Age` int(10) unsigned NOT NULL default '10',
  `Sex` tinyint(3) unsigned NOT NULL default '1',
  `Tall` int(10) unsigned NOT NULL,
  `Salary` int(10) unsigned NOT NULL,
  PRIMARY KEY  (`UserId`)
) ENGINE=InnoDB AUTO_INCREMENT=694 DEFAULT CHARSET=utf8;以上是我今天演示要用到的一个MySQL中的表,对于同样结构的表,查询从第N条到第M条记录的方法在MySQL中表示为:
select * from userlist  order by userId limit n,mMS SQL Server:
select top (m-n) * from userList where userid not in
(select top  n userid from userList  order by userid) order by useridOracle:
select * from (select rownum no,* from userlist where rownum<=m) where no>=n;

另外,如果数据量小的话还可以直接用DbDataAdapter 的子类的实例的public int Fill (int startRecord,int maxRecords,params DataTable[] dataTables)方法。如果数据量大的话,可能会根据实际情况采用临时表或者缓存的办法,来获得更高性能。

二、程序代码:
前台页面:


<%@ Page Language="C#" AutoEventWireup="true" CodeFile="AjaxPager.aspx.cs" Inherits="AjaxPager" %>

<!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>AjaxPro翻页效果</title>
    <style type="text/css">
tr.items{       
    background-color: #8FACC2;
    border-color:#FFFFFF;
    line-height:18px;
}
tr.table{        /*表格内容*/
    background-color: #F1F3F5;
    border-color:#FFFFFF;
    line-height:18px;
}
    </style>
</head>
<body onload="JumpPage(1)">
    <form id="form1" runat="server">
    <table border="0" cellpadding="1" cellspacing="1">
    <tr><td>和谐小区青年居民概况表</td></tr>
    <tr><td>
    <div id="memberList">
    数据装载中,请等待.....
     </div>
     </td></tr>
     <tr><td>说明:本名单中不包括离退休人员、残疾智障人员和儿童。</td></tr>
     </table>
    </form>
    <script language="javascript" type="text/javascript" defer="defer">
        var pageSize=20;//假定每页显示20条数据
        function JumpPage(page)//完全服务器端分页处理方法
        {
            var label=document.getElementById("memberList");
            label.innerHTML=AjaxPager.GetString(parseInt(page),parseInt(pageSize)).value;
        }
        /*
        function ShowPager()
        {
        }
       
        function JumpPageClient(page)
        {
            var label=document.getElementById("memberList");
            var data=AjaxPager.GetDataTable(parseInt(page),parseInt(pageSize)).value;
            if(data!=null)
            {
            alert(data.Rows.length);
            }
            label.innerHTML=data.Rows.length;
           
        }
        */
    </script>
</body>
</html>后台代码:
using System;
using System.Data;
using System.Configuration;
using System.Collections;
using System.Web;
using System.Web.Caching;
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.Text;
using MySql.Data.MySqlClient;
using MySql.Data.Types;

/// <summary>
/// 说明:本文介绍如何利用AjaxPro技术实现翻页时局部刷新,同时也介绍了翻页所涉及到的数据库知识(MySQL、MS SQL和Oracle)。
/// 本演示程序采用MySQL数据库,数据库中的数据是采用程序随机生成的。
/// 首发地址:http://blog.csdn.net/zhoufoxcn/archive/2008/03/12/2174234.aspx
/// 作者:周公
/// 日期:2008-3-12
/// </summary>
public partial class AjaxPager : System.Web.UI.Page
{
    protected void Page_Load(object sender, EventArgs e)
    {
        AjaxPro.Utility.RegisterTypeForAjax(typeof(AjaxPager));
    }

    /// <summary>
    /// 从数据库中指定位置读取指定数目的数据
    /// </summary>
    /// <param name="startIndex">记录的起始页位置</param>
    /// <param name="size">要读取的记录条数</param>
    /// <returns></returns>
    [AjaxPro.AjaxMethod]
    public DataTable GetDataTable(int pageIndex, int size)
    {
        MySqlConnection connection = new MySqlConnection(ConfigurationManager.ConnectionStrings["MySql"].ConnectionString);
        MySqlDataAdapter adapter = new MySqlDataAdapter("select * from userlist limit " + (pageIndex-1) * size + "," + size, connection);
        DataTable data = new DataTable();
        adapter.Fill(data);
        connection.Close();
        adapter.Dispose();
        return data;
    }
    /// <summary>
    /// 传递div节点的html字符串
    /// </summary>
    /// <param name="startIndex">记录的起始页位置</param>
    /// <param name="size">要读取的记录条数</param>
    /// <returns></returns>
    [AjaxPro.AjaxMethod]
    public string GetString(int pageIndex, int size)
    {
        StringBuilder text = new StringBuilder();
        text.Append("<table border='0' cellpadding='0' cellspacing='0' width='520px'>");
        text.Append("<tr class='items' align='center'>");
        text.Append("<td style='width:80px'>编号</td>");
        text.Append("<td style='width:80px'>姓名</td>");
        text.Append("<td style='width:80px'>年龄</td>");
        text.Append("<td style='width:80px'>性别</td>");
        text.Append("<td style='width:80px'>身高</td>");
        text.Append("<td style='width:80px'>工资</td>");
        text.Append("</tr>");
        DataTable source = GetDataTable(pageIndex,size);
        DataRow row;
        for (int i = 0; i < source.Rows.Count; i++)
        {
            row = source.Rows[i];
            text.Append("<tr class='table' align='center'>");
            for (int column = 0; column < source.Columns.Count; column++)
            {   
                text.Append("<td style='width:80px'>" + row[column].ToString() + "</td>");
            }
            text.Append("</tr>");
        }
        int pageCount=(int)(Math.Ceiling(GetRecordCount()/(double)size));
        text.Append("<tr class='items' align='center'>");
        text.Append("<td><a href='javascript:JumpPage(1)'>首页</a></td>");
        if (pageIndex < pageCount)
        {
            text.Append("<td><a href='javascript:JumpPage(" + (pageIndex+1) + ")'>下一页</a></td>");
        }
        else
        {
            text.Append("<td>下一页</a></td>");
        }
        if (pageIndex > 1)
        {
            text.Append("<td><a href='javascript:JumpPage(" + (pageIndex-1)+ ")'>上一页</a></td>");
        }
        else
        {
            text.Append("<td>上一页</a></td>");
        }
        text.Append("<td><a href='javascript:JumpPage(" + pageCount + ")'>尾页</a><td>");
        text.Append("<td>当前页:"+pageIndex+"/"+pageCount+"</td>");
        text.Append("</table>");
        return text.ToString();
    }
    /// <summary>
    /// 返回记录总条数
    /// </summary>
    /// <returns></returns>
    [AjaxPro.AjaxMethod]
    public int GetRecordCount()
    {
        MySqlConnection connection = new MySqlConnection(ConfigurationManager.ConnectionStrings["MySql"].ConnectionString);
        MySqlCommand command = new MySqlCommand("select count(userId) from userlist", connection);
        connection.Open();
        int count = int.Parse(command.ExecuteScalar().ToString());
        connection.Close();
        command.Dispose();
        return count;
    }
}
程序的运行效果:

 


 

 

 
最后说明:细心的朋友也许还会发现程序中public DataTable GetDataTable(int pageIndex, int size)也有AjaxMethod属性,我原本打算将这个方法写完的,可是现在时间太晚,留待大家实现了。这也就是另外一种办法:向客户端返回一个DataTable,在客户端将DataTable内的数据加工一下,它与我现在展示的方法区别是一个在服务器端、一个在客户端实现拼接div层的innerHtml方法。在服务器拼接的优点是纯cs代码,开发效率高,但是较真地说它占用了服务器资源;在客户端拼接的办法的优点就是拼接时不占用服务器资源,运行效率高,但是编写的时候效率较低。 
(责任编辑:admin)
Tags:AjaxPro 无刷新翻页 AjaxPro分页
责任编辑:admin
返回顶部
------分隔线----------------------------
推荐内容
骆驼户外男 真皮磨砂日常休闲鞋 低帮 2011秋冬新款 专柜正品特价 骆驼户外男 真皮磨砂日常休闲鞋 低帮 2011秋冬新款 专柜正品特价
  • JQuery RadioButtonList

    首先介绍程序规则: 1.对以下的选择进行检查,检查是否全部选中 2,所谓的全部选中是指,一行中三个radiobutton必须有一个radiobutton被选中。...

  • JQuery实现智能输入提示(仿机票预订网站)

    最近在研究JQuery框架,JQuery是一套很优秀的JS框架,可以实现很多美观实用的控件。今天给大家推荐一个智能提示的空间,是模仿现在很多机票预订网站的城市智...

  • jQuery得到ashx返回的JSON格式的DataSet的方法

    jQuery得到ashx返回的JSON格式的DataSet的方法...

  • JQuery点击行(tr)实现checkBox选中,反选时移除和添加样式

    用到了三元运算符,和一个自定义的函数。 点击行时效果代码: $( tr ).live( click , function (){ if ($( this ).h...

  • 用jQuery模仿新浪微博时间组件

    废话不多说,实现原理主要是处理table,生成tr td,其中最重要的是如何找出每月第一天是星期几,然后就能对应出这个月的余下天数. 首先,说下有些人说这是重复...

  • Jquery之Ajax运用_学习运用篇

    JQuery中Ajax的运用相信很多人都已熟悉,本文主要是记录下个人实践中的应用知识,旨在加强记忆。 还是先说一些 基础知识: 语法:$.ajax({optio...

  • JQuery单选按钮和多选按钮状态判断

    function check_required() { var valid = true; var required=new Array; $(.require...

  • jQuery AJAX的小应用——手机号码归属地查询

    jQuery AJAX的小应用手机号码归属地查询 想测试下jQuery调用个第三方的WebService,利用 jQuery 的 $.get(url, data...

  • 多标签折页(jQuery示例)

    现在的垃圾留言越来越智能,并且从留言内容几乎看不出来是垃圾留言,而大量的垃圾留言会导致文章可读性下降,并可能会被搜索引擎惩罚,经过一段时间的分析和思考,我发现一...

  • JQuery 文本框高亮显示插件

    JQuery 中没有这个方法,自己今天写了一个Plugin,把代码贴出来分享一下; 代码如下: jquery-highlight.js /* descripti...

  • jquery的select插件

    Jquery是可以操作select表单控件的,比较反锁,下面是收集来的一个插件,还不错,能满足基本的选择。 可以使用这样的引入: type=text/javas...

  • 使用Jquery完成图片的预加载

    // 定义预加载图片列表的函数(有参数) jQuery.preloadImages = function (){ // 遍历图片 for ( var i = 0...

  • jQuery在asp.net中实现图片自动滚动

    时间真快,不知不觉12月已经过了一半了,新的一年即将到来。有段时间没写东西了,技术这东东天天都在更新,天天都是一个新面孔,如果不坚持学习肯定就会落在队尾。要想跟...

  • JQuery遍历表格指定列

    script type=text/javas cript $(function(){ $(#tb tr:gt(0)).each(function(){ var ...

  • AJAX无刷新下拉框联动

    AJAX无刷新下拉框联动的简单示例,分别使用了AJAX组件和xmlHttp异步刷新两种方式。 前台代码: %...@ Page Language=C# Auto...