ホームページ データベース mysql チュートリアル 用AjaxPro实现无刷新翻页效果及数据库分页技术介绍

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

Jun 07, 2016 pm 03:30 PM
ページネーション リフレッシュする 成し遂げる テクノロジー 効果 データベース ページをめくる

在看本文之前,建议查看本人的系列文章: 《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(45NOT 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 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(
"
");
            }
            text.Append(
"");
        }
        
int pageCount=(int)(Math.Ceiling(GetRecordCount()/(double)size));
        text.Append(
"");
        text.Append(
"");
        
if (pageIndex  pageCount)
        {
            text.Append(
"
");
        text.Append(
"
编号 姓名 年龄 性别 身高 工资
" + row[column].ToString() + "
首页 " + (pageIndex+1+ "");
        }
        
else
        {
            text.Append(
"");
        }
        
if (pageIndex > 1)
        {
            text.Append(
"
" + (pageIndex-1)+ "");
        }
        
else
        {
            text.Append(
"");
        }
        text.Append(
"
" + pageCount + ")'>尾页 ");
        text.Append(
"
当前页:"+pageIndex+"/"+pageCount+"
");
        
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;
    }
}

程序的运行效果:
用AjaxPro实现无刷新翻页效果及数据库分页技术介绍

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

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

最后说明:细心的朋友也许还会发现程序中public DataTable GetDataTable(int pageIndex, int size)也有AjaxMethod属性,我原本打算将这个方法写完的,可是现在时间太晚,留待大家实现了。这也就是另外一种办法:向客户端返回一个DataTable,在客户端将DataTable内的数据加工一下,它与我现在展示的方法区别是一个在服务器端、一个在客户端实现拼接div层的innerHtml方法。在服务器拼接的优点是纯cs代码,开发效率高,但是较真地说它占用了服务器资源;在客户端拼接的办法的优点就是拼接时不占用服务器资源,运行效率高,但是编写的时候效率较低。

このウェブサイトの声明
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。

ホットAIツール

Undresser.AI Undress

Undresser.AI Undress

リアルなヌード写真を作成する AI 搭載アプリ

AI Clothes Remover

AI Clothes Remover

写真から衣服を削除するオンライン AI ツール。

Undress AI Tool

Undress AI Tool

脱衣画像を無料で

Clothoff.io

Clothoff.io

AI衣類リムーバー

AI Hentai Generator

AI Hentai Generator

AIヘンタイを無料で生成します。

ホットツール

メモ帳++7.3.1

メモ帳++7.3.1

使いやすく無料のコードエディター

SublimeText3 中国語版

SublimeText3 中国語版

中国語版、とても使いやすい

ゼンドスタジオ 13.0.1

ゼンドスタジオ 13.0.1

強力な PHP 統合開発環境

ドリームウィーバー CS6

ドリームウィーバー CS6

ビジュアル Web 開発ツール

SublimeText3 Mac版

SublimeText3 Mac版

神レベルのコード編集ソフト(SublimeText3)

4K HD映像がわかりやすい!この大規模なマルチモーダル モデルは、Web ポスターのコンテンツを自動的に分析するため、作業者にとって非常に便利です。 4K HD映像がわかりやすい!この大規模なマルチモーダル モデルは、Web ポスターのコンテンツを自動的に分析するため、作業者にとって非常に便利です。 Apr 23, 2024 am 08:04 AM

PDF、Web ページ、ポスター、Excel グラフの内容を自動的に分析できる大型モデルは、アルバイトにとってはあまり便利ではありません。上海 AILab、香港中文大学、その他の研究機関が提案した InternLM-XComposer2-4KHD (略称 IXC2-4KHD) モデルは、これを実現します。解像度制限が 1500x1500 以下である他のマルチモーダル大型モデルと比較して、この作業ではマルチモーダル大型モデルの最大入力画像が 4K (3840x1600) 解像度を超え、任意のアスペクト比と 336 ピクセルをサポートし、 4K 動的解像度の変更。発売から3日後、このモデルはHuggingFaceのビジュアル質疑応答モデルの人気ランキングで1位となった。扱いやすい

iQOO Neo9S Pro+ 画面の簡単な分析。 iQOO Neo9S Pro+ 画面の簡単な分析。 Jul 19, 2024 pm 03:53 PM

今日のスマートフォン市場では、画面の品質が携帯電話の全体的なパフォーマンスを測定するための重要な指標の 1 つとなっています。 iQOO の Neo シリーズは、ユーザーに優れたゲーム体験と視覚的な楽しみを提供することに常に注力してきました。最新の製品である iQOO Neo9SPro+ は、「スリー グッド アイ プロテクション ゲーミング スクリーン」を採用しています。次に、このスクリーンの品質を見てみましょう。 iQOO Neo9S Pro+ には、1.5 KOLED e-sports ダイレクト スクリーンが装備されており、1Hz ~ 144Hz のフラッグシップ LTPO アダプティブ リフレッシュ レートをサポートしています。つまり、静的コンテンツを表示するときに超低電力スタンバイ状態を実現でき、インテリジェントな表示も可能です。ゲーム中は90Hzから144Hzのダイナミックハイに切り替えます。

iOS 18では、紛失または破損した写真を復元するための新しい「復元」アルバム機能が追加されます iOS 18では、紛失または破損した写真を復元するための新しい「復元」アルバム機能が追加されます Jul 18, 2024 am 05:48 AM

Apple の最新リリースの iOS18、iPadOS18、および macOS Sequoia システムでは、さまざまな理由で紛失または破損した写真やビデオをユーザーが簡単に回復できるように設計された重要な機能が写真アプリケーションに追加されました。この新機能では、写真アプリのツール セクションに「Recovered」というアルバムが導入され、ユーザーがデバイス上に写真ライブラリに含まれていない写真やビデオがある場合に自動的に表示されます。 「Recovered」アルバムの登場により、データベースの破損、カメラ アプリケーションが写真ライブラリに正しく保存されない、または写真ライブラリを管理するサードパーティ アプリケーションによって失われた写真やビデオに対する解決策が提供されます。ユーザーはいくつかの簡単な手順を実行するだけで済みます

OPPO Find X7は傑作です!あらゆる瞬間を画像で捉えましょう OPPO Find X7は傑作です!あらゆる瞬間を画像で捉えましょう Aug 07, 2024 pm 07:19 PM

このペースの速い時代において、OPPO Find X7 はその画像処理能力を利用して、人生のあらゆる美しい瞬間を味わうことができます。雄大な山、川、湖、海、温かい家族の集まり、街での出会いや驚きなど、あらゆる場面を「比類のない」画質で記録できます。 Find Itのカメラデコデザインは外観から見ても一目瞭然で高級感があります。基本的なハードウェア構成をはじめ、内部もユニークです。 FindX7 は以前の状態を維持します

PHP で MySQLi を使用してデータベース接続を確立するための詳細なチュートリアル PHP で MySQLi を使用してデータベース接続を確立するための詳細なチュートリアル Jun 04, 2024 pm 01:42 PM

MySQLi を使用して PHP でデータベース接続を確立する方法: MySQLi 拡張機能を含める (require_once) 接続関数を作成する (functionconnect_to_db) 接続関数を呼び出す ($conn=connect_to_db()) クエリを実行する ($result=$conn->query()) 閉じる接続 ( $conn->close())

単なる 3D ガウス以上のもの!最先端の 3D 再構成技術の最新概要 単なる 3D ガウス以上のもの!最先端の 3D 再構成技術の最新概要 Jun 02, 2024 pm 06:57 PM

上記と著者の個人的な理解は、画像ベースの 3D 再構成は、一連の入力画像からオブジェクトまたはシーンの 3D 形状を推測することを含む困難なタスクであるということです。学習ベースの手法は、3D形状を直接推定できることから注目を集めています。このレビュー ペーパーは、これまでにない新しいビューの生成など、最先端の 3D 再構成技術に焦点を当てています。入力タイプ、モデル構造、出力表現、トレーニング戦略など、ガウス スプラッシュ メソッドの最近の開発の概要が提供されます。未解決の課題と今後の方向性についても議論します。この分野の急速な進歩と 3D 再構成手法を強化する数多くの機会を考慮すると、アルゴリズムを徹底的に調査することが重要であると思われます。したがって、この研究は、ガウス散乱の最近の進歩の包括的な概要を提供します。 (親指を上にスワイプしてください

PHP でデータベース接続エラーを処理する方法 PHP でデータベース接続エラーを処理する方法 Jun 05, 2024 pm 02:16 PM

PHP でデータベース接続エラーを処理するには、次の手順を使用できます。 mysqli_connect_errno() を使用してエラー コードを取得します。 mysqli_connect_error() を使用してエラー メッセージを取得します。これらのエラー メッセージをキャプチャしてログに記録することで、データベース接続の問題を簡単に特定して解決でき、アプリケーションをスムーズに実行できるようになります。

革新的な GPT-4o: 人間とコンピューターのインタラクション エクスペリエンスを再構築する 革新的な GPT-4o: 人間とコンピューターのインタラクション エクスペリエンスを再構築する Jun 07, 2024 pm 09:02 PM

OpenAI によってリリースされた GPT-4o モデルは、特に複数の入力メディア (テキスト、オーディオ、画像) を処理し、対応する出力を生成する機能において、間違いなく大きな進歩です。この機能により、人間とコンピューターの対話がより自然かつ直観的になり、AI の実用性と使いやすさが大幅に向上します。 GPT-4o の主なハイライトには、高いスケーラビリティ、マルチメディア入出力、自然言語理解機能のさらなる向上などが含まれます。 1. クロスメディア入出力: GPT-4o+ は、テキスト、オーディオ、画像の任意の組み合わせを入力として受け入れ、これらのメディアから出力を直接生成できます。これにより、単一の入力タイプのみを処理する従来の AI モデルの制限が打ち破られ、人間とコンピューターの対話がより柔軟かつ多様になります。このイノベーションはスマート アシスタントの強化に役立ちます

See all articles