亚洲香蕉成人av网站在线观看_欧美精品成人91久久久久久久_久久久久久久久久久亚洲_热久久视久久精品18亚洲精品_国产精自产拍久久久久久_亚洲色图国产精品_91精品国产网站_中文字幕欧美日韩精品_国产精品久久久久久亚洲调教_国产精品久久一区_性夜试看影院91社区_97在线观看视频国产_68精品久久久久久欧美_欧美精品在线观看_国产精品一区二区久久精品_欧美老女人bb

首頁 > 開發 > AJAX > 正文

怎樣用AjaxPro實現無刷新翻頁效果及數據庫分頁

2024-09-01 08:26:19
字體:
來源:轉載
供稿:網友

在看本文之前,建議查看本人的系列文章:
《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" %>

<!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代碼,開發效率高,但是較真地說它占用了服務器資源;在客戶端拼接的辦法的優點就是拼接時不占用服務器資源,運行效率高,但是編寫的時候效率較低。

發表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發表
亚洲香蕉成人av网站在线观看_欧美精品成人91久久久久久久_久久久久久久久久久亚洲_热久久视久久精品18亚洲精品_国产精自产拍久久久久久_亚洲色图国产精品_91精品国产网站_中文字幕欧美日韩精品_国产精品久久久久久亚洲调教_国产精品久久一区_性夜试看影院91社区_97在线观看视频国产_68精品久久久久久欧美_欧美精品在线观看_国产精品一区二区久久精品_欧美老女人bb
国产精品久久久久久av福利软件| 国产精品久久在线观看| 日韩美女写真福利在线观看| 欧美日韩裸体免费视频| 成人精品一区二区三区电影免费| xvideos亚洲人网站| 成人黄在线观看| 亚洲xxx自由成熟| 狠狠色噜噜狠狠狠狠97| 成人国产精品日本在线| 97视频网站入口| 久久精视频免费在线久久完整在线看| 2024亚洲男人天堂| 欧美电影在线观看网站| 欧美日韩国产区| 国产精品丝袜久久久久久不卡| 在线视频一区二区| 超碰精品一区二区三区乱码| 国产成人小视频在线观看| 国产精品亚洲自拍| 国产亚洲一级高清| 黄色精品在线看| 美女视频久久黄| 精品少妇一区二区30p| 亚洲精品720p| 久久久久久亚洲| 国产精品电影久久久久电影网| 亚洲欧洲一区二区三区在线观看| 国产成人精品视频在线| 庆余年2免费日韩剧观看大牛| 国产综合久久久久久| 国产精品精品国产| 1769国内精品视频在线播放| 亚洲一区中文字幕| 欧美有码在线观看| 色综合久久久久久中文网| 国产亚洲精品成人av久久ww| 欧美成人午夜激情| 国产成人精品优优av| 欧美老女人www| 日韩成人激情视频| 亚洲一区免费网站| 精品免费在线观看| 久久精品国产69国产精品亚洲| 青青草原成人在线视频| 欧美另类极品videosbest最新版本| 丝袜美腿亚洲一区二区| 日韩av在线播放资源| 91在线观看免费高清完整版在线观看| 国产一区二区三区在线观看视频| 久久天天躁狠狠躁夜夜躁2014| 欧美亚洲日本黄色| 91精品国产乱码久久久久久蜜臀| 国产精品日本精品| 精品久久中文字幕| 亚洲免费电影一区| 国产区亚洲区欧美区| 亚洲一级免费视频| 日本精品久久中文字幕佐佐木| 一本色道久久综合狠狠躁篇的优点| 久久人人爽人人爽人人片av高请| 亚洲精品动漫久久久久| 欧美精品在线播放| 久久久久中文字幕2018| 亚洲国产精品成人精品| 7777精品久久久久久| 精品丝袜一区二区三区| 国产成人亚洲综合91精品| 国产精品成av人在线视午夜片| 丝袜美腿亚洲一区二区| 亚洲第一网站免费视频| 正在播放欧美视频| 亚洲老板91色精品久久| 国产精品久久婷婷六月丁香| 亚洲视频一区二区| 国产精品入口免费视频一| 九九热r在线视频精品| 久久九九精品99国产精品| 久久久影视精品| 这里只有视频精品| 中文字幕精品在线视频| 欧美一级高清免费| 欧美黑人性生活视频| 国产一区私人高清影院| 日韩精品在线观看一区二区| 亚洲精品一区中文字幕乱码| 亚洲国产精品久久精品怡红院| 亚洲天堂av综合网| 欧美视频二区36p| 97av在线视频| 久久亚洲精品国产亚洲老地址| 欧美激情亚洲综合一区| 亚洲午夜女主播在线直播| 亚洲美女av网站| 视频在线观看一区二区| 最近中文字幕mv在线一区二区三区四区| 精品亚洲国产成av人片传媒| 精品国产乱码久久久久酒店| 欧美成人四级hd版| 欧美性xxxxxxx| 亚州成人av在线| 久久久久久69| 亚洲欧美自拍一区| 成人亲热视频网站| 欧美日韩亚洲精品一区二区三区| 中文字幕免费国产精品| 国产丝袜高跟一区| 久久久久久久久久久国产| 在线亚洲午夜片av大片| 欧美丰满片xxx777| 日韩av在线播放资源| 91av在线不卡| 亚州国产精品久久久| 2020欧美日韩在线视频| 97精品国产aⅴ7777| 在线电影中文日韩| 日本精品性网站在线观看| 久久综合88中文色鬼| 国产精品自拍偷拍视频| 九九九久久国产免费| 色yeye香蕉凹凸一区二区av| 欧美成人中文字幕在线| 日韩亚洲成人av在线| 国产精品xxx视频| 国产成人久久久| 久久久日本电影| 国产精品久久久久91| 久久久国产精彩视频美女艺术照福利| 亚洲福利视频专区| 日韩综合视频在线观看| 久久久精品国产亚洲| 日韩高清免费在线| 91国产高清在线| 国产精品99免视看9| 欧美成人全部免费| 国产精品一二三在线| 影音先锋欧美在线资源| 欧美一区二区三区免费观看| 中日韩美女免费视频网站在线观看| 亚洲欧美日韩精品久久奇米色影视| 欧美又大粗又爽又黄大片视频| 亚洲精品视频中文字幕| 45www国产精品网站| 国产精品成人av性教育| 91精品国产91久久久| 欧美黑人xxxx| 在线电影中文日韩| 九九精品在线观看| 亚洲男人的天堂在线播放| 91亚洲国产精品| 亚洲免费一在线| 欧美一区亚洲一区| 国产精品爽爽爽爽爽爽在线观看| 欧美富婆性猛交| 中文字幕欧美在线| 日韩高清电影免费观看完整| 国产精品美女免费| 黄网动漫久久久| 中文字幕在线视频日韩| 欧美精品一区二区三区国产精品| 中文字幕亚洲第一| 亚洲日本成人网| 国模吧一区二区| 精品高清一区二区三区|