用AjaxPro实现无刷新翻页效果及数据库分页技术介绍
在看本文之前,建议查看本人的系列文章: 《AjaxPro与服务器端交互过程中如何传值》:http://blog.csdn.net/zhoufoxcn/archive/2008/01/05/2026908.aspx 《用AjaxPro实现二级联动》:http://blog.csdn.net/zhoufoxcn/archive/2008/01/07/2029204.aspx 《用Aj
在看本文之前,建议查看本人的系列文章:
《AjaxPro与服务器端交互过程中如何传值》:http://blog.csdn.net/zhoufoxcn/archive/2008/01/05/2026908.aspx
《用AjaxPro实现二级联动》:http://blog.csdn.net/zhoufoxcn/archive/2008/01/07/2029204.aspx
《用AjaxPro实现定时刷新效果》:http://blog.csdn.net/zhoufoxcn/archive/2008/03/09/2160407.aspx
以便对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;
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
select * from (select rownum no,* from userlist where rownumm) 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;
///
/// 说明:本文介绍如何利用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("" + (pageIndex+1) + "");
}
else
{
text.Append("");
}
if (pageIndex > 1)
{
text.Append("" + (pageIndex-1)+ "");
}
else
{
text.Append("");
}
text.Append("" + pageCount + ")'>尾页
");
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代码,开发效率高,但是较真地说它占用了服务器资源;在客户端拼接的办法的优点就是拼接时不占用服务器资源,运行效率高,但是编写的时候效率较低。

熱AI工具

Undresser.AI Undress
人工智慧驅動的應用程序,用於創建逼真的裸體照片

AI Clothes Remover
用於從照片中去除衣服的線上人工智慧工具。

Undress AI Tool
免費脫衣圖片

Clothoff.io
AI脫衣器

Video Face Swap
使用我們完全免費的人工智慧換臉工具,輕鬆在任何影片中換臉!

熱門文章

熱工具

記事本++7.3.1
好用且免費的程式碼編輯器

SublimeText3漢化版
中文版,非常好用

禪工作室 13.0.1
強大的PHP整合開發環境

Dreamweaver CS6
視覺化網頁開發工具

SublimeText3 Mac版
神級程式碼編輯軟體(SublimeText3)

蘋果公司最新發布的iOS18、iPadOS18以及macOSSequoia系統為Photos應用程式增添了一項重要功能,旨在幫助用戶輕鬆恢復因各種原因遺失或損壞的照片和影片。這項新功能在Photos應用的"工具"部分引入了一個名為"已恢復"的相冊,當用戶設備中存在未納入其照片庫的圖片或影片時,該相冊將自動顯示。 "已恢復"相簿的出現為因資料庫損壞、相機應用未正確保存至照片庫或第三方應用管理照片庫時照片和視頻丟失提供了解決方案。使用者只需簡單幾步

在當今智慧型手機市場中,螢幕素質已成為衡量一款手機綜合性能的關鍵指標之一。 iQOO旗下的Neo系列一直致力於為用戶提供出色的遊戲體驗和視覺享受,最新款產品iQOONeo9SPro+更是採用一塊"三好護眼電競屏",接下來我們就來一起看看這塊屏幕的素質有多出色。 iQOONeo9SPro+搭載了一塊1.5KOLED電競直屏,支援從1Hz到144Hz的旗艦級LTPO自適應刷新率,意味著在顯示靜態內容時能夠實現超低功耗的待機狀態,而在遊戲過程中也能智能切換至90Hz至144Hz的動態高

寫在前面&筆者的個人理解基於圖像的3D重建是一項具有挑戰性的任務,涉及從一組輸入圖像推斷目標或場景的3D形狀。基於學習的方法因其直接估計3D形狀的能力而受到關注。這篇綜述論文的重點是最先進的3D重建技術,包括產生新穎的、看不見的視野。概述了高斯飛濺方法的最新發展,包括輸入類型、模型結構、輸出表示和訓練策略。也討論了尚未解決的挑戰和未來的方向。鑑於該領域的快速進展以及增強3D重建方法的眾多機會,對演算法進行全面檢查似乎至關重要。因此,本研究對高斯散射的最新進展進行了全面的概述。 (大拇指往上滑

PHP處理資料庫連線報錯,可以使用下列步驟:使用mysqli_connect_errno()取得錯誤代碼。使用mysqli_connect_error()取得錯誤訊息。透過擷取並記錄這些錯誤訊息,可以輕鬆識別並解決資料庫連接問題,確保應用程式的順暢運作。

如何在PHP中使用MySQLi建立資料庫連線:包含MySQLi擴充(require_once)建立連線函數(functionconnect_to_db)呼叫連線函數($conn=connect_to_db())執行查詢($result=$conn->query())關閉連線( $conn->close())

在這個快節奏的時代,OPPOFindX7可以用它的影像力量,讓我們去細細品味生活中的每一個美好時刻。無論是壯麗的山川湖海,還是溫馨的家庭聚會,亦或是街頭的偶遇與驚喜,它都能以"絕絕子"的畫質,幫你記錄下來。從外頭看,在相機Deco的設計上,FindX7與Ultra版如出一轍,採用了同心圓弧的造型,參考了專業相機鏡頭的全棱線設計,還有經典的哈蘇"H"大logo,整體看起來很有辨識度,也很有高級感。而內裡也是一絕,首先是基礎的硬體配置。 FindX7維持了上一

OpenAI發布的GPT-4o模型無疑是一個巨大的突破,特別是在其能夠處理多種輸入媒介(文字、音訊、圖片)並產生相應輸出方面。這種能力使得人機互動更加自然直觀,大大提升了AI的實用性和可用性。 GPT-4o的幾個關鍵亮點包括:高度可擴展性、多媒體輸入輸出、自然語言理解能力的進一步提升等等。 1.跨媒介輸入/輸出:GPT-4o+能夠接受文字、音訊和圖片的任意組合作為輸入,並直接產生這些媒介的輸出。這打破了傳統AI模型僅處理單一輸入類型的限制,使得人機互動更加靈活和多樣化。這項創新有助於推動智能助手

可以透過使用gjson函式庫或json.Unmarshal函數將JSON資料儲存到MySQL資料庫中。 gjson函式庫提供了方便的方法來解析JSON字段,而json.Unmarshal函數需要一個目標類型指標來解組JSON資料。這兩種方法都需要準備SQL語句和執行插入操作來將資料持久化到資料庫中。
