Primero cree una tabla (requiere numeración automática de ID):
crear tabla pelirroja archivo (
identificación int identidad (1,1),
nombres de archivos nvarchar(20),
enviar usuario nvarchar(20),
clave principal (identificación)
)
Luego escribimos 500.000 registros:
declarar @i int
establecer @i=1
mientras @i<=500000
comenzar
insertar en valores de archivo pelirrojo (nombres de archivo, usuario remitente) ('mi algoritmo de paginación', 'Lu Junming')
establecer @i=@i+1
fin
IR
Utilice Microsoft Visual Studio .NET 2003 para crear una página web WebForm (la llamé webform8.aspx)
El fragmento de código de interfaz de usuario es el siguiente (webform8.aspx):
<%@ Idioma de página="c#" Codebehind="WebForm8.aspx.cs" AutoEventWireup="false" Hereda="WebApplication6.WebForm8" %>
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0 Transicional//ES" >
<HTML>
<CABEZA>
<título>WebForm8</título>
<meta content="Microsoft Visual Studio .NET 7.1" nombre="GENERADOR">
<meta contenido="C#" nombre="CODE_LANGUAGE">
<meta contenido="JavaScript" nombre="vs_defaultClientScript">
<meta content=" http://schemas.microsoft.com/intellisense/ie5 " nombre="vs_targetSchema">
</CABEZA>
<cuerpo MS_POSITIONING="GridLayout">
<id de formulario="Form1" método="publicación" runat="servidor">
<asp:datalist id="datalist1" AlternatingItemStyle-BackColor="#f3f3f3" Ancho="100%" CellSpacing="0"
CellPadding="0" Runat="servidor">
<Plantilla de artículo>
<table width="100%" border="0" cellspace="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>
</tabla>
</ItemTemplate>
</asp:lista de datos>
<div align="center">Total<asp:label id="LPageCount" Runat="server" ForeColor="#ff0000"></asp:label>Páginas/Total
<asp:label id="LRecordCount" Runat= "servidor" ForeColor="#ff0000"></asp:label>Registro
<asp:linkbutton id="Fistpage" Runat="servidor"
CommandName="0">Inicio</asp:linkbutton> <asp:linkbutton id="Prevpage" Runat="servidor" CommandName ="prev">
Página anterior</asp:linkbutton> <asp:linkbutton id="Nextpage" Runat="servidor"
CommandName="next">Página siguiente</asp:linkbutton >  ; <asp:linkbutton id="Lastpage" Runat="server"
CommandName="last">Última página</asp:linkbutton> Página actual<asp: id de etiqueta ="LCurrentPage" Runat="servidor"
ForeColor="#ff0000"></asp:label>Página Saltar página<asp:TextBox ID="gotoPage" Runat="servidor" Ancho ="30px "
MaxLength="5" AutoPostBack="True"></asp:TextBox></div>
</formulario>
</cuerpo>
</HTML>
El fragmento de código de fondo es el siguiente (webform8.aspx.cs)
usando Sistema;
usando System.Collections;
usando System.ComponentModel;
usando System.Data;
usando System.Drawing;
usando System.Web;
usando System.Web.SessionState;
utilizando System.Web.UI;
usando System.Web.UI.WebControls;
usando System.Web.UI.HtmlControls;
usando System.Data.SqlClient;
utilizando System.Configuration
espacio de nombres WebApplication6;
{
/// <resumen>
/// Descripción resumida de WebForm8.
/// </summary>
clase pública WebForm8: System.Web.UI.Page
{
System.Web.UI.WebControls.LinkButton Fistpage protegido;
Página previa protegida System.Web.UI.WebControls.LinkButton;
System.Web.UI.WebControls.LinkButton protegido Página siguiente;
System.Web.UI.WebControls.LinkButton protegido Última página;
protegido System.Web.UI.WebControls.DataList lista de datos1;
protegido System.Web.UI.WebControls.DropDownList mydroplist;
System.Web.UI.WebControls.Label LPageCount protegido;
protegido System.Web.UI.WebControls.Label LRecordCount;
protegido System.Web.UI.WebControls.Label LCurrentPage;
protegido System.Web.UI.WebControls.TextBox gotoPage;
const int PageSize=20; //Definir los registros que se muestran en cada página
int PageCount,RecCount,CurrentPage,Pages,JumpPage;//Defina varias variables para guardar los parámetros de paginación
Page_Load vacío privado (remitente del objeto, System.EventArgs e)
{
si(!IsPostBack)
{
RecCount = Calc();//Obtener el número total de registros a través de la función Calc()
PageCount = RecCount/PageSize + OverPage();//Calcule el número total de páginas (más la función OverPage() para evitar que los restos causen
datos de visualización incompletos)
ViewState["PageCounts"] = RecCount/PageSize -
ModPage();/ /Guardar los parámetros totales de la página en ViewState (menos la función ModPage() para evitar que el rango de consulta se desborde cuando se ejecuta la instrucción SQL. Puede utilizar el algoritmo de paginación del procedimiento almacenado para comprender esta oración)
ViewState["PageIndex"] = 0;//Guardar un valor de índice de página de 0 en ViewState
ViewState["JumpPages"] = PageCount;// Guarde PageCount en ViewState y determine si el número ingresado por el usuario excede el rango
de números de página
al saltar.
//Muestra el estado de LPageCount y LRecordCount
LPageCount.Text = PageCount.ToString();
LRecordCount.Text = RecCount.ToString();
//Determinar si el cuadro de texto de salto de página no es válido
si (RecCount <= 20)
gotoPage.Enabled = falso;
TDataBind();// Llame a la función de enlace de datos TDataBind() para realizar operaciones de enlace de datos
}
}
//Calcular las páginas restantes
público int OverPage()
{
int páginas = 0;
si (RecCount% Tamaño de página! = 0)
páginas = 1;
demás
páginas = 0;
páginas de retorno;
}
//Calcula las páginas restantes para evitar que el rango de consulta se desborde cuando se ejecuta la instrucción SQL.
público int ModPage()
{
int páginas = 0;
si(RecCount%PageSize == 0 && RecCount!= 0)
páginas = 1;
demás
páginas = 0;
páginas de retorno;
}
/*
*Función estática para calcular el total de registros.
* La razón por la que uso funciones estáticas aquí es: si se hace referencia a datos estáticos o funciones estáticas, el conector optimizará el código generado y eliminará los elementos de reubicación dinámica (
el efecto de paginación de las tablas de datos masivas es más obvio).
*Espero que me den sus opiniones y me corrijan si hay algún error.
*/
int estático público Calc()
{
intRecordCount = 0;
SqlCommand MyCmd = new SqlCommand("seleccione count(*) como co de redheadedfile",MyCon());
SqlDataReader dr = MyCmd.ExecuteReader();
si(dr.Read())
RecordCount = Int32.Parse(dr["co"].ToString());
MyCmd.Connection.Close();
devolver RecordCount;
}
//Declaración de conexión de base de datos (obtenida de Web.Config)
SqlConnection público estático MyCon()
{
SqlConnection MyConnection = nueva SqlConnection(ConfigurationSettings.AppSettings["DSN"]);
MiConexión.Open();
devolver MiConexión;
}
//Opera los valores de CommandName devueltos por los cuatro botones (Página de inicio, Página anterior, Página siguiente, Última página)
Page_OnClick vacío privado (remitente del objeto, CommandEventArgs e)
{
CurrentPage = (int)ViewState["PageIndex"];//Lea el valor del número de página de ViewState y guárdelo en la variable CurrentPage para
el cálculo
de parámetros
Pages = (int)ViewState["PageCounts"];//Lea la cadena de operación del parámetro total de la página desde ViewState
cmd = e.CommandName;
switch(cmd) // Filtrar nombre de comando
{
caso "siguiente":
Página actual++;
romper;
caso "anterior":
Página actual--;
romper;
caso "último":
PáginaActual = Páginas;
romper;
por defecto:
Página actual = 0;
romper;
}
ViewState["PageIndex"] = CurrentPage;//Guarde la variable CurrentPage calculada en ViewState nuevamente
TDataBind();//Llamar a la función de enlace de datos TDataBind()
}
vacío privado TDataBind()
{
CurrentPage = (int)ViewState["PageIndex"];//Lea el valor del número de página de ViewState y guárdelo en la variable CurrentPage para la operación
de invalidación
del botón
Pages = (int)ViewState["PageCounts"];//Lea los parámetros totales de la página desde ViewState para realizar cálculos de invalidación de botones
//Determina el estado de los cuatro botones (página de inicio, página anterior, página siguiente, última página)
si (Página actual + 1 > 1)
{
Fistpage.Enabled = verdadero;
Página previa.Enabled = verdadero;
}
demás
{
Fistpage.Enabled = falso;
Página previa.Enabled = falso;
}
si (Página actual == Páginas)
{
Página siguiente.Enabled = falso;
Última página.Enabled = falso;
}
demás
{
Página siguiente.Enabled = verdadero;
Última página.Enabled = verdadero;
}
//Enlace de datos al control DataList
Conjunto de datos ds = nuevo Conjunto de datos();
// Declaraciones SQL principales, realiza operaciones de consulta (determina la eficiencia de la paginación :))
SqlDataAdapter MyAdapter = new SqlDataAdapter("Seleccione la parte superior "+PageSize+" * del archivo de pelirrojos donde
no está la identificación (seleccione la identificación superior "+PageSize*CurrentPage+" del archivo de pelirrojos ordene por id asc) ordene por id asc",MyCon());
MyAdapter.Fill(ds,"noticias");
datalist1.DataSource = ds.Tables["noticias"].DefaultView;
lista de datos1.DataBind();
//Mostrar control de etiqueta LCurrentPaget y control de cuadro de texto estado de gotoPage
LCurrentPage.Text = (CurrentPage+1).ToString();
gotoPage.Text = (CurrentPage+1).ToString();
//Liberar SqlDataAdapter
MiAdapter.Dispose();
}
#región Código generado por Web Forms Designer
anular el vacío protegido OnInit (EventArgs e)
{
//
// CODEGEN: esta llamada la requiere el diseñador de formularios web ASP.NET.
//
InicializarComponente();
base.OnInit(e);
}
/// <resumen>
/// Designer admite los métodos requeridos; no use el editor de código para modificar
/// El contenido de este método.
/// </summary>
vacío privado InicializarComponente()
{
this.Fistpage.Command += new System.Web.UI.WebControls.CommandEventHandler(this.Page_OnClick);
this.Prevpage.Command += nuevo 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 += nuevo System.EventHandler(this.gotoPage_TextChanged);
this.Load += nuevo System.EventHandler(this.Page_Load)
;
#regiónfinal
//Código de página de salto
vacío privado gotoPage_TextChanged (remitente del objeto, System.EventArgs e)
{
intentar
{
JumpPage = (int)ViewState["JumpPages"];//Lea el valor de página disponible de ViewState y guárdelo en la variable JumpPage
//Determinar si el valor ingresado por el usuario excede el valor del rango de páginas disponible
if(Int32.Parse(gotoPage.Text) > JumpPage || Int32.Parse(gotoPage.Text) <= 0)
Response.Write("<script>alert('¡Rango de páginas fuera de límites!');location.href='WebForm8.aspx'</script>");
demás
{
int InputPage = Int32.Parse(gotoPage.Text.ToString()) - 1;//Convierte el valor de entrada del usuario y guárdalo en la
variable InputPage
de tipo int
ViewState["PageIndex"] = InputPage;//Escribe el valor de InputPage en ViewState["PageIndex"]
TDataBind();// Llame a la función de enlace de datos TDataBind() para realizar la operación de enlace de datos nuevamente
}
}
//Detectar excepciones causadas por usuarios que ingresan tipos de datos incorrectos
captura (Excepción exp)
{
Response.Write("<script>alert('"+exp.Message+"');location.href='WebForm8.aspx'</script>");
}
}
}
}
Probémoslo. ¿La eficiencia es mucho mayor?
Si hay algún problema, corríjame.