07/04/2008, 14:42
|
| | Fecha de Ingreso: noviembre-2007 Ubicación: Trabajo en INEGI
Mensajes: 33
Antigüedad: 17 años, 1 mes Puntos: 0 | |
Re: Paginacionn del gridview. Ok amigo espero te pueda servir este codigo ...
en la parte de html, yo tengo lo siguiete
defino una tabla para los titulos
<table borderColor="#006599" cellSpacing="0" cellPadding="0" width="98%" bgColor="#e7eef5" border="1">
<tr>
<td class="txt_azul_9b" style="BORDER-RIGHT: #e7eef5 1px solid; BORDER-TOP: #006599 1px solid; BORDER-LEFT: #006599 1px solid; BORDER-BOTTOM: #006599 1px solid" align="center" width="14%">Clave</td>
<td class="txt_azul_9b" style="BORDER-RIGHT: #e7eef5 1px solid; BORDER-TOP: #006599 1px solid; BORDER-LEFT: #006599 1px solid; BORDER-BOTTOM: #006599 1px solid" align="left" width="70%"> Catálogo de Productos</td>
</table>
<table cellSpacing="0" cellPadding="0" width="100%" border="0">
<tr >
<td> </td></tr>
<tr><td vAlign="top">
defino un area para poner el grid con scroll
<div style=" BORDER-RIGHT:#006599 1px solid; BORDER-TOP:#006599 1px solid; BORDER-LEFT:#006599 1px solid; BORDER-BOTTOM:#006599 1px solid; WIDTH:99%; HEIGHT:330px; overflow:scroll">
<asp:DataList ID="MyProducto" runat="server" GridLines="None" Width="100%" OnItemDataBound="MyProducto_ItemDataBound" CellPadding="0">
<ItemTemplate>
<table cellSpacing="0" cellPadding="0" width="100%" align="center" border="0">
<tr>
<td vAlign="top" align="center" width="15%"> <asp:Label CssClass="txt_negro_9" id="upc" runat="server"></asp:Label></td>
<td vAlign="top" align="left" width="81%"> <asp:Label id="titulo" CssClass="txt_negro_9" runat="server"></asp:Label></td>
</tr>
</table>
</ItemTemplate>
<AlternatingItemStyle BackColor="White" HorizontalAlign="Center" VerticalAlign="Top" />
<ItemStyle BackColor="White" HorizontalAlign="Center" VerticalAlign="Top" Wrap="False" />
</asp:DataList>
</div></td>
</tr>
</table>
defino una tabla para encapsular la paginacion personal
<table cellSpacing="0" cellPadding="0" width="100%" align="center" border="0">
<tr>
<td width="45%"> </td>
<td width="55%"> </td>
</tr>
<tr>
<td class="txt_negro_9b">
defino el area donde voy a crear la paginación
<asp:Panel ID="PanelPaginacion" runat="server" Width="100%"></asp:Panel></td>
<td><asp:Button id="Button1" runat="server" Text="Asignar" ToolTip="Asigna los productos que se encuentran marcados al escaparate de la Tienda Virtual." OnClick="Button1_Click"></asp:Button></td>
</tr>
</table>
utilizo una base de datos sql-server 2005 y genere un procedimiento almacenado para paginar de forma efectiva
@PageNumber int
AS
SELECT
res.RowNumber, res.upc, res.titulo, substring(res.disponibilidad,3,1) as disponibilidad
FROM (
SELECT
ROW_NUMBER() OVER (ORDER BY p.upc ) AS RowNumber,
isnull(p.upc,'000000000000') as upc,
isnull(p.titulo,'nulo') as titulo,
isnull(p.disponibilidad,'00000') as disponibilidad
From esquema.tabla p
Where p.prod_liberado=1 and substring(p.disponibilidad,3,1)=1) AS res
WHERE RowNumber BETWEEN 25 * @PageNumber + 1
AND 25 * (@PageNumber + 1)
el parametro es la pagina que se quiere mostrar y solo regresa 25 registros cada vez
en webconfig
<appSettings>
<add key="PageSize" value="25"/>
</appSettings>
public static readonly int PageSize = Int32.Parse(ConfigurationManager.AppSettings.Get(" PageSize"));
private int TotalRowCount
{
get {
object o = ViewState["TotalRowCount"];
if (o == null)
return -1;
else
return (int)o;
}
set { ViewState["TotalRowCount"] = value; }
}
private int PageCount
{
get {
if (TotalRowCount <= 0 || TotalRowCount <= PageSize)
return 1;
else
return ((TotalRowCount + PageSize) - 1) / PageSize;
}
}
private int PageIndex
{
get {
if (!string.IsNullOrEmpty(Request.QueryString["pageIndex"]))
return Convert.ToInt32(Request.QueryString["pageIndex"]);
else
return 0;
}
}
protected void pintaPaginas(int tope)
{
this.PanelPaginacion.Controls.Clear();
CControles CWeb = new CControles();
if (tope > 10)
{
this.PanelPaginacion.Controls.Add(CWeb.Boton_image n("FirstPage", "~/img/primer.png", urlDestino(0)));
this.PanelPaginacion.Controls.Add(CWeb.Agrega_labe l("txt_blanco_8", "."));
this.PanelPaginacion.Controls.Add(CWeb.Boton_image n("PrevPage", "~/img/antes.png", urlDestino(tope - 11)));
this.PanelPaginacion.Controls.Add(CWeb.Agrega_labe l("txt_blanco_8", "."));
}
this.PanelPaginacion.Controls.Add(CWeb.Agrega_labe l("txt_negro_9", "[ Página "));
for (int i = tope - 9; i <= tope && i <= PageCount; i++)
{
this.PanelPaginacion.Controls.Add(CWeb.Agrega_Link (i.ToString(), "default.aspx?pageIndex=" + i.ToString()));
this.PanelPaginacion.Controls.Add(CWeb.Agrega_labe l("txt_blanco_8", "."));
}
this.PanelPaginacion.Controls.Add(CWeb.Agrega_labe l("txt_negro_9", "de " + PageCount.ToString() + " ]"));
if (tope < PageCount)
{
this.PanelPaginacion.Controls.Add(CWeb.Agrega_labe l("txt_blanco_8", "."));
this.PanelPaginacion.Controls.Add(CWeb.Boton_image n("NextPage", "~/img/siguiente.png", urlDestino(tope + 1)));
this.PanelPaginacion.Controls.Add(CWeb.Agrega_labe l("txt_blanco_8", "."));
this.PanelPaginacion.Controls.Add(CWeb.Boton_image n("LastPage", "~/img/ultimo.png", urlDestino(PageCount)));
}
}
protected void Page_Load(object sender, EventArgs e)
{
if (!this.Page.IsPostBack)
TotalRowCount = (int)SqlHelper.ExecuteScalar(SqlHelper.ConnectionS tringLocalTransaction, CommandType.Text, "Select count(*) From esquema.tabla ", null);
if (this.Page.Request.Params["pageIndex"] == null)
this.MyProducto.DataSource = tbl.GetLN_Admon_TV_pagina(0);
else
this.MyProducto.DataSource = tbl.GetLN_Admon_TV_pagina(this.Page.Request.Params["pageIndex"] );
this.MyProducto.DataBind();
if (PageCount > 1)
this.pintaPaginas(((this.PageIndex / 10) + 1) * 10);
}
espero te sirva |