Créez d’abord un tableau (nécessite une numérotation automatique des identifiants) :
créer une table fichier rousse (
id int identité (1,1),
noms de fichiers nvarchar(20),
envoyer l'utilisateur nvarchar (20),
clé primaire (identifiant)
)
Ensuite, nous écrivons 500 000 enregistrements :
déclarer @i int
définir @i=1
tandis que @i<=500000
commencer
insérer dans les valeurs du fichier redheaded (noms de fichiers, utilisateur de l'expéditeur) ('mon algorithme de pagination', 'Lu Junming')
définir @i=@i+1
fin
ALLER
Utilisez Microsoft Visual Studio .NET 2003 pour créer une page Web WebForm (je l'ai nommée webform8.aspx)
L'extrait de code frontal est le suivant (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>
<TÊTE>
<titre>WebForm8</titre>
<meta content="Microsoft Visual Studio .NET 7.1" name="GÉNÉRATEUR">
<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" width="100%" CellSpacing="0"
CellPadding="0" Runat="serveur">
<Modèle d'élément>
<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">Total<asp:label id="LPageCount" Runat="server" ForeColor="#ff0000"></asp:label>Pages/Total
<asp:label id="LRecordCount" Runat= "server" ForeColor="#ff0000"></asp:label>Enregistrer
<asp:linkbutton id="Fistpage" Runat="server"
CommandName="0">Accueil</asp:linkbutton> <asp:linkbutton id="Prevpage" Runat="server" CommandName ="prev">
Page précédente</asp:linkbutton> <asp:linkbutton id="Nextpage" Runat="server"
CommandName="next">Page suivante</asp:linkbutton >  ; <asp:linkbutton id="Lastpage" Runat="server"
CommandName="last">Dernière page</asp:linkbutton> Page actuelle<asp: label id ="LCurrentPage" Runat="server"
ForeColor="#ff0000"></asp:label>Page Page de saut<asp:TextBox ID="gotoPage" Runat="server" Largeur ="30px "
MaxLength="5" AutoPostBack="True"></asp:TextBox></div>
</form>
</corps>
</HTML>
L'extrait de code d'arrière-plan est le suivant (webform8.aspx.cs)
utiliser le système ;
en utilisant System.Collections ;
en utilisant System.ComponentModel ;
en utilisant System.Data ;
en utilisant System.Drawing ;
en utilisant System.Web ;
en utilisant System.Web.SessionState ;
en utilisant System.Web.UI ;
en utilisant System.Web.UI.WebControls ;
en utilisant System.Web.UI.HtmlControls ;
en utilisant System.Data.SqlClient ;
en utilisant l'espace de noms System.Configuration
WebApplication6
;
{
/// <résumé>
/// Description récapitulative de WebForm8.
/// </summary>
classe publique WebForm8 : System.Web.UI.Page
{
System.Web.UI.WebControls.LinkButton Fistpage protégé ;
protégé System.Web.UI.WebControls.LinkButton Page précédente ;
protégé System.Web.UI.WebControls.LinkButton Page suivante ;
protégé System.Web.UI.WebControls.LinkButton Dernière page ;
protégé System.Web.UI.WebControls.DataList datalist1 ;
protégé System.Web.UI.WebControls.DropDownList ma liste déroulante ;
protégé System.Web.UI.WebControls.Label LPageCount ;
protégé System.Web.UI.WebControls.Label LRecordCount ;
protégé System.Web.UI.WebControls.Label LCurrentPage ;
protégé System.Web.UI.WebControls.TextBox gotoPage ;
const int PageSize=20; //Définit les enregistrements affichés sur chaque page
int PageCount,RecCount,CurrentPage,Pages,JumpPage;//Définir plusieurs variables pour enregistrer les paramètres de pagination
private void Page_Load (expéditeur de l'objet, System.EventArgs e)
{
si(!IsPostBack)
{
RecCount = Calc();//Obtenir le nombre total d'enregistrements via la fonction Calc()
PageCount = RecCount/PageSize + OverPage();//Calculez le nombre total de pages (plus la fonction OverPage() pour éviter que les restes ne provoquent
des données d'affichage incomplètes)
ViewState["PageCounts"] = RecCount/PageSize -
ModPage();/ /Enregistrer le total des paramètres de page dans ViewState (moins la fonction ModPage() pour éviter que la plage de requête ne déborde lors de l'exécution de l'instruction SQL. Vous pouvez utiliser l'algorithme de pagination de procédure stockée pour comprendre cette phrase)
ViewState["PageIndex"] = 0;//Enregistre une valeur d'index de page de 0 dans ViewState
ViewState["JumpPages"] = PageCount;//Enregistrez PageCount dans ViewState et déterminez si le numéro saisi par l'utilisateur dépasse la plage
de numéros de page
lors du saut.
//Afficher l'état de LPageCount et LRecordCount
LPageCount.Text = PageCount.ToString();
LRecordCount.Text = RecCount.ToString();
// Détermine si la zone de texte de saut de page n'est pas valide
si (RecCount <= 20)
gotoPage.Enabled = false;
TDataBind();//Appelez la fonction de liaison de données TDataBind() pour effectuer des opérations de liaison de données
}
}
//Calculer les pages restantes
public int SurPage()
{
pages entières = 0 ;
si(RecCount%PageSize != 0)
page = 1 ;
autre
page = 0 ;
pages de retour ;
}
//Calculez les pages restantes pour éviter que la plage de requête ne déborde lors de l'exécution de l'instruction SQL.
public int ModPage()
{
pages entières = 0 ;
si (RecCount%PageSize == 0 && RecCount != 0)
page = 1 ;
autre
page = 0 ;
pages de retour ;
}
/*
*Fonction statique pour calculer le total des enregistrements
*La raison pour laquelle j'utilise des fonctions statiques ici est la suivante : si des données statiques ou des fonctions statiques sont référencées, le connecteur optimisera le code généré et supprimera les éléments de relocalisation dynamique (
l'effet de pagination des tables de données massives est plus évident).
*J'espère que vous me donnerez votre avis et me corrigerez s'il y a des erreurs.
*/
public statique int Calc()
{
int CompteEnregistrement = 0 ;
SqlCommand MyCmd = new SqlCommand("select count(*) as co from redheadedfile",MyCon());
SqlDataReader dr = MyCmd.ExecuteReader();
si(dr.Read())
RecordCount = Int32.Parse(dr["co"].ToString());
MyCmd.Connection.Close();
retourner RecordCount ;
}
//Instruction de connexion à la base de données (obtenue à partir de Web.Config)
public statique SqlConnection MyCon()
{
SqlConnection MyConnection = new SqlConnection(ConfigurationSettings.AppSettings["DSN"]);
MaConnexion.Open();
renvoyer MaConnexion ;
}
//Exploiter les valeurs CommandName renvoyées par les quatre boutons (Page d'accueil, Page précédente, Page suivante, Dernière page)
private void Page_OnClick (expéditeur de l'objet, CommandEventArgs e)
{
CurrentPage = (int)ViewState["PageIndex"];//Lire la valeur du numéro de page à partir de ViewState et l'enregistrer dans la variable CurrentPage pour
le calcul
des paramètres
Pages = (int)ViewState["PageCounts"];//Lire la chaîne totale d'opération du paramètre de page à partir de ViewState
cmd = e.CommandName;
switch(cmd)//Filter CommandName
{
cas "suivant":
PageActuelle++;
casser;
cas "précédent":
PageActuelle--;
casser;
cas "dernier":
PageActuelle = Pages ;
casser;
défaut:
PageActuelle = 0 ;
casser;
}
ViewState["PageIndex"] = CurrentPage;//Enregistrez à nouveau la variable CurrentPage calculée dans ViewState
TDataBind();//Appelle la fonction de liaison de données TDataBind()
}
vide privé TDataBind()
{
CurrentPage = (int)ViewState["PageIndex"];//Lire la valeur du numéro de page à partir de ViewState et l'enregistrer dans la variable CurrentPage pour l'opération
d'invalidation
du bouton
Pages = (int)ViewState["PageCounts"];//Lire le total des paramètres de page depuis ViewState pour effectuer des calculs d'invalidation de bouton
//Détermine l'état des quatre boutons (page d'accueil, page précédente, page suivante, dernière page)
si (PageActuelle + 1 > 1)
{
Fistpage.Enabled = true ;
Page précédente.Enabled = true ;
}
autre
{
Fistpage.Enabled = faux ;
Page précédente.Enabled = false ;
}
si (PageActuelle == Pages)
{
Page suivante.Enabled = false ;
Lastpage.Enabled = faux ;
}
autre
{
Page suivante.Enabled = true ;
Lastpage.Enabled = true ;
}
// Liaison de données au contrôle DataList
DataSetds = new DataSet();
//Instructions SQL de base, effectuent des opérations de requête (détermine l'efficacité de la pagination :))
SqlDataAdapter MyAdapter = new SqlDataAdapter("Sélectionnez le haut "+PageSize+" * du fichier rousse où l'identifiant
n'est pas présent (sélectionnez l'identifiant "+PageSize*CurrentPage+" en haut du fichier rousse par id asc) par id asc",MyCon());
MonAdaptateur.Fill(ds,"actualités");
datalist1.DataSource = ds.Tables["news"].DefaultView;
datalist1.DataBind();
//Afficher le contrôle d'étiquette LCurrentPaget et le contrôle de zone de texte gotoPage status
LCurrentPage.Text = (CurrentPage+1).ToString();
gotoPage.Text = (CurrentPage+1).ToString();
//Publier SqlDataAdapter
MonAdaptateur.Dispose();
}
#region Code généré par Web Forms Designer
remplacer le void protégé OnInit (EventArgs e)
{
//
// CODEGEN : cet appel est requis par le concepteur ASP.NET Web Forms.
//
InitializeComponent();
base.OnInit(e);
}
/// <résumé>
/// Designer prend en charge les méthodes requises - n'utilisez pas l'éditeur de code pour modifier
/// Le contenu de cette méthode.
/// </summary>
vide privé 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
//Code de page de saut
private void gotoPage_TextChanged (expéditeur de l'objet, System.EventArgs e)
{
essayer
{
JumpPage = (int)ViewState["JumpPages"];//Lire la valeur de page disponible à partir de ViewState et l'enregistrer dans la variable JumpPage
// Détermine si la valeur saisie par l'utilisateur dépasse la valeur de plage de pages disponible
if(Int32.Parse(gotoPage.Text) > JumpPage || Int32.Parse(gotoPage.Text) <= 0)
Response.Write("<script>alert('Plage de pages hors limites !');location.href='WebForm8.aspx'</script>");
autre
{
int InputPage = Int32.Parse(gotoPage.Text.ToString()) - 1;//Convertissez la valeur d'entrée utilisateur et enregistrez-la dans la
variable InputPage
de type int
ViewState["PageIndex"] = InputPage;//Écrire la valeur InputPage dans ViewState["PageIndex"]
TDataBind();//Appelez la fonction de liaison de données TDataBind() pour effectuer à nouveau l'opération de liaison de données
}
}
// Détecter les exceptions causées par les utilisateurs saisissant des types de données incorrects
capture (exception exp)
{
Response.Write("<script>alert('"+exp.Message+"');location.href='WebForm8.aspx'</script>");
}
}
}
}
Essayons. L'efficacité est-elle beaucoup plus élevée ?
S'il y a quelque chose qui ne va pas, corrigez-moi.