// Este código fuente es solo para aprendizaje de referencia, no para fines comerciales;
// Si necesita modificar y volver a compilar el control, ¡retenga la información de derechos de autor del código fuente completo!
// Para obtener información sobre la actualización de control y la nueva información de lanzamiento de control, preste atención a www.webdiyer.com.
usando el sistema;
usando System.io;
usando System.web;
usando System.web.ui;
usando System.Web.UI.WebControls;
usando System.Web.UI.HTMLControls;
Usando System.Collections.pecialized;
usando System.Text;
usando System.ComponentModel;
Usando System.ComponentMol.Design;
usando System.Collections;
espacio de nombres wuqi.webdiyer
{{
#REGION ASPNETPAGER SERVER CONTROL
#Descripción y ejemplo de control de región
/// <summary>
/// Para controles de servidor para datos de paginación de datos en la aplicación web ASP.NET.
/// </summary>
/// <nelubsions> A diferencia del control DataGrid, el control de la paginación AspnetPager no muestra ningún dato, sino que solo muestra el elemento de navegación de la página. Este control puede superar el datagrid, el datalista, el repetidor y los controles personalizados. ¡grande!
/// <p> Aspnetpager 2.0 recientemente agregó la función de la paginación a través de la URL, que permite a los visitantes ingresar directamente a la URL correspondiente para acceder a cualquier página, y el motor de búsqueda también puede recuperar directamente cada página, esto no se puede realizar. </p>
/// <p> Para usar el control de paginación AspnetPager, al menos debe especificar su atributo <ver Cref = "RecordCount"/>, especifique y escriba el programa de procesamiento del evento <See cref = "PageChanged"/>.
/// <ver cref = "RecordCount"/> El atributo especifica el número total de todos los datos que se pagan en la paginación.
/// Si el programa de procesamiento de eventos <Ver cref = "PageChanged"/> no se especifica y escribe, entonces cuando el usuario hace clic en el elemento de navegación de la página o el índice de página de entrada al estilo de la mano en el cuadro de texto del índice de página y envíe la página .
/// El método de paginación del control AspnetPager es básicamente el mismo que el de DataGrid, es decir, en su programa <ver cref = "PageChanged"/> de procesamiento de eventos, el <See cref = "pagechangedeventargs" de <ver cref = cref = "PageChangedeventargs.newpageIndex"/> El valor se asigna a <ver cref = "currentPageIndex"/> atributo de <See cref = "currentPageIndex"/>, y luego reorgan los nuevos controles de datos de datos y datos. </p> </semartics>
/// <junto> Los siguientes ejemplos muestran cómo usar AspnetPager para hacer la página del DataGrid.
/// <code> <!
/// <%@ page idioma = "c#"%>
/// <%@ importación de nombres = "System.Data"%>
/// <%@importación de nombres = "system.data.sqlclient"%>
/// <%@importación de nombres = "System.Configuration"%>
/// <%@registro tagprefix = "webdiyer" namespace = "wuqi.webdiyer" ensamblaje = "aspnetpager"%>
/// <html>
/// <fead>
/// <title> Bienvenido a Webdiyer.com </title>
/// <script runat = "servidor">
/// SQLConnection Conn;
/// sqlCommand cmd;
/// void page_load (objeto src, eventArgs e)
/// {
// conn = nueva SQLConnection (ConfigurationSettings.AppSettings ["Connstr"];
/// if (! Page.ispostback)
/// {
/// cmd = new SqlCommand ("GetNews", Conn);
/// cmd.commandtype = comandype.storedprocedure;
/// cmd.parameters.add ("@PosgeIndex", 1);
/// cmd.parameters.add ("@pagesize", 1);
/// cmd.parameters.add ("@docount", true);
// conn.open ();
/// Pager.RecordCount = (int) cmd.executescalal ();
// conn.close ();
/// bindData ();
///}
///}
//
/// void bindData ()
/// {
/// cmd = new SqlCommand ("GetNews", Conn);
/// cmd.commandtype = comandype.storedprocedure;
/// cmd.parameters.add ("@PosgeIndex", Pager.CurrentPageIndex);
/// cmd.parameters.add ("@Pagesize", Pager.pagesize);
/// cmd.parameters.add ("@docount", falso);
// conn.open ();
/// dataGrid1.dataSource = cmd.executereader ();
/// dataGrid1.databind ();
// conn.close ();
/// Pager.CustominfotExt = "Record Total: <font color =" azul "> <b>"+Pager.RecordCount.ToString ()+"</font>" ";
/// Pager.CustominFotExt+= "Número de página total: <font color =" azul "> <b>"+perger.pageCount.ToString ()+"</font>" ";
/// Pager.CustominfotExt+= "Página actual: <font color =" rojo "> <b>"+Pager.currentPageIndex.ToString ()+"</b> </font>"
///}
/// Void ChangePage (Object src, pagechangedeventargs e)
/// {
/// Pager.CurrentPageIndex = E.NewPageIndex;
/// bindData ();
///}
/// </script>
/// <meta http-equiv = "content-language" content = "zh-cn">
/// <meta http-equiv = "content-type" content = "text/html; charset = gb2312">
/// <meta name = "general" content = "editplus">
/// <meta name = "autor" content = "webdiyer ([correo electrónico protegido])"> ">">
/// </head>
/// <body>
/// <form runat = "server" id = "form1">
/// <asp: dataGrid id = "dataGrid1" runat = "servidor"/>
/// <webdiyer: aspnetpager id = "buscapersonas"
/// runat = "servidor"
/// pageSize = "8"
/// numericButtonCount = "8"
/// showcustominfosection = "izquierda"
/// PagingButtonSpacing = "0"
/// showinputbox = "siempre"
/// cssclass = "mypager"
/// horizontalalally = "correcto"
/// onpageChanged = "ChangePage"
/// SubmitButTontext = "Realizar a"
/// numericButTontextFormatString = "[{0}]"/>
/// </form>
/// </body>
/// </html>
///]]>
/// </code>
/// <p> El procedimiento de almacenamiento del servidor SQL utilizado en este ejemplo: </p>
/// <código>
/// <!
/// Crear procedimiento getNews
/// (@pagesize int,
/// @PageIndex int,
@DoCount bit)
/// como
/// establecer nocount en
/// if (@doCount = 1)
/// Seleccionar recuento (id) de noticias
/// demás
/// comenzar
/// declarar @Indextable TAB
/// declarar @pagelowerbound int
/// declarar @PageUpperBound int
/// set @PagelowerBound = (@PageIndex-)*@Pagesize
/// set @[correo electrónico protegido] [correo electrónico protegido]
/// Establecer RowCount @PageUpperBound
/// Insertar en @Indextable (NID) Seleccione ID del pedido de noticias por Addtime Desc
/// Seleccione O.ID, O.Source, O.Title, O.Addtime de noticias
/// y T.ID> @PageElowerBound y T.ID <= @PageUpperBound Order by T.ID
/// fin
/// Establecer nocount
/// IR
///]]>
/// </code> </sample>
#Endregion
[DefaultProperty ("PageSize")]
[DefaultEvent ("PageChanged")]
[Parsechildrn (falso)]
[Persistchildren (falso)]
[Descripción ("" Control de paginación para aplicaciones web ASP.NET ")]]]]]]]]]
[Designer (typeof (PagerDesigner)]]
[ToolboxData (<{0}: aspnetpager runat = server> </{0}: aspnetpager> ")]
Clase pública Aspnetpager: panel, inamingcontainer, ipostbackeventhandler, ipostbackdatahandler
{{
Cadena privada CSSClassName;
String private urlPageIndexName = "Página";
Privado bool urlpaging = false;
String private InputPageIndex;
Cadena privada CurrentUrl = null;
NamevalueCollection UrlParams = NULL;
/// Obtener o establecer un valor.
/// </summary>
[Navegable (verdadero),
Categoría ("Botón de navegación"), DefaultValue (verdadero), Descripción ("Especifica cuándo el mouse permanece en el botón de navegación, es el indicador de la herramienta de visualización"]]]]])]
Public Bool ShowsavigationTooltip
{{
conseguir
{{
object obj = ViewState ["ShowsavigationTooltip"];
Return (obj == nulo)?
}
colocar
{{
ViewState ["ShowsavigationTooltip"] = valor;
}
} /// <summary>
/// Obtener o establecer la herramienta del botón de navegación para solicitar el formato de texto.
/// </summary>
[Navegable (verdadero),
Categoría ("botón de navegación"),
DefaultValue ("Gire a la página No. {0}"),
Descripción ("Formato de texto de recordatorio de herramientas de botón de navegación de la página")]
Cadena pública
{{
conseguir
{{
object obj = ViewState ["NavigationToolTipTextFormatString"];
Return (obj == null)?
}
colocar
{{
String tip = value;
if.trim ().
tip = "{0}";
Viewstate
}
} /// <summary>
/// Obtener o establecer un valor.
/// </summary>
/// <lmarks>
/// Al configurar este valor en verdadero y no usar el botón de imagen, el valor del botón de índice de página 1, 2, 3, etc. será reemplazado por caracteres chinos primero, dos y tres.
/// </observación>
[Navegable (verdadero),
Categoría ("botón de navegación"),
DefaultValue (falso),
Descripción ("Si el botón del valor del índice de página se reemplaza por números chinos primero, segundo y tercero,"]]]
Público bool chinesepageindex
{{
conseguir
{{
object obj = ViewState ["ChineSepageIndex"];
Return (obj == nulo)?
}
colocar
{{
ViewState ["ChineSepageIndex"] = valor;
}
} /// <summary>
/// Obtener o establecer el formato de visualización del texto en el botón Número de navegación.
/// </summary>
/// <valor>
/// cadena, especifique el formato de visualización del texto en el valor del índice de la página de la página, el valor predeterminado es <ver cref = "string.empty"/>, es decir, la propiedad no está configurada. </valor>
/// <lmarks>
/// Use las propiedades numericButTontextFormatString para especificar el formato de visualización del botón de valor indexado.
/// Si el valor se establece en "[{0}]", el texto del índice se mostrará como: [1] [2] [3] ..., establece el valor en "-{0}-", y luego convierta el texto del índice en: -1--2- -3- ...
/// </observación>
[Navegable (verdadero),
DefaultValue ("") ,,
Categoría ("botón de navegación"),
Descripción ("Formato de visualización del texto en el botón numérico del índice de página")]
Cadena pública numericButTontextFormatString
{{
conseguir
{{
objeco obj = ViewState
Return (obj == null)?
}
colocar
{{
ViewState ["numericButTontextExtformatring"] = valor;
}
} /// <summary>
/// Obtener o establecer el tipo de botón de navegación de paginación, incluso si el texto sigue siendo una imagen.
/// </summary>
/// <lmarks>
/// Para usar el botón de imagen, debe preparar las siguientes imágenes: diez valores de 0 a 9 (cuando ShowPageIndex está configurado en verdadero), la primera página, la página anterior, la página siguiente, la última página y más Más y más imágenes de cinco botones (...) (cuando ShowFirstlast y ShowPrevnext están configurados en verdadero),
/// Si se necesita el botón numérico del índice de página actual para ser diferente de otros botones numéricos del índice de página, debe preparar la imagen del botón del índice de página actual;
/// Si la imagen de la primera página deshabilitada, la última página, la página siguiente y la última página es diferente de la imagen del botón normal, debe preparar las imágenes de estos cuatro botones en el estado deshabilitado;
/// <p> <b> Las reglas de nombres del archivo de imagen son las siguientes: </b> </p>
/// <p> De 0 a 9 Diez botones numéricos, la imagen debe llamarse "Value+ButtonImagenameExtExExenses+ButtonImageExtentation".
/// ButtonImageExtenting es el nombre de sufijo del archivo de imagen, como .gif o .jpg, etc., cualquier tipo de archivo de imagen que se pueda mostrar en el navegador. Por ejemplo, el archivo de imagen del índice de página "1" se puede nombrar "1.gif" o "1.jpg",
/// Cuando tiene dos o más conjuntos de archivos de imágenes, puede distinguir diferentes conjuntos de diferentes conjuntos de imágenes especificando el valor del atributo ButtonImagenameExtent. "1.gif"., "2. GIF", etc., y el segundo conjunto de imágenes se establece para "F", el nombre del archivo de imagen es similar a "1f.gif", "2f.gif" y pronto. </p>
// <p> El nombre del archivo de imagen del botón de primera página comienza con "Primero". Si ButtonImagenameExketnsion usa ButtonImagenameExtension depende de la configuración del botón numérico y si hay más imágenes. </p>
/// </observación>
/// <cectual>
/// El siguiente ejemplo de fragmento de código si usa el botón de imagen:
/// <p>
/// <code> <!
/// <webdiyer: aspnetpager runat = "servidor"
/// id = "Pager1"
/// onpageChanged = "ChangePage"
/// PagingButtonType = "Imagen"
/// ImagePath = "Imágenes"
/// ButtonImagenameExtent = "N"
/// DisabledButtonImagenameExtension = "G"
/// ButtonImageExtent = "GIF"
/// cpibuttonimagenameExension = "r"
/// PagingButtonSpacing = 5/>
///]]>
/// </code>
/// </p>
/// </scuestor>
[Navegable (verdadero),
DefaultValue (PagingButtonType.text),
Categoría ("botón de navegación"),
Descripción
Paging Paging Buttontype PagingButtisepe
{{
conseguir
{{
objeco obj = ViewState
Return (obj == null)?
}
colocar
{{
Viewstate
}
} /// <summary>
/// Obtener o establecer el tipo del botón Numérico de navegación, que es válido solo cuando Paging ButtonType está configurado en la imagen.
/// </summary>
/// <lmarks>
/// Cuando establece la imagen Paging ButtonType, cuando no desea que el botón Numérico del índice de página use la imagen, puede establecer el valor en texto, que hará que el botón de datos del índice de página use el texto en lugar del botón de imagen .
/// </observación>
[Navegable (verdadero),
DefaultValue (PagingButtonType.text),
Categoría ("botón de navegación"),
Descripción ("Tipo de" Botón Numérico Numeral de Navegación de la página ")]]
Paging Paging Buttontype NumericButtonType
{{
conseguir
{{
objeco obj = ViewState
Return (obj == nulo)?
}
colocar
{{
ViewState ["numericButtonType"] = valor;
}
} /// <summary>
/// Obtener o establecer el tipo de la primera página, la última página, la siguiente página y la última página.
/// </summary>
/// <lmarks>
/// Cuando establece el Paging ButtonType en imagen, pero no quiere usar la imagen para la primera página, siguiente, página siguiente y última página, puede establecer el valor en texto, lo que hará los cuatro botones anteriores en el anterior. Cuatro botones usan texto en lugar del botón de imagen.
/// </observación>
[Navegable (verdadero),
Categoría ("botón de navegación"),
DefaultValue (PagingButtonType.text),
Descripción
Paging Paging Buttontype
{{
conseguir
{{
object obj = ViewState ["NavigationButtonType"];
Return (obj == nulo)?
}
colocar
{{
ViewState ["NavigationButtonType"] = valor;
}
} /// <summary>
/// Obtener o establecer el tipo de botón "Más páginas" (...), que solo es válido cuando Paging ButtonType está configurado en imagen.
/// </summary>
/// <lmarks>
/// Cuando configura el botón PagingButtonType en imagen pero no quiere más páginas (...) para usar imágenes, puede configurar este valor en texto, lo que hará que más botones de página usen texto en lugar del botón de imagen.
/// </observación>
[Navegable (verdadero),
Categoría ("botón de navegación"),
DefaultValue (PagingButtonType.text),
Descripción ("más páginas" (...) Tipo de botón ")]
Paging Paging Buttontype MoreButtonpe
{{
conseguir
{{
object obj = ViewState ["MoreButtisepe"];
Return (obj == nulo)?
}
colocar
{{
ViewState ["MoreButtisepe"] = valor;
}
} /// <summary>
/// Obtener o establecer la distancia entre el botón de navegación de la paginación.
/// </summary>
[Navegable (verdadero),
Categoría ("botón de navegación"),
DefaultValue (typeof (unidad), "5px"),
Descripción
Unidad pública Paging Buttonspacing
{{
conseguir
{{
object obj = ViewState ["PagingButtonSpacing"];
Return (obj == null)?
}
colocar
{{
ViewState ["PagingButtonSpacing"] = valor;
}
} /// <summary>
/// Obtener o establecer un valor, que indica si los botones de primera página se muestran en el elemento de navegación de la página.
/// </summary>
[Navegable (verdadero),
Descripción
Categoría ("botón de navegación"),
DefaultValue (verdadero)]
Public Bool Showfirstlast
{{
conseguir
{{
object obj = ViewState ["showFirstlast"];
Return (obj == nulo)?
}
establecer {ViewState ["showfirtlast"] = valor;}
} /// <summary>
/// Obteniendo o configurando un valor, este valor indica si la página anterior y la página siguiente se muestran en el elemento de navegación de la página.
/// </summary>
[Navegable (verdadero),
Descripción
Categoría ("botón de navegación"),
DefaultValue (verdadero)]
Public Bool ShowPrevnext
{{
conseguir
{{
object obj = ViewState ["showPrevnext"];
Return (obj == nulo)?
}
establecer {ViewState ["ShowPrevnext"] = valor;}
} /// <summary>
/// Obtener o establecer un valor que indique si el botón de valor del índice de página se muestra en el elemento de navegación de la página.
/// </summary>
[Navegable (verdadero),
Descripción ("Si el botón de valor se muestra en el elemento de navegación de la página"),
Categoría ("botón de navegación"),
DefaultValue (verdadero)]
Public Bool ShowPageIndex
{{
conseguir
{{
object obj = ViewState ["ShowPageIndex"];
Return (obj == nulo)?
}
establecer {ViewState ["ShowPageIndex"] = valor;}
} /// <summary>
/// Obtener o configurar en el texto que se muestra por el botón de la primera página.
/// </summary>
[Navegable (verdadero),
Descripción ("Texto que se muestra en el botón de la primera página"),
Categoría ("botón de navegación"),
DefaultValue ("<font face =" webdings "> 9 </font>")]]
cadena pública FirstPagetext
{{
conseguir
{{
object obj = ViewState ["FirstPageText"];
Return (obj == null)?
}
establecer {ViewState ["FirstPageText"] = valor;}
} /// <summary>
/// Obtener o configurar en el texto que se muestra en el botón de página anterior.
/// </summary>
[Navegable (verdadero),
Descripción ("Texto que se muestra en el botón de página anterior"),
Categoría ("botón de navegación"),
DefaultValue ("<font face =" webdings "> 3 </font>")]]
Prevagete de cadena pública
{{
conseguir
{{
object obj = ViewState ["PrevAgEtext"];
Return (obj == null)?
}
establecer {ViewState ["prevpageText"] = valor;}
} /// <summary>
/// Obtener o establecer el texto que se muestra por la página siguiente.
/// </summary>
[Navegable (verdadero),
Descripción ("Texto que se muestra en el botón de página siguiente"),
Categoría ("botón de navegación"),
DefaultValue ("<font face =" webdings "> 4 </font>")]]
Cadena pública nextPageText
{{
conseguir
{{
object obj = ViewState ["nextPageText"];
Return (obj == null)?
}
establecer {ViewState ["NextPageText"] = valor;}
} /// <summary>
/// Get o configure el texto que se muestra como el botón de la última página.
/// </summary>
[Navegable (verdadero),
Descripción ("Texto que se muestra en el botón de la última página"),
Categoría ("botón de navegación"),
DefaultValue ("<font face =" webdings ">: </font>")]]
Cadena pública lastPageText
{{
conseguir
{{
object obj = ViewState ["LastPageText"];
Return (obj == null)?
}
establecer {ViewState ["LastPageText"] = valor;}
} /// <summary>
/// Obtener o configurar el número de botones numéricos que se muestran al mismo tiempo en el elemento de navegación de la página en el control <ver cref = "Aspnetpager"/>.
/// </summary>
[Navegable (verdadero),
Descripción
Categoría ("botón de navegación"),
DefaultValue (10)]
Público int numericbuttoncount
{{
conseguir
{{
object obj = ViewState ["NumericButtonCount"];
Return (obj == nulo)?
}
establecer {ViewState ["NumericButtonCount"] = valor;}
} /// <summary>
/// Obtener o establecer un valor que especifica si se muestran los botones deshabilitados.
/// </summary>
/// <lmarks>
/// Este valor se utiliza para especificar si se muestra el botón de navegación de paginación deshabilitado. Be el último botón de página se deshabilitará, los botones prohibidos no tienen un enlace, y hacer clic en el botón no tendrá ningún efecto.
/// </observación>
[Navegable (verdadero),
Categoría ("botón de navegación"),
Descripción ("si mostrar el botón deshabilitado"),
DefaultValue (verdadero)]
Public bool showdisableButtons
{{
conseguir
{{
object obj = ViewState ["showDisableButton"];
Return (obj == nulo)?
}
colocar
{{
ViewState ["showDisableButtons"] = valor;
}
}
#Endregion
#Botones de imagen de región
/// <summary>
/// Get o configure la ruta del archivo de imagen al usar el botón de imagen.
/// </summary>
[Navegable (verdadero),
Categoría ("botón de imagen"),
Descripción ("Al usar el botón de imagen, especifique la ruta del archivo de imagen"), "),),,
DefaultValue (nulo)]
Cadena pública ImagePath
{{
conseguir
{{
cadena imgpath = (string) ViewState ["ImagePath"];
if (imgpath! = nulo)
imgpath = this.rsolveurl (imgpath);
Devolver imgpath;
}
colocar
{{
cadena imgpath = value.trim ().
ViewState ["ImagePath"] = (imgpath.endswith ("/")? Imgpath: imgpath+"/";
}
}
/// <summary>
/// Get o establezca al usar el botón de imagen, el tipo de imagen, como GIF o JPG, este valor es el nombre de sufijo del archivo de imagen.
/// </summary>
[Navegable (verdadero),
Categoría ("botón de imagen"),
DefaultValue (". Gif"),
Descripción ("Al usar el botón de imagen, el tipo de imagen, como GIF o JPG, este valor es el nombre de sufijo del archivo de imagen")]]
Cadena pública buttonImageExtent
{{
conseguir
{{
object obj = ViewState ["ButtonImageExtent"];
Return (obj == nulo)?
}
colocar
{{
cadena ext = value.trim ();
ViewState ["ButtonImageExtension"] = (ext.Startswith (".")? Ext: ("."+Ext);
}
}
/// <summary>
/// Obtener o establecer la cadena de sufijo del nombre de archivo de imagen personalizado para distinguir los diferentes tipos de botones.
/// </summary>
/// <<emartics> <note> nota: </not> Este valor no es un sufijo de archivo, pero una cadena se agregó al nombre de la imagen para distinguir diferentes archivos de imagen, como ::
/// Actualmente hay dos conjuntos de botones, uno de los cuales "1" puede ser "1f.gif", y el nombre de la imagen del "1" en el otro conjunto puede ser "1n.gif", de los cuales F y N son ButtonImagenameExtension. </semartics>
[Navegable (verdadero),
DefaultValue (NULL),
Categoría ("botón de imagen"),
Descripción ("El sufijo del" Nombre de archivo de imagen personalizado), como el ButtonImageNamexketency de la imagen "1f.gif" es "f" ")]]]]]]]
Cadena pública ButtonImageenameExtension
{{
conseguir
{{
Return (string) ViewState
}
colocar
{{
ViewState ["ButtonImagenameExtension"] = valor;
}
}
/// <summary>
/// Obtener o establecer el sufijo del nombre de la imagen del botón de índice de página actual.
/// </summary>
/// <lmarks>
/// Cuando <ver cref = "PagingButtonType"/> está configurado en imagen, este atributo le permite establecer el carácter de sufijo de nombre de imagen utilizado por el botón de índice de página actual, por lo que los botones de índice de página actuales se pueden usar diferentes de otra página Botones de índice.
/// </observación>
[Navegable (verdadero),
DefaultValue (NULL),
Categoría ("botón de imagen"),
Descripción ("Nombre de imagen Cadena de facultad del botón de índice de página actual")]
Cadena pública cpibuttoniMagnameExtension
{{
conseguir
{{
objeco obj = ViewState
Return (obj == null)?
}
colocar
{{
ViewState ["cpibuttoniMagenameExension"] = valor;
}
}
/// <summary>
/// Obtener o establecer la cadena de sufijo del nombre de la imagen del botón de navegación de la página deshabilitada.
/// </summary>
/// <lmarks>
/// Cuando <ver cref = "PagingButtonType"/> está configurado en imagen, este valor le permite establecer el botón de navegación de la página (incluida la primera página, la página anterior, la página anterior, la página anterior, la página anterior, La página anterior, la cadena de sufijo del nombre del archivo de imagen de la página siguiente y la última página de la última página, por lo que el botón de navegación de la página deshabilitado puede ser diferente del botón de navegación de la página normal. Si este valor no está configurado, el valor predeterminado es <ver cref = "ButtonImageRextent"/>, es decir, el botón de navegación de la página deshabilitado usa la misma imagen que el botón Normal de navegación de la página.
/// </observación>
[Navegable (verdadero),
DefaultValue (NULL),
Categoría ("botón de imagen"),
Descripción ("Cadena de volumen de nombre de imagen del botón de navegación de la página deshabilitada")]
Cadena pública Desactivado ButtoniMagenameExtension
{{
conseguir
{{
objeco obj = ViewState
Return (obj == null)?
}
colocar
{{
Viewstate
}
}
/// <summary>
/// Especifique el método de alineación al usar el botón de imagen.
/// </summary>
[Navegable (verdadero),
descripción
DefaultValue (imagealign.baseline),
categoría ("botón de imagen")]]]
Pública Imagealign ButtonIMagealign
{{
conseguir
{{
object obj = ViewState ["ButtonIMaGeLign"];
Return (obj == null)?
}
establecer {ViewState ["ButtonIMaGeLign"] = Value;}
}
#Endregion
#Paging de la región
/// <summary>
/// Obtenga o establezca si habilita la URL para pasar la información de paginación.
/// </summary>
/// <lmarks>
/// Habilitar el método de Paging de URL para pasar el índice de página al que el usuario desea acceder a través de la URL.
/// Entonces cada datos se restaura al valor inicial o es necesario obtener en cada paginación. Use el método de paginación de URL no admite el valor de atributo de los cambios dinámicos al control de la paginación.
/// porque el nuevo valor de atributo no puede pasar temporalmente la URL a la página siguiente.
/// </observación>
/// <camual> Los siguientes ejemplos muestran cómo usar el método de paginación de URL de AspnetPager para que se revisara el DataGrid (usando la base de datos de acceso):
/// <code> <!
/// <%@registro tagprefix = "webdiyer" namespace = "wuqi.webdiyer" ensamblaje = "aspnetpager"%>
/// <%@importación de nombres = "System.Data.OLEDB"%>
/// <%@ importación de nombres = "System.Data"%>
/// <%@ page lenguaje = "C#" Debug = True%>
/// <html>
/// <fead>
/// <title> Bienvenido a Webdiyer.com </title>
/// <script runat = "servidor">
/// OLEDBConnection Conn;
/// OLEDBCOMMAND CMD;
/// void page_load (objeto src, eventargs e) {{
/// Conn = new OLEDBConnection ("Provider = Microsoft.Jet.OLEDB.4.0; Data Source ="+Server.Mappath ("Acept/Aspnetpager.mdb");
/// if (! Page.ispostback) {
/// cmd = nuevo OLEDBCOMMAND ("Seleccione Count (NewsId) de WQNews", Conn);
// conn.open ();
/// Pager.RecordCount = (int) cmd.executescalal ();
// conn.close ();
/// bindData ();
///}
///}
//
/// void bindData () {{)
/// cmd = nuevo OLEDBCOMMAND ("Seleccione NewsId, encabezado, fuente, TIME de WQNews Order por addtime Design, conn); conn); conn); conn); conn); conn); conn); conn); conn); ;
/// OLEDBDataAdapter adaptador = nuevo OLEDBDataAdapter (CMD);
/// DataSet ds = new DataSet ();
/// adapter.fill (ds, pager.pagesize*(Pager.CurrentPageIndex-), Pager.PageSize, "News");
/// dg.dataSource = ds.tables ["News"];
/// dg.databind ();
///}
//
/// void ChangePage (Object src, pagechangedeventargs e) {{
/// Pager.CurrentPageIndex = E.NewPageIndex;
/// bindData ();
///}
//
/// </script>
/// <meta http-equiv = "content-language" content = "zh-cn">
/// <meta http-equiv = "content-type" content = "text/html; charset = gb2312">
/// <meta name = "general" content = "editplus">
/// <meta name = "autor" content = "webdiyer ([correo electrónico protegido])"> ">">
/// </head>
/// <body>
/// <form runat = "server" id = "form1">
/// <h2 align = "Center"> Ejemplo de paginación Aspnetpager </h2>
/// <asp: dataGrid id = "dg" runat = "servidor"
/// CellPadding = "4" Align = "Center"/>
//
/// <webdiyer: aspnetpager runat = "servidor" id = "buscapersonas"
/// onpageChanged = "ChangePage"
/// horizontalalally = "centro"
//
/// pageSize = "8"
/// showinputbox = "siempre"
/// SubtButtonStyle = "Border: 1px Solid #000066; Altura: 20px; Ancho: 30px"
/// inputBoxStyle = "Border: 1px #0000ff Solid; Text-Align: Center"
/// SubmitButTontext = "Realizar a"
/// urlpaging = "verdadero"
/// urlPageIndexName = "PageIndex"/>
/// </form>
/// </body>
/// </html>
///]]> </code>
/// </scuestor>
[Navegable (verdadero),
Categoría ("Paging"),
DefaultValue (falso),
Descripción ("si usar la URL para pasar la información de paginación a las páginas")]
Public Bool Urlpaging
{{
conseguir
{{
Regresar urlpaging;
}
colocar
{{
urlpaging = valor;
}
}
/// <summary>
/// Obténlo o establecerlo cuando el método de paginación de URL esté habilitado, y el nombre del parámetro del índice de página que se transmitirá en la URL está en la URL.
/// </summary>
/// <lmarks>
/// Este atributo le permite personalizar el nombre del parámetro del índice de página para pasar a través del índice de página de transmisión de URL para evitar repetir con el nombre del parámetro existente.
/// <p> El valor predeterminado del atributo es "página", es decir, cuando la URL pagina, la URL que se muestra en la barra de direcciones del navegador es similar a: </p> http://www.webdiyer.com /aspnetpager/samples/dataGrid_url.aspx?
/// <p> Si el valor se cambia a "PageIndex", la URL anterior se convertirá en: </p> <p> http://www.webdiyer.com/aspnetpager/samples/datagrid_url.aspx?pageindex = 2 </p>
/// </observación>
[Navegable (verdadero),
DefaultValue ("Página"),
Categoría ("Paging"),
Descripción ("Cuando el método de paginación de URL está habilitado, el nombre del parámetro del índice de página para indicar en la URL")]]]
Cadena pública urlpageIndexName
{{
Obtener {return urlPageIndexName;}
establecer {urlPageIndexName = value;}
}
/// <summary>
/// Obtener o establecer el índice de la página de visualización actual.
/// </summary>
/// <remarks> Use este atributo para determinar la página que se muestra actualmente en el control AspnetPager. Este atributo también se usa para controlar la página que se muestra por programación.
/// <p> <b> Nota: </b> Diferente del CurrentPageIndex del control DataGrid, la propiedad CurrentPageIndex de AspnetPager comienza desde 1. </p> </semartics>
[Readonly (verdadero),
navegable (falso),
Descripción ("Índice de la página de pantalla actual"),
Categoría ("Paging"),
DefaultValue (1),
Designerialization Visibility (Designerserialization Visibilidad.hidden)]
Public int currentPageIndex
{{
conseguir
{{
objeto cPage = ViewState ["CurrentPageIndex"];
int pindex = (cpage == nulo)?
If (pindex> pageCount && pageCount> 0)
Devolver pageCount;
más if (pindex <1)
Regresar 1;
Devolver pindex;
}
colocar
{{
int cpage = valor;
if (cpage <1)
cPage = 1;
Más if (cpage> this.pageCount)
cPage = this.pageCount;
ViewState ["CurrentPageIndex"] = cPage;
}
}
/// <summary>
/// Obtener o establecer el número total de todos los registros que deben ser pagados.
/// </summary>
/// <lmarks>
/// Cuando la página se carga por primera vez, se le debe dar el atributo a todos los registros totales de PAGE en la tabla de datos que se devuelve desde el procedimiento de almacenamiento o la instrucción SQL. En la página de la página, el valor se obtiene de ViewState al regresar, por lo que evita el acceso a la base de datos cada vez que se evita la paginación. AspnetPager calcula el número total de páginas requeridas por todos los datos en función del número total de datos que se pagan y los atributos <ver cref = "pageSize"/> a la paginación, es decir, el valor de <ver cref = "PageCount" />.
/// </observación>
/// <cectual>
/// El siguiente ejemplo muestra cómo se asigna el número total de registros devueltos de la instrucción SQL al atributo:
/// <p>
/// <code> <!
/// <html>
/// <fead>
/// <title> Bienvenido a Webdiyer.com </title>
/// <script runat = "servidor">
/// SQLConnection Conn;
/// sqlCommand cmd;
/// void page_load (objeto src, eventArgs e)
/// {
// conn = nueva SQLConnection (ConfigurationSettings.AppSettings ["Connstr"];
/// if (! Page.ispostback)
/// {
/// cmd = nuevo SQLCommand ("Seleccione Count (ID) de News", Conn);
// conn.open ();
/// Pager.RecordCount = (int) cmd.executescalal ();
// conn.close ();
/// bindData ();
///}
///}
//
/// void bindData ()
/// {
/// cmd = new SqlCommand ("GetPagedNews", Conn);
/// cmd.commandtype = comandype.storedprocedure;
/// cmd.parameters.add ("@PosgeIndex", Pager.CurrentPageIndex);
/// cmd.parameters.add ("@Pagesize", Pager.pagesize);
// conn.open ();
/// dataGrid1.dataSource = cmd.executereader ();
/// dataGrid1.databind ();
// conn.close ();
///}
/// Void ChangePage (Object src, pagechangedeventargs e)
/// {
/// Pager.CurrentPageIndex = E.NewPageIndex;
/// bindData ();
///}
/// </script>
/// <meta http-equiv = "content-language" content = "zh-cn">
/// <meta http-equiv = "content-type" content = "text/html; charset = gb2312">
/// <meta name = "general" content = "editplus">
/// <meta name = "autor" content = "webdiyer ([correo electrónico protegido])"> ">">
/// </head>
/// <body>
/// <form runat = "server" id = "form1">
/// <asp: dataGrid id = "dataGrid1" runat = "servidor"/>
//
/// <webdiyer: aspnetpager id = "perra" runat = "servidor"
/// pageSize = "8"
/// numericButtonCount = "8"
/// showcustominfosection = "antes"
/// showinputbox = "siempre"
/// cssclass = "mypager"
/// horizontalalally = "centro"
/// onpageChanged = "ChangePage"/>
//
/// </form>
/// </body>
/// </html>
///]]>
/// </code> </p>
/// <p> El código de procedimiento de almacenamiento utilizado en este ejemplo es el siguiente: </p>
/// <code> <!
/// Crear procedimiento getPagedNews
/// (@pagesize int,
@PageIndex int)
/// como
/// establecer nocount en
/// declarar @Indextable TAB
/// declarar @pagelowerbound int
/// declarar @PageUpperBound int
/// set @PagelowerBound = (@PageIndex-)*@Pagesize
/// set @[correo electrónico protegido] [correo electrónico protegido]
/// Establecer RowCount @PageUpperBound
/// Insertar en @Indextable (NID) Seleccione ID del pedido de noticias por Addtime Desc
/// Seleccione O.ID, O.Title, O.Source, O.Addtime de noticias
/// y t.id> @pagelowerbound y t.id <[correo electrónico prory] pedido por t.id
/// Establecer nocount
/// IR
///]]>
/// </code>
/// </scuestor>
[Navegable (falso),
description("要分页的所有记录的总数,该值须在程序运行时设置,默认值为225是为设计时支持而设置的参照值。"),
category("data"),
defaultvalue(225)]
public int recordcount
{{
conseguir
{{
object obj=viewstate["recordcount"];
return (obj==null)?0:(int)obj;
}
set{viewstate["recordcount"]=value;}
}
/// <summary>
/// 获取当前页之后未显示的页的总数。
/// </summary>
[browsable(false),
designerserializationvisibility(designerserializationvisibility.hidden)]
public int pagesremain
{{
conseguir
{{
return pagecount-currentpageindex;
}
}
/// <summary>
/// 获取或设置每页显示的项数。
/// </summary>
/// <remarks>
/// 该值获取或设置数据呈现控件每次要显示数据表中的的数据的项数,aspnetpager根据该值和<see cref="recordcount"/> 来计算显示所有数据需要的总页数,即<see cref="pagecount"/>的值。</remarks>
/// <example>以下示例将<see cref="aspnetpager"/> 设置为允许每页显示8条数据:
/// <code>
/// <![cdata[
/// ...
/// <webdiyer:aspnetpager id="pager" runat="server" pagesize=8 onpagechanged="changepage"/>
/// ...
/// ]]></code></example>
[browsable(true),
description("每页显示的记录数"),
category("分页"),
defaultvalue(10)]
public int pagesize
{{
conseguir
{{
object obj=viewstate["pagesize"];
return (obj==null)?10:(int)obj;
}
colocar
{{
viewstate["pagesize"]=value;
}
}
/// <summary>
/// 获取在当前页之后还未显示的剩余记录的项数。
/// </summary>
[browsable(false),
designerserializationvisibility(designerserializationvisibility.hidden)]
public int recordsremain
{{
conseguir
{{
if(currentpageindex<pagecount)
return recordcount-(currentpageindex*pagesize);
return 0;}
}
/// <summary>
/// 获取所有要分页的记录需要的总页数。
/// </summary>
[browsable(false),
designerserializationvisibility(designerserializationvisibility.hidden)]
public int pagecount
{{
get{return (int)math.ceiling((double)recordcount/(double)pagesize);}
}
#endregion
#region textbox and submit button
/// <summary>
/// 获取或设置页索引文本框的显示方式。
/// </summary>
/// <remarks>
/// 页索引文件框允许用户手式输入要访问的页的索引,当页数非常多时,显示页索引文本框非常方便用户跳转到指定的页,默认情况下,该文本框只有在总页数大于或等于<see cref="showboxthreshold"/> 的值时才显示,否则不显示,要想该文本框任何时候都显示,请将其值设为always,若希望任何时候都不显示,则应设为never。
///</remarks>
[browsable(true),
descripción
category("文本框及提交按钮"),
defaultvalue(showinputbox.auto)]
public showinputbox showinputbox
{{
conseguir
{{
object obj=viewstate["showinputbox"];
return (obj==null)?showinputbox.auto:(showinputbox)obj;
}
set{viewstate["showinputbox"]=value;}
}
/// <summary>
/// 获取或设置应用于页索引输入文本框的css类名。
/// </summary>
[browsable(true),
category("文本框及提交按钮"),
defaultvalue(null),
description("应用于页索引输入文本框的css类名")]
public string inputboxclass
{{
conseguir
{{
return (string)viewstate["inputboxclass"];
}
colocar
{{
if(value.trim().length>0)
viewstate["inputboxclass"]=value;
}
}
/// <summary>
/// 获取或设置页索引输入文本框的css样式文本。
/// </summary>
[browsable(true),
category("文本框及提交按钮"),
defaultvalue(null),
description("应用于页索引输入文本框的css样式文本")]
public string inputboxstyle
{{
conseguir
{{
return (string)viewstate["inputboxstyle"];
}
colocar
{{
if(value.trim().length>0)
viewstate["inputboxstyle"]=value;
}
}
/// <summary>
/// 获取或设置页索引页索引输入文本框前的文本字符串值。
/// </summary>
[browsable(true),
category("文本框及提交按钮"),
defaultvalue(null),
description("页索引输入文本框前的文本内容字符串")]
public string textbeforeinputbox
{{
conseguir
{{
return (string)viewstate["textbeforeinputbox"];
}
colocar
{{
viewstate["textbeforeinputbox"]=value;
}
}
/// <summary>
/// 获取或设置页索引文本输入框后的文本内容字符串值。
/// </summary>
[browsable(true),
defaultvalue(null),
category("文本框及提交按钮"),
description("页索引输入文本框后的文本内容字符串")]
public string textafterinputbox
{{
conseguir
{{
return (string)viewstate["textafterinputbox"];
}
colocar
{{
viewstate["textafterinputbox"]=value;
}
}
/// <summary>
/// 获取或设置提交按钮上的文本。
/// </summary>
[browsable(true),
category("文本框及提交按钮"),
defaultvalue("go"),
description("提交按钮上的文本")]
public string submitbuttontext
{{
conseguir
{{
object obj=viewstate["submitbuttontext"];
return (obj==null)?"go":(string)obj;
}
colocar
{{
if(value.trim().length>0)
viewstate["submitbuttontext"]=value;
}
}
/// <summary>
/// 获取或设置应用于提交按钮的css类名。
/// </summary>
[browsable(true),
category("文本框及提交按钮"),
defaultvalue(null),
descripción
public string submitbuttonclass
{{
conseguir
{{
return (string)viewstate["submitbuttonclass"];
}
colocar
{{
viewstate["submitbuttonclass"]=value;
}
}
/// <summary>
/// 获取或设置应用于提交按钮的css样式。
/// </summary>
[browsable(true),
category("文本框及提交按钮"),
defaultvalue(null),
description("应用于提交按钮的css样式")]
public string submitbuttonstyle
{{
conseguir
{{
return (string)viewstate["submitbuttonstyle"];
}
colocar
{{
viewstate["submitbuttonstyle"]=value;
}
}
/// <summary>
/// 获取或设置自动显示页索引输入文本框的最低起始页数。
/// </summary>
/// <remarks>
/// 当<see cref="showinputbox"/> 设为auto(默认)并且要分页的数据的总页数达到该值时会自动显示页索引输入文本框,默认值为30。该选项当<see cref="showinputbox"/> 设为never或always时没有任何作用。
/// </remarks>
[browsable(true),
description("指定当showinputbox设为showinputbox.auto时,当总页数达到多少时才显示页索引输入文本框"),
category("文本框及提交按钮"),
defaultvalue(30)]
public int showboxthreshold
{{
conseguir
{{
object obj=viewstate["showboxthreshold"];
return (obj==null)?30:(int)obj;
}
set{viewstate["showboxthreshold"]=value;}
}
#endregion
#region custominfosection
/// <summary>
/// 获取或设置显示用户自定义信息区的方式。
/// </summary>
/// <remarks>
/// 该属性值设为left或right时会在分页导航元素左边或右边划出一个专门的区域来显示有关用户自定义信息,设为never时不显示。
/// </remarks>
[browsable(true),
description("显示当前页和总页数信息,默认值为不显示,值为showcustominfosection.left时将显示在页索引前,为showcustominfosection.right时将显示在页索引后"),
defaultvalue(showcustominfosection.never),
category("自定义信息区")]
public showcustominfosection showcustominfosection
{{
conseguir
{{
object obj=viewstate["showcustominfosection"];
return (obj==null)?showcustominfosection.never:(showcustominfosection)obj;
}
set{viewstate["showcustominfosection"]=value;}
}
/// <summary>
/// 获取或设置用户自定义信息区文本的对齐方式。
/// </summary>
[browsable(true),
category("自定义信息区"),
defaultvalue(horizontalalign.left),
description("用户自定义信息区文本的对齐方式")]
public horizontalalign custominfotextalign
{{
conseguir
{{
object obj=viewstate["custominfotextalign"];
return (obj==null)?horizontalalign.left:(horizontalalign)obj;
}
colocar
{{
viewstate["custominfotextalign"]=value;
}
}
/// <summary>
/// 获取或设置用户自定义信息区的宽度。
/// </summary>
[browsable(true),
category("自定义信息区"),
defaultvalue(typeof(unit),"40%"),
description("用户自定义信息区的宽度")]
public unit custominfosectionwidth
{{
conseguir
{{
object obj=viewstate["custominfosectionwidth"];
return (obj==null)?unit.percentage(40):(unit)obj;
}
colocar
{{
viewstate["custominfosectionwidth"]=value;
}
}
/// <summary>
/// 获取或设置应用于用户自定义信息区的级联样式表类名。
/// </summary>
[browsable(true),
category("自定义信息区"),
defaultvalue(null),
Descripción
public string custominfoclass
{{
conseguir
{{
object obj=viewstate["custominfoclass"];
return (obj==null)?cssclass:(string)obj;
}
colocar
{{
viewstate["custominfoclass"]=value;
}
}
/// <summary>
/// 获取或设置应用于用户自定义信息区的css样式文本。
/// </summary>
/// <value>字符串值,要应用于用户自定义信息区的css样式文本。</value>
[browsable(true),
category("自定义信息区"),
defaultvalue(null),
description("应用于用户自定义信息区的css样式文本")]
public string custominfostyle
{{
conseguir
{{
object obj=viewstate["custominfostyle"];
return (obj==null)?getstylestring():(string)obj;
}
colocar
{{
viewstate["custominfostyle"]=value;
}
}
/// <summary>
/// 获取或设置在显示在用户自定义信息区的用户自定义文本。
/// </summary>
[browsable(true),
category("自定义信息区"),
defaultvalue(null),
Descripción
public string custominfotext
{{
conseguir
{{
return (string)viewstate["custominfotext"];
}
colocar
{{
viewstate["custominfotext"]=value;
}
}
#endregion
#region others
/// <summary>
/// 获取或设置一个值,该值指定是否总是显示aspnetpager分页按件,即使要分页的数据只有一页。
/// </summary>
/// <remarks>
/// 默认情况下,当要分页的数据小于两页时,aspnetpager不会在页面上显示任何内容,将此属性值设为true时,即使总页数只有一页,aspnetpager也将显示分页导航元素。
/// </remarks>
[browsable(true),
category("behavior"),
defaultvalue(false),
description("总是显示分页控件,即使要分页的数据只要一页")]
public bool alwaysshow
{{
conseguir
{{
object obj=viewstate["alwaysshow"];
return (obj==null)?false:(bool)obj;
}
colocar
{{
viewstate["alwaysshow"]=value;
}
}
/// <summary>
/// 获取或设置由aspnetpager 服务器控件在客户端呈现的级联样式表(css) 类。
/// </summary>
[browsable(true),
description("应用于控件的css类名"),
category("appearance"),
defaultvalue(null)]
public override string cssclass
{{
get{return base.cssclass;}
colocar
{{
base.cssclass=value;
cssclassname=value;
}
}
/// <summary>
/// 获取或设置一个值,该值指示aspnetpager 服务器控件是否向发出请求的客户端保持自己的视图状态,该属性经重写后不允许设为false。
/// </summary>
/// <remarks><see cref="aspnetpager"/> 服务器控件将一些重要的分页信息保存在viewstate中,当使用url分页方式时,虽然视图状态在分页过程中没有任何作用,但若当前页需要回发,则必须启用视图状态以便分页控件能在页面回发后获取回发前的分页状态;当通过页面回发(postback)的方式来分页时,要使aspnetpager正常工作,必须启用视图状态。
/// <p><note>该属性并不能禁止用户用<![cdata[<%@page enableviewstate=false%> ]]>页指令来禁用整个页面的视图状态,当使用此指令并且设置aspnetpager通过页面回发来分页时,aspnetpager因为无法获取保存的信息而不能正常工作。</note></p></remarks>
[browsable(false),
description("是否启用控件的视图状态,该属性的值必须为true,不允许用户设置。"),
defaultvalue(true),
category("behavior")]
public override bool enableviewstate
{{
conseguir
{{
return base.enableviewstate;
}
colocar
{{
base.enableviewstate=true;
}
}
/// <summary>
/// 获取或设置当用户输入的页索引超出范围(大于最大页索引或小于最小页索引)时在客户端显示的错误信息。
/// </summary>
[browsable(true),
description("当用户输入的页索引超出范围(大于最大页索引或小于最小页索引)时在客户端显示的错误信息。"),
defaultvalue("页数超出范围!"),
category("data")]
public string pageindexoutofrangeerrorstring
{{
conseguir
{{
object obj=viewstate["pageindexoutofrangeerrorstring"];
return (obj==null)?"页数超出范围!":(string)obj;
}
colocar
{{
viewstate["pageindexoutofrangeerrorstring"]=value;
}
}
/// <summary>
/// 获取或设置当用户输入无效的页索引(负值或非数字)时在客户端显示的错误信息。
/// </summary>
[browsable(true),
description("当用户输入无效的页索引(负值或非数字)时在客户端显示的错误信息。"),
defaultvalue("页索引无效!"),
category("data")]
public string invalidpageindexerrorstring
{{
conseguir
{{
object obj=viewstate["invalidpageindexerrorstring"];
return (obj==null)?"页索引无效!":(string)obj;
}
colocar
{{
viewstate["invalidpageindexerrorstring"]=value;
}
}
#endregion
#endregion
#region control rendering logic
/// <summary>
/// 重写<see cref="system.web.ui.control.onload"/> 方法。
/// </summary>
/// <param name="e">包含事件数据的<see cref="eventargs"/> 对象。</param>
protected override void onload(eventargs e)
{
if(urlpaging)
{{
currenturl=page.request.path;
urlparams=page.request.querystring;
string pageindex=page.request.querystring[urlpageindexname];
int index=1;
intentar
{
index=int.parse(pageindex);
}
atrapar {}
onpagechanged(new pagechangedeventargs(index));
}
demás
{
inputpageindex=page.request.form[this.uniqueid+"_input"];
}
base.onload(e);
}
/// <summary>
/// 重写<see cref="system.web.ui.control.onprerender"/>方法。
/// </summary>
/// <param name="e">包含事件数据的<see cref="eventargs"/> 对象。</param>
protected override void onprerender(eventargs e)
{
if(pagecount>1)
{
string checkscript="<script language="javascript">function docheck(el){var r=new regexp("^s*(d+)s*$");if(r.test(el.value)){if(regexp.$1<1||regexp.$1>"+pagecount.tostring()+"){alert(""+pageindexoutofrangeerrorstring+"");document.all['"+this.uniqueid+"_input'].select();return false;}return true;}alert(""+invalidpageindexerrorstring+"");document.all['"+this.uniqueid+"_input'].select();return false;}</script>";
if((showinputbox==showinputbox.always)||(showinputbox==showinputbox.auto&&pagecount>=showboxthreshold))
{
if(!page.isclientscriptblockregistered("checkinput"))
page.registerclientscriptblock("checkinput",checkscript);
string script="<script language="javascript" > <!-- nfunction buildurlstring(key,value){ var _key=key.tolowercase(); var prms=location.search; if(prms.length==0) return location.pathname+"?"+_key+"="+value; var params=prms.substring(1).split("&"); var newparam=""; var found=false; for(i=0;i<params.length;i++){ if(params[i].split("=")[0].tolowercase()==_key){ params[i]=_key+"="+value; found=true; break; } } if(found) return location.pathname+"?"+params.join("&"); else return location+"&"+_key+"="+value; }n//--> </script>";
if(!page.isclientscriptblockregistered("buildurlscript"))
page.registerclientscriptblock("buildurlscript",script);
}
}
base.onprerender(e);
}
/// <summary>
/// Rewrite the <see Cref = "System.web.ui.webControls.webControl.addattributestorender" method. Add the html attributes and styles that need to be presented to the specified <see Cref = "SYSTEM.WEB.HTMLTEXTEXT writer " />
/// </summary>
/// <param name="writer"></param>
protected override void addattributestorender(htmltextwriter writer)
{
if(this.page!=null)
this.page.verifyrenderinginserverform(this);
base.addattributestorender(writer);
}
/// <summary>
///重写<see cref="system.web.ui.webcontrols.webcontrol.renderbegintag"/> 方法,将<see cref="aspnetpager"/> 控件的html 开始标记输出到指定的<see cref="system.web.ui.htmltextwriter"/> 编写器中。
/// </summary>
///<param name="writer"><see cref="system.web.ui.htmltextwriter"/>,表示要在客户端呈现html 内容的输出流。</param>
public override void renderbegintag(htmltextwriter writer)
{
bool showpager=(pagecount>1||(pagecount<=1&&alwaysshow));
writer.writeline();
writer.write ("<! ------------------------------------------- -------------------------------------------------- -----------")
writer.write("aspnetpager v4.3 start");
writer.writeline ("--------------------------------------------- -------------------------------------------------- -------------------------------------------------- --------------
writer.write ("<! ------------------------------------------- -------------------------------------------------- ------------------");
writer.write("copyright:2003 webdiyer(www.webdiyer.com)");
writer.write(" ---------------------");
writer.writeline(">");
base.renderbegintag(writer);
if(!showpager)
{
Writer.Write ("<! ------- because the total page is only one page, and the alwayShow attribute is set to false, the ASPNETPAGER does not show any content. If you want alwayShow attribute set to true! " );
writer.write("----->");
}
if((showcustominfosection==showcustominfosection.left||showcustominfosection==showcustominfosection.right)&&showpager)
{
writer.addattribute(htmltextwriterattribute.width,"100%");
writer.addattribute(htmltextwriterattribute.style,getstylestring());
if(height!=unit.empty)
writer.addstyleattribute(htmltextwriterstyle.height,height.tostring());
writer.addattribute(htmltextwriterattribute.border,"0");
writer.addattribute(htmltextwriterattribute.cellpadding,"0");
writer.addattribute(htmltextwriterattribute.cellspacing,"0");
writer.renderbegintag(htmltextwritertag.table);
writer.renderbegintag(htmltextwritertag.tr);
writecellattributes(writer,true);
writer.renderbegintag(htmltextwritertag.td);
}
}
/// <summary>
///重写<see cref="system.web.ui.webcontrols.webcontrol.renderendtag"/> 方法,将<see cref="aspnetpager"/> 控件的html 结束标记输出到指定的<see cref="system.web.ui.htmltextwriter"/> 编写器中。
/// </summary>
///<param name="writer"><see cref="system.web.ui.htmltextwriter"/>,表示要在客户端呈现html 内容的输出流。</param>
public override void renderendtag(htmltextwriter writer)
{
if((showcustominfosection==showcustominfosection.left||showcustominfosection==showcustominfosection.right)&&(pagecount>1||(pagecount<=1&&alwaysshow)))
{
writer.renderendtag();
writer.renderendtag();
writer.renderendtag();
}
base.renderendtag(writer);
writer.writeline();
writer.write("<!------------------------------- ");
writer.write("aspnetpager v4.3 end");
writer.write(" --------------------------------");
writer.writeline(">");
writer.writeline();
}
/// <summary>
/// Rewrite the <see Cref = "System.web.ui.webControls.webControl.RenderContents" method to present the content of the control to the specified <see cref = "System.web.ui.htmlTextWriter"/> In the dispositivo.
/// </summary>
/// <param name="writer"><see cref="system.web.ui.htmltextwriter"/>,表示要在客户端呈现html 内容的输出流。</param>
protected override void rendercontents(htmltextwriter writer)
{
if(pagecount<=1&&!alwaysshow)
Devolver;
if(showcustominfosection==showcustominfosection.left)
{
writer.write(custominfotext);
writer.renderendtag();
writecellattributes(writer,false);
writer.addattribute(htmltextwriterattribute.class,cssclass);
writer.renderbegintag(htmltextwritertag.td);
}
int midpage=(int)((currentpageindex-1)/numericbuttoncount);
int pageoffset=midpage*numericbuttoncount;
int endpage=((pageoffset+numericbuttoncount)>pagecount)?pagecount:(pageoffset+numericbuttoncount);
this.createnavigationbutton(writer,"first");
this.createnavigationbutton(writer,"prev");
if(showpageindex)
{
if(currentpageindex>numericbuttoncount)
createmorebutton(writer,pageoffset);
for(int i=pageoffset+1;i<=endpage;i++)
{
createnumericbutton(writer,i);
}
if(pagecount>numericbuttoncount&&endpage<pagecount)
createmorebutton(writer,endpage+1);
}
this.createnavigationbutton(writer,"next");
this.createnavigationbutton(writer,"last");
if((showinputbox==showinputbox.always)||(showinputbox==showinputbox.auto&&pagecount>=showboxthreshold))
{
writer.write(" ");
if(textbeforeinputbox!=null)
writer.write(textbeforeinputbox);
writer.addattribute(htmltextwriterattribute.type,"text");
writer.addstyleattribute(htmltextwriterstyle.width,"30px");
writer.addattribute(htmltextwriterattribute.value,currentpageindex.tostring());
if(inputboxstyle!=null&&inputboxstyle.trim().length>0)
writer.addattribute(htmltextwriterattribute.style,inputboxstyle);
if(inputboxclass!=null&&inputboxclass.trim().length>0)
writer.addattribute(htmltextwriterattribute.class,inputboxclass);
if(pagecount<=1&&alwaysshow)
writer.addattribute(htmltextwriterattribute.readonly,"true");
writer.addattribute(htmltextwriterattribute.name,this.uniqueid+"_input");
string scriptref="docheck(document.all['"+this.uniqueid+"_input'])";
string postref="if(event.keycode==13){if("+scriptref+")__dopostback('"+this.uniqueid+"',document.all['"+this.uniqueid+"_input'].value);else{event.returnvalue=false;}}";
string keydownscript="if(event.keycode==13){if("+scriptref+"){even
csover 发表于:2006.07.21 08:46 ::分类: ( asp.net ) ::阅读:(464次) :: 评论(0) :: 引用(0)
2006 年07 月20日, 星期四
一个简单的分页控件
采用datagrid的默任的分页方式分页,后来发现对于大的数据量速度很慢,net进程占用系统资源也很大,后来写了个分页的存储过程,每次取数据都只取当前页的,分页是分好了,但是发现翻页就没那么方便了,于是自己写了个简单的分页控件,代码如下(编译以后直接形成dll就可以用)。
sample code:
usando el sistema;
usando System.web.ui;
usando System.Web.UI.WebControls;
using system.componentmodel;
namespace pageinfocontrol
{
/// <summary>
///webcustomecontrol1的摘要说明
/// </summary>
[defaultproperty('totalrecord'),toolboxdata('<{0}:pageinfo runat=server></{0}:pageinfo>')]
public class pageinfo:system.web.ui.webcontrols.webcontrol,ipostbackeventhandler
{
#region construct method
/// <summary>
///构造函数
/// </summary>
public pageinfo():base(htmltextwritertag.div)
{
}
#endregion
#region variables and constants
public event eventhandler changepageclick;
private string _barbackgroudcolor='#f1f1f1';
private string _barlinkcolor='navy';
private string _barcurrentcolor='#eeeeee';
private int _totalrecord=0;
private int _totalpage=0;
private int _currentpageindex=1;
private int _itemsize=10;
#endregion
#region properties
[description('分页条背景色'),bindable(true),category('appearance'),defaultvalue('#f1f1f1')]
public string barbackgroundcolor
{
get{return _barbackgroundcolor;}
set{_barbackgroundcolor=value;}
}
[description('分页条带链接数字颜色'),bindable(true),category('appearance'),defaultvalue('navy')]
public string barlinkcolor
{
get{return _barlinkcolor;}
set{_barlinkcolor=value;}
}[description('分页条当前页数字颜色'),bindable(true),category('appearance'),defaultvalue('#eeeeee')]
public string barcurrentcolor
{
get{return _barcurrentcolor;}
set{_barcurrentcolor=value;}
} [description('总记录数'),bindable(false),category('behavior'),defaultvalue(0)]
public int totalrecord
{{
get{return _totalrecord;}
colocar
{
foreach(char c in system.convert.tostring(value))
{
if(!char.isnumber(c)
{
_totalrecord=0;
Romper;
}
_totalrecord=value;
}
} [description('每页显示记录数'),bindable(true),category('behavior'),defaultvalue(0)]
public int pagesize
{
get{return _pagesize;}
colocar
{
foreach(char c in system.convert.tostring(value))
{
if(!char.isnumber(c))
{
_pagesize=0;
Romper;
}
}
_pagesize=value;
}
}[description('总页数'),bindable(true),category('behavior'),defaultvalue(0)]
public int totalpage
{
get{return _totalpage;}
}[description('数字规格'),bindable(true),category('behavior'),defaultvalue(10)]
public int itemsize
{{
get{return _itemsize;}
colocar
{
foreach(char c in system.convert.tostring(value))
{
if(!char.isnumber(c))
{
_itemsize=10;
Romper;
}
}
_itemsize=value;
}
}[description('当前页值'),bindable(true),category('behavior'),defaultvalue(1)]
public int currentpageindex
{
get{return _currentpageindex;}
set{_currentpageindex=value;}
}
#endregion
//定义div的样式
protected override void addattributestorender(htmltextwriter writer)
{
writer.addstyleattribute('white-space','nowrap');
writer.addstyleattribute('padding-top','2px');
writer.addstyleattribute('padding-bottom',2px');
writer.addstyleattribute('width',width.tostring());
writer.addstyleattribute('height',height.tostring());
base.addattributestorender(writer);
}
protected virtual void onpagechangeclick(eventargs e)
{
if(changepageclick!=null)
{
changepageclick(this,e);
}
} public void raisepostbackevent(string eventargument)
{{
int pageindex=int.parse(eventargument);
this._currentpageindex=pageindex;
onpagechangeclick(new eventargs());
}
/// <summary>
///将此控件呈现给指定的输出参数
/// </summary>
///<param name='output'>要写出到的html编写器</param>
protected override void rendercontents(htmltextwriter output)
{this._totalpage=((this.totalrecord/pagesize)*this.pagesize==this.totalrecord)?(this.totalrecord/this.pagesize):((this.totalrecord/this.pagesize)+1);
int beginrecord=(this.currentpageindex-1)*this.pagesize+1;
int endrecord=this.currentpageindex*this.pagesize;
string pageinfo='[共<font color=#cc0000>'+this.totalpage.tostring()+'</font>页/当前第<font color=#cc0000>'+this.currentpageindex.tostring()+'</font>页共<font color=#cc0000>'+totalrecord.tostring()+'</font>条记录,当前记录数<font color=#cc0000>'+begingrecord.tostring()+'</font>到<font color=#cc0000>'+endrecord.tostring()+'</font>]';
string pageliststr='';
string pageindexcolor='#0000c0';
int singlenumber=this.totalpage-(totalpage/itemsize)*itemsize; //得到分页后的尾数(比如:总共58页,按10页规格显示,则尾数为8)
int intpageformax=(this.currentpageindex-1)/itemsize;
int minint=(1+itemsize*intpageformax);
int maxint=((intpageformax+1)*itemsize)>totalpage?totalpage:((intpageformax+1)*itemsize);
if(this.totalrecord==0||this.totalpage==0)
{
pageliststr='<font color='+pageindexcolor+'>0</font>';
pageliststr=pageliststr+'[共<font color=#cc0000>0</font>页/当前第<font color=#cc0000>0</font>页共<font color=#cc0000>0</font>条记录,当前记录数<font color=#cc0000>0</font>到<font color=#cc0000>0</font>]';
output.write(pageliststr);
}
demás
{
if(this.totalpage<=this.itemsize)
{
for(int i=1;i<=totalpage;i++)
{
pageindexcolor=currentpageindex==i?'#cc0000':'#0000c0';
if(currentpageindex==i)
pageliststr=pageliststr+'<a title='当前为第['+i+']页' href='#' id=''+this.uniqueid+''><font color='+pageindexcolor+'>'+i.tostring()+'</font></a>';
demás
pageliststr=pageliststr+'<a title='点击转到第['+i+']页' id=''+this.uniqueid+'' href=' javascript:'+page.getpostbackeventreference(this,i.tostring())+''><font color='+pageindexcolor+'>'+i.tostring()+'</font></a>';
}
pageliststr=pageliststr==''?'<font color='+pageindexcolor+'>0</font>':pageliststr;
pageliststr=pageliststr+''+pageinfo;
output.write(pageliststr);
}
demás
{
for(int i=minint;i<=maxint;i++)
{
pageindexcolor=currentpageindex==i?'#cc0000':'#0000c0';
if(currentpageindex==i)
pageliststr=pageliststr+'<a title='当前为第['+i+']页' href='#' id=''+this.uniqueid+''><font color='+pageindexcolor+'>'+i.tostring()+'</font></a>';
demás
pageliststr=pageliststr+'<a title='点击转到第['+i+']页' id=''+this.uniqueid+'' href=' javascript:'+page.getpostbackeventreference(this,i.tostring())+''><font color='+pageindexcolor+'>'+i.tostring()+'</font></a>';
}
//当当前页数小于itemsize且总的页数大于itemsize时
if(currentpageindex<=itemsize && totalpage>itemsize)
{
pageliststr=pageliststr+'<a id=''+this.uniqueid+'' title='点击转到第['+system.convert.tostring(itemsize+1)+']页' href=' javascript:'+page.getpostbackeventreference(this.system.convert.tostring(itemsize+1))+''>>></a>';
//当当前页数大于itemsize,且总的页数减去当前页数大于等于尾数值页数时
if(this.currentpageindex>itemsize && (totalpage-this.currentpageindex)>=singlenumber)
{
int multiminpageindex=(intpageformax*itemsize);
int multimaxpageindex=((intpageformax+1)*itemsize)+1;
pageliststr='<a id=''+this.uniqueid+'' title='点击转到第['+multiminpageindex+']页' href=' javascrcipt:'+page.getpostbackeventreference(this.multiminpageindex.tostring())+''><<</a>'+pageliststr.trim()+'<a id=''+this.uniqueid+'' title='点击转到第['+multimaxpageindex+']页' href=' javascript:'+page.getpostbackeventreference(this.multimaxpageindex.tostring())+''>>></a>';
}
//当当前页数大于itemsize,且总的页数减去当前页数大于等于尾数值页数时
if(currentpageindex>10 && (totalpage-currentpageindex)<singlenumber)
{
int multiminpageindex=(intpageformax * itemsize);
pageliststr='<a id=''+this.uniqueid+'' title='点击转到第['+multiminpageindex+']页' href=' javascript:'+page.getpostbackeventreference(this,multiminpageindex.tostring ())+''><<</a>'+pageliststr.trim();
}
pageliststr=pageliststr==''?'<font color='+pageindexcolor+'>0</font>':pageliststr;
pageliststr=pageliststr+''+pageinfo;
output.write(pageliststr);
}
}
base.rendercontents(output);
}
}
}
控件中有几个相关的属性,在使用的时候,只需要指定:totalrecord(总记录数)、pagesize(每页的数据记录数)、currentpageindex(当前页面值)、itemsize(分页条显示页面值的规格)
控件中有个changepageclick事件,可以利用“控件id.currentpageindex”属性来获取当前页面值。
注册会员,创建你的web开发资料库,