All articles| All Pictures| All Softwares| All Video| Go home page| Write articles| Upload pictures

Reading number is top 10 articles
ASP.NET&Spring.NET&NHibernate最佳实践(二)——第1章前言_[Asp.Net教程]
C#中的GDI+概述
深入Atlas系列之服务器端支持(上)_.net资料_编程技术
SQL Server服务器内存管理问题_[SQL Server教程]
解决方案:MS,SQL数据库的连接处理问题_[SQL,Server教程]
SQL Server 2008安装过程图解_[SQL Server教程]
Visual,Studio,Team,System,2008,Team,Suite_[Asp.Net教程]
CView类的OnUpdate()成员函数
ASP.NET程序错误“HTTP1.0,500,Server,Error”的一个解决办法
document.all还是document.getElementsByName_JavaScript技术_编程技术
Reading number is top 10 pictures
餐桌上的鱼
NeedWallpaper10
8090后结婚的各种XX事
分手的感悟
Chinese paper-cut grilles art appreciation7
So beauty, will let you spray blood1
人美胸美腿更美4
初五接财神啦!五路财神齐来到
So beauty, will let you spray blood6
西游四格漫画(四)
Download software ranking
Eclipse-CALMSANNY (second edition)
Call Of Duty5
C#编程思想
Unix video tutorial9
Professional killers2 data package
Ashlynn Video4
Visual C++界面编程技术
I'm come from Beijing1
Tram sex maniac 2 (H) rar bag14
终极变速大师Speeder3.26
归海一刀 published in(发表于) 2014/3/16 2:55:05 Edit(编辑)
用AjaxPro实现无刷新翻页效果及数据库分页技术介绍_[AJAX教程]

用AjaxPro实现无刷新翻页效果及数据库分页技术介绍_[AJAX教程]

用AjaxPro实现无刷新翻页效果及数据库分页技术介绍_[AJAX教程]























在看本文之前,建议查看本人的系列文章:
AjaxPro与服务器端交互过程中如何传值
用AjaxPro实现二级联动
用AjaxPro实现定时刷新效果
以便对AjaxPro有个初步印象。




题外话:经不住一些朋友的一再要求,一气写了这么几篇Ajax方面的文章,这其中大部分代码都是从我的项目中摘取出来的,不过为了演示整个程序的框架结构,所以在演示程序代码里不会有大量与实际相关的业务逻辑处理,但是这并不妨碍你利用这些理论做出复杂的、完善的应用。




一、数据库分页理论
在实际项目中经常会遇到一个表里有几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,m



MS SQL Server:










select top (m-n) * from userList where userid not in
(select top n userid from userList order by userid) order by userid



Oracle:










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" %>





AjaxPro翻页效果













和谐小区青年居民概况表












数据装载中,请等待.....












说明:本名单中不包括离退休人员、残疾智障人员和儿童。














后台代码:










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;

///
/// 说明:本文介绍如何利用AjaxPro技术实现翻页时局部刷新,同时也介绍了翻页所涉及到的数据库知识(MySQL、MS SQL和Oracle)。
/// 本演示程序采用MySQL数据库,数据库中的数据是采用程序随机生成的。
/// 首发地址:http://blog.csdn.net/zhoufoxcn/archive/2008/03/12/2174234.aspx
/// 作者:周公
/// 日期:2008-3-12
///

public partial class AjaxPager : System.Web.UI.Page
{
protected void Page_Load(object sender, EventArgs e)
{
AjaxPro.Utility.RegisterTypeForAjax(typeof(AjaxPager));
}

///
/// 从数据库中指定位置读取指定数目的数据
///

/// 记录的起始页位置
/// 要读取的记录条数
///
[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;
}
///
/// 传递div节点的html字符串
///

/// 记录的起始页位置
/// 要读取的记录条数
///
[AjaxPro.AjaxMethod]
public string GetString(int pageIndex, int size)
{
StringBuilder text = new StringBuilder();
text.Append("

");
text.Append("

");
text.Append("

编号

");
text.Append("

姓名

");
text.Append("

年龄

");
text.Append("

性别

");
text.Append("

身高

");
text.Append("

工资

");
text.Append("

");
DataTable source = GetDataTable(pageIndex,size);
DataRow row;
for (int i = 0; i < source.Rows.Count; i++)
{
row = source.Rows[i];
text.Append("

");
for (int column = 0; column < source.Columns.Count; column++)
{
text.Append("

" + row[column].ToString() + "

");
}
text.Append("

");
}
int pageCount=(int)(Math.Ceiling(GetRecordCount()/(double)size));
text.Append("

");
text.Append("

首页

");
if (pageIndex < pageCount)
{
text.Append("

下一页

");
}
else
{
text.Append("

下一页

");
}
if (pageIndex > 1)
{
text.Append("

上一页

");
}
else
{
text.Append("

上一页

");
}
text.Append("

尾页

");
text.Append("

当前页:"+pageIndex+"/"+pageCount+"

");
text.Append("

");
return text.ToString();
}
///
/// 返回记录总条数
///

///
[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代码,开发效率高,但是较真地说它占用了服务器资源;在客户端拼接的办法的优点就是拼接时不占用服务器资源,运行效率高,但是编写的时候效率较低。

来源:http://blog.csdn.net/zhoufoxcn









































添加到del.icio.us 添加到新浪ViVi 添加到百度搜藏 添加到POCO网摘 添加到天天网摘365Key 添加到和讯网摘 添加到天极网摘 添加到黑米书签 添加到QQ书签 添加到雅虎收藏 添加到奇客发现 diigo it 添加到饭否 添加到飞豆订阅 添加到抓虾收藏 添加到鲜果订阅 digg it 貼到funP 添加到有道阅读 Live Favorites 添加到Newsvine 打印本页 用Email发送本页 在Facebook上分享


Disclaimer Privacy Policy About us Site Map

If you have any requirements, please contact webmaster。(如果有什么要求,请联系站长)
Copyright ©2011-
uuhomepage.com, Inc. All rights reserved.