Erstellen Sie zunächst eine Tabelle (erfordert automatische Nummerierung der IDs):
Tabelle redheadedfile erstellen(
id int identität(1,1),
Dateinamen nvarchar(20),
senduser nvarchar(20),
Primärschlüssel (ID)
)
Dann schreiben wir 500.000 Datensätze:
deklariere @i int
setze @i=1
während @i<=500000
beginnen
in redheadedfile(filenames,senduser) Werte('mein Paging-Algorithmus','Lu Junming') einfügen
setze @i=@i+1
Ende
GEHEN
Verwenden Sie Microsoft Visual Studio .NET 2003, um eine WebForm-Webseite zu erstellen (ich habe sie webform8.aspx genannt).
Das Front-End-Code-Snippet lautet wie folgt (webform8.aspx):
<%@ Page language="c#" Codebehind="WebForm8.aspx.cs" AutoEventWireup="false" Inherits="WebApplication6.WebForm8" %>
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0 Transitional//EN" >
<HTML>
<KOPF>
<title>WebForm8</title>
<meta content="Microsoft Visual Studio .NET 7.1" name="GENERATOR">
<meta content="C#" name="CODE_LANGUAGE">
<meta content="JavaScript" name="vs_defaultClientScript">
<meta content=" http://schemas.microsoft.com/intellisense/ie5 " name="vs_targetSchema">
</HEAD>
<body MS_POSITIONING="GridLayout">
<form id="Form1" method="post" runat="server">
<asp:datalist id="datalist1" AlternatingItemStyle-BackColor="#f3f3f3" Breite="100%" CellSpacing="0"
CellPadding="0" Runat="server">
<ItemTemplate>
<table width="100%" border="0" cellpacing="0" cellpadding="0">
<tr>
<td width="30%"
align="center"><%#DataBinder.Eval(Container.DataItem,"filenames")%></td>
<td width="30%"
align="center"><%#DataBinder.Eval(Container.DataItem,"senduser")%></td>
<td width="30%"
align="center"><%#DataBinder.Eval(Container.DataItem,"id")%></td>
</tr>
</table>
</ItemTemplate>
</asp:datalist>
<div align="center">Gesamt<asp:label id="LPageCount" Runat="server" ForeColor="#ff0000"></asp:label>Seiten/Gesamt
<asp:label id="LRecordCount" Runat= „server“ ForeColor="#ff0000"></asp:label>Record
<asp:linkbutton id="Fistpage" Runat="server"
CommandName="0">Home</asp:linkbutton> <asp:linkbutton id="Prevpage" Runat="server" CommandName ="prev">
Vorherige Seite</asp:linkbutton> <asp:linkbutton id="Nextpage" Runat="server"
CommandName="next">Nächste Seite</asp:linkbutton >  ; <asp:linkbutton id="Lastpage" Runat="server"
CommandName="last">Letzte Seite</asp:linkbutton> Aktuelle Seite<asp: Label-ID ="LCurrentPage" Runat="server"
ForeColor="#ff0000"></asp:label>Seite Sprungseite<asp:TextBox ID="gotoPage" Runat="server" Breite ="30px "
MaxLength="5" AutoPostBack="True"></asp:TextBox></div>
</form>
</body>
</HTML>
Das Hintergrundcode-Snippet lautet wie folgt (webform8.aspx.cs)
Verwenden des Systems;
Verwenden von System.Collections;
mit System.ComponentModel;
Verwenden von System.Data;
Verwenden von System.Drawing;
mit System.Web;
using System.Web.SessionState;
mit System.Web.UI;
mit System.Web.UI.WebControls;
mit System.Web.UI.HtmlControls;
Verwenden von System.Data.SqlClient;
mit System.Configuration;
Namespace WebApplication6
{
/// <Zusammenfassung>
/// Zusammenfassende Beschreibung von WebForm8.
/// </summary>
öffentliche Klasse WebForm8: System.Web.UI.Page
{
protected System.Web.UI.WebControls.LinkButton Fistpage;
protected System.Web.UI.WebControls.LinkButton Prevpage;
protected System.Web.UI.WebControls.LinkButton Nextpage;
protected System.Web.UI.WebControls.LinkButton Lastpage;
protected System.Web.UI.WebControls.DataList datalist1;
protected System.Web.UI.WebControls.DropDownList mydroplist;
protected System.Web.UI.WebControls.Label LPageCount;
protected System.Web.UI.WebControls.Label LRecordCount;
protected System.Web.UI.WebControls.Label LCurrentPage;
protected System.Web.UI.WebControls.TextBox gotoPage;
const int PageSize=20; //Definieren Sie die auf jeder Seite angezeigten Datensätze
int PageCount,RecCount,CurrentPage,Pages,JumpPage;//Definieren Sie mehrere Variablen, um Paging-Parameter zu speichern
private void Page_Load(object sender, System.EventArgs e)
{
if(!IsPostBack)
{
RecCount = Calc();//Erhalten Sie die Gesamtzahl der Datensätze über die Funktion Calc()
PageCount = RecCount/PageSize + OverPage();//Berechne die Gesamtzahl der Seiten (plus die OverPage()-Funktion, um zu verhindern, dass Reste zu
unvollständigen Anzeigedaten führen)
ViewState["PageCounts"] = RecCount/PageSize -
ModPage();/ / Gesamte Seitenparameter in ViewState speichern (ohne die Funktion ModPage (), um zu verhindern, dass der Abfragebereich überläuft, wenn die SQL-Anweisung ausgeführt wird. Sie können den Paging-Algorithmus für gespeicherte Prozeduren verwenden, um diesen Satz zu verstehen.)
ViewState["PageIndex"] = 0;//Speichern Sie einen Seitenindexwert von 0 in ViewState
ViewState["JumpPages"] = PageCount;// Speichern Sie PageCount in ViewState und ermitteln Sie, ob die vom Benutzer eingegebene Nummer beim Springen den
Seitennummernbereich
überschreitet.
//Zeige den Status von LPageCount und LRecordCount an
LPageCount.Text = PageCount.ToString();
LRecordCount.Text = RecCount.ToString();
//Bestimmen Sie, ob das Seitensprung-Textfeld ungültig ist
if(RecCount <= 20)
gotoPage.Enabled = false;
TDataBind();//Rufen Sie die Datenbindungsfunktion TDataBind() auf, um Datenbindungsvorgänge durchzuführen
}
}
//Restseiten berechnen
public int OverPage()
{
int Seiten = 0;
if(RecCount%PageSize != 0)
Seiten = 1;
anders
Seiten = 0;
Rückkehrseiten;
}
// Berechnen Sie die verbleibenden Seiten, um zu verhindern, dass der Abfragebereich überläuft, wenn die SQL-Anweisung ausgeführt wird.
public int ModPage()
{
int Seiten = 0;
if(RecCount%PageSize == 0 && RecCount != 0)
Seiten = 1;
anders
Seiten = 0;
Rückkehrseiten;
}
/*
*Statische Funktion zur Berechnung der Gesamtzahl der Datensätze
*Der Grund, warum ich hier statische Funktionen verwende, ist: Wenn statische Daten oder statische Funktionen referenziert werden, optimiert der Konnektor den generierten Code und entfernt die dynamischen Verschiebungselemente (
der Paging-Effekt massiver Datentabellen ist offensichtlicher).
*Ich hoffe, dass Sie mir Ihre Meinung mitteilen und mich korrigieren, wenn es Fehler gibt.
*/
öffentliches statisches int Calc()
{
int RecordCount = 0;
SqlCommand MyCmd = new SqlCommand("select count(*) as co from redheadedfile",MyCon());
SqlDataReader dr = MyCmd.ExecuteReader();
if(dr.Read())
RecordCount = Int32.Parse(dr["co"].ToString());
MyCmd.Connection.Close();
return RecordCount;
}
//Datenbankverbindungsanweisung (erhalten von Web.Config)
öffentliche statische SqlConnection MyCon()
{
SqlConnection MyConnection = new SqlConnection(ConfigurationSettings.AppSettings["DSN"]);
MyConnection.Open();
return MyConnection;
}
// Bedienen Sie die von den vier Schaltflächen (Homepage, Vorherige Seite, Nächste Seite, Letzte Seite) zurückgegebenen CommandName-Werte.
private void Page_OnClick(object sender, CommandEventArgs e)
{
CurrentPage = (int)ViewState["PageIndex"];//Lesen Sie den Seitenzahlwert aus ViewState und speichern Sie ihn zur
Parameterberechnung
in der Variable CurrentPage
Pages = (int)ViewState["PageCounts"];//Lesen Sie die gesamte Seitenparameter-Operationszeichenfolge aus ViewState
cmd = e.CommandName;
switch(cmd)//Filter CommandName
{
Fall „nächster“:
CurrentPage++;
brechen;
Fall „prev“:
CurrentPage--;
brechen;
Fall „letzter“:
CurrentPage = Seiten;
brechen;
Standard:
Aktuelle Seite = 0;
brechen;
}
ViewState["PageIndex"] = CurrentPage;//Speichern Sie die berechnete CurrentPage-Variable erneut in ViewState
TDataBind();//Rufen Sie die Datenbindungsfunktion TDataBind() auf
}
private void TDataBind()
{
CurrentPage = (int)ViewState["PageIndex"];//Lesen Sie den Seitenzahlwert aus ViewState und speichern Sie ihn in der CurrentPage-Variablen für die
Schaltflächenungültigmachung
Pages = (int)ViewState["PageCounts"];//Lesen Sie die gesamten Seitenparameter aus ViewState, um Berechnungen zur Schaltflächenungültigmachung durchzuführen
//Bestimmen Sie den Status der vier Schaltflächen (Startseite, vorherige Seite, nächste Seite, letzte Seite)
if (CurrentPage + 1 > 1)
{
Fistpage.Enabled = true;
Prevpage.Enabled = true;
}
anders
{
Fistpage.Enabled = false;
Prevpage.Enabled = false;
}
if (CurrentPage == Seiten)
{
Nextpage.Enabled = false;
Lastpage.Enabled = false;
}
anders
{
Nextpage.Enabled = true;
Lastpage.Enabled = true;
}
//Datenbindung an das DataList-Steuerelement
DataSet ds = new DataSet();
//Kern-SQL-Anweisungen, Abfrageoperationen durchführen (bestimmt die Effizienz des Pagings:))
SqlDataAdapter MyAdapter = new SqlDataAdapter("Select Top "+PageSize+" * from redheadedfile where id
not in(select top "+PageSize*CurrentPage+" id from redheadedfile order by id asc) order by id asc",MyCon());
MyAdapter.Fill(ds,"news");
datalist1.DataSource = ds.Tables["news"].DefaultView;
datalist1.DataBind();
//Anzeige des Label-Steuerelements LCurrentPaget und des Textfeld-Steuerelements gotoPage-Status
LCurrentPage.Text = (CurrentPage+1).ToString();
gotoPage.Text = (CurrentPage+1).ToString();
//SqlDataAdapter freigeben
MyAdapter.Dispose();
}
#region Von Web Forms Designer generierter Code
override protected void OnInit(EventArgs e)
{
//
// CODEGEN: Dieser Aufruf wird vom ASP.NET Web Forms-Designer benötigt.
//
InitializeComponent();
base.OnInit(e);
}
/// <Zusammenfassung>
/// Designer unterstützt erforderliche Methoden – verwenden Sie zum Ändern keinen Code-Editor
/// Der Inhalt dieser Methode.
/// </summary>
private void InitializeComponent()
{
this.Fistpage.Command += new System.Web.UI.WebControls.CommandEventHandler(this.Page_OnClick);
this.Prevpage.Command += new System.Web.UI.WebControls.CommandEventHandler(this.Page_OnClick);
this.Nextpage.Command += new System.Web.UI.WebControls.CommandEventHandler(this.Page_OnClick);
this.Lastpage.Command += new System.Web.UI.WebControls.CommandEventHandler(this.Page_OnClick);
this.gotoPage.TextChanged += new System.EventHandler(this.gotoPage_TextChanged);
this.Load += new System.EventHandler(this.Page_Load);
}
#endregion
//Sprungseitencode
private void gotoPage_TextChanged(object sender, System.EventArgs e)
{
versuchen
{
JumpPage = (int)ViewState["JumpPages"];//Lesen Sie den verfügbaren Seitenwert aus ViewState und speichern Sie ihn in der JumpPage-Variablen
//Bestimmen Sie, ob der Benutzereingabewert den verfügbaren Seitenbereichswert überschreitet
if(Int32.Parse(gotoPage.Text) > JumpPage || Int32.Parse(gotoPage.Text) <= 0)
Response.Write("<script>alert('Seitenbereich außerhalb der Grenzen!');location.href='WebForm8.aspx'</script>");
anders
{
int InputPage = Int32.Parse(gotoPage.Text.ToString()) - 1;//Konvertieren Sie den Benutzereingabewert und speichern Sie ihn in der
InputPage-Variable
vom Typ int
ViewState["PageIndex"] = InputPage;//Den InputPage-Wert in ViewState["PageIndex"] schreiben
TDataBind();//Rufen Sie die Datenbindungsfunktion TDataBind() auf, um den Datenbindungsvorgang erneut auszuführen
}
}
// Ausnahmen abfangen, die durch Benutzer verursacht werden, die falsche Datentypen eingeben
Catch(Ausnahme exp)
{
Response.Write("<script>alert('"+exp.Message+"');location.href='WebForm8.aspx'</script>");
}
}
}
}
Versuchen wir es. Ist die Effizienz viel höher?
Wenn etwas nicht stimmt, korrigieren Sie mich bitte.