Retroceder   Foros del Web > Programación para sitios web > .NET

Respuesta
 
Herramientas Desplegado
Antiguo 26-oct-2004, 11:13   #1 (permalink)
Zyanya_80 ha deshabilitado el karma
 
Fecha de Ingreso: septiembre-2004
Mensajes: 195
Busqueda como paginar un repeater

Explico mejor la cuestión.

Lo que pasa es que lleno un repeater con un DataTable, pero este es llenado hasta que se da un click en un boton.

He encontrado ejemplos de paginación pero esta la realizan desde el pageLoad y yo la requiero hasta despues de llenar el Repeater con los resultados.

Como puedo hacer para paginar despues de que se da el click y el repeater ya trae todos los resultados.

Enseguida escribo un poco de codigo para que sea un poco mas claro lo que deseo:

DataTable dt = new DataTable();
DataRow dr;
dt.Columns.Add(new DataColumn("consTemas"));
.
.
.
.
.
dt.Columns.Add(new DataColumn(N));
dr = dt.NewRow();
dr[0] = Result.GetValue(i,0);
.
.
.
.
dr[0] = Result.GetValue(n,n);

Para paginar hasta ahorita hago lo siguiente:


PagedDataSource objPds = new PagedDataSource();
objPds.DataSource = new DataView(dt);
objPds.AllowPaging = true;
objPds.PageSize = 10;
int CurPage;
if (Request.QueryString["Page"] != null)
CurPage=Convert.ToInt32(Request.QueryString["Page"]);
else
CurPage=1;
objPds.CurrentPageIndex = CurPage-1;
if (objPds.IsFirstPage)
lnkPrev.NavigateUrl=Request.CurrentExecutionFilePa th + "?Page=" + Convert.ToString(CurPage-1);

if (!objPds.IsLastPage)
lnkNext.NavigateUrl=Request.CurrentExecutionFilePa th+ "?Page=" + Convert.ToString(CurPage+1);

Repeater1.DataSource=objPds;
Repeater1.DataBind();

Esto si me ayuda a paginar pero lo realiza una sola vez y solo me muestra los 10 primeros resultados. Como puedo hacer para que me muestre todos los demas.

Espero que me puedan ayudar ya que lo necesito urgentemente.

Muchas gracias y espero su respuesta
Zyanya_80 está desconectado   Responder Citando
Antiguo 27-oct-2004, 09:48   #2 (permalink)
Moderador
RootK llegará a ser famoso muy prontoRootK llegará a ser famoso muy pronto
 
Avatar de RootK
 
Fecha de Ingreso: noviembre-2002
Ubicación: México D.F
Mensajes: 7.552
Enviar un mensaje por MSN a RootK
Si estas usando la clase PagedDataSource(); para ir a la página siguiente checa la propiedad:

Cita:
objPaged.CurrentPageIndex = iPage
Donde puede ser cualquier valor entero, dependiendo de tu boton siguiente o anterior.

Al parecer estás usando un hyperlink para ir a la siguiente o anterior y lo haces por el método Get, te recominiendo que mejor uses un LinkButton (para hacer postback y no un load de page) y guardes por ejemplo en una label la CurrentPage y si es anterior le sumes a ese valor actual 1 en caso contrario -1, con ello te ahorras el Request.QueryString["Page"].


Salu2
__________________
Nadie roba nada ya que en la vida todo se paga . . .
RootK está desconectado   Responder Citando
Antiguo 27-oct-2004, 15:03   #3 (permalink)
Zyanya_80 ha deshabilitado el karma
 
Fecha de Ingreso: septiembre-2004
Mensajes: 195
Pregunta

Hola Rootk.
Como siempre agradeciendo tu respuesta.

No entiendo muy bien como utilizar el LinkButton, es que la verdad no tengo mucha experiencia en .NET y apenas comienzo a conocer el repeater.

Lo que entendi fue lo siguiente:

tengo las siguientes lineas de codigo:

PagedDataSource objPds = new PagedDataSource();
objPds.DataSource = new DataView(dt);
objPds.AllowPaging = true;
objPds.PageSize = 10;
int CurPage;

en CurPage guardo CurrentPageIndex y lo asigno a un Label no a el LinkButton o si?

después debo hacer lo siguiente:

si CurrentPageIndex = LinkButtonPrevio entonces CurPage-1
si no CurPage+1


eso es lo que yo entiendo pero no muy claramente espero que tu o alguien mas me pueda ayudar y muchas gracias.
Zyanya_80 está desconectado   Responder Citando
Antiguo 27-oct-2004, 15:46   #4 (permalink)
Moderador
RootK llegará a ser famoso muy prontoRootK llegará a ser famoso muy pronto
 
Avatar de RootK
 
Fecha de Ingreso: noviembre-2002
Ubicación: México D.F
Mensajes: 7.552
Enviar un mensaje por MSN a RootK
Mira éste post donde puse un ejemplo usando un datalist.

Ejemplo para moverse entre registro con asp.net

Solo adaptalo a tu repeater..

Yo hago la paginacion de forma diferente, pero te podrá servir.

Si sigues con dudas por aqui andamos..
RootK está desconectado   Responder Citando
Antiguo 04-nov-2004, 10:19   #5 (permalink)
Zyanya_80 ha deshabilitado el karma
 
Fecha de Ingreso: septiembre-2004
Mensajes: 195
Pregunta Continuo con problemas para paginar

Hola Rootk:

Fijate que continuo con los problemas para paginar te explico lo que estoy haciendo de acuerdo al ejemplo que esta en la liga y lo que yo realizo en mi programa.

En mi código:

private void Page_Load(object sender, System.EventArgs e)
{
if(!IsPostBack)
{
intPageSize.Text="10";
intCurrIndex.Text="0";
Bin();
}
}

private void Button1_Click(object sender, System.EventArgs e)
{
Result =(strResult.SeleccionaSeccionBusqueda(strSecBus,st rTexto,metodoBus,ent,Repos,inAnalogias,cveNiv,repo s));
// Result es un vector de 11 columnas y un número variable de renglones

Bin();
}

private void Bin()
{
DataTable dt = new DataTable();
DataRow dr;
dt.Columns.Add(new DataColumn("consTemas"));
dt.Columns.Add(new DataColumn("cveNivel"));
dt.Columns.Add(new DataColumn("cveEntidad"));
dt.Columns.Add(new DataColumn("urlDato"));
dt.Columns.Add(new DataColumn("urlMetadato"));
dt.Columns.Add(new DataColumn("cveRepositorio"));
dt.Columns.Add(new DataColumn("nodo"));
dt.Columns.Add(new DataColumn("nodoTrabajo"));
dt.Columns.Add(new DataColumn("imagen"));
dt.Columns.Add(new DataColumn("hintDato"));
dt.Columns.Add(new DataColumn("descr"));
int tem =Result.Length/11;

for (i= 0; i < tem; i++)
{
dr = dt.NewRow();
dr[0] = Result.GetValue(i,0);
dr[1] = Result.GetValue(i,1);
dr[2] = Result.GetValue(i,2);
dr[3] = Result.GetValue(i,3);
dr[4] = Result.GetValue(i,4);
dr[6] = Result.GetValue(i,6);
dr[7] = Result.GetValue(i,7);
dr[8] = Result.GetValue(i,8);
dr[9] = Result.GetValue(i,9);
dr[10] = Result.GetValue(i,10);
dt.Rows.Add(dr);
}
if(intCurrIndex.Text == "0")
{hrefPrevious.Visible = false;}
else{hrefPrevious.Visible= true;}
intRecordCount.Text = new DataView(dt).Count.ToString();
Repeater1.DataSource = new DataView(dt);
Repeater1.DataBind();
}

private void hrefFirst_Click(object sender, System.EventArgs e)
{
intCurrIndex.Text = "0";
Bin();
}

private void hrefPrevious_Click(object sender, System.EventArgs e)
{
int conv = Convert.ToInt32(intCurrIndex.Text);
int pag = Convert.ToInt32(intPageSize.Text);
int resta = conv - pag;
intCurrIndex.Text = resta.ToString();
if(conv < 0)
{intCurrIndex.Text="0";}
Bin();
}

private void hrefNext_Click(object sender, System.EventArgs e)
{
int conv = Convert.ToInt32(intCurrIndex.Text);
int pag = Convert.ToInt32(intPageSize.Text);
int recor = Convert.ToInt32(intRecordCount.Text);
int suma = conv + pag;
if(conv + 1 < recor)
{intCurrIndex.Text = suma.ToString();}
Bin();
}

private void hrefLast_Click(object sender, System.EventArgs e)
{
int tmpInt=0;
int conv = Convert.ToInt32(intCurrIndex.Text);
int pag = Convert.ToInt32(intPageSize.Text);
int recor = Convert.ToInt32(intRecordCount.Text);
tmpInt = recor % pag;
int residuo = conv - tmpInt;
int resta =0;
int resta2=0;
if(tmpInt > 0)
{
resta = recor - tmpInt;
resta2 = recor - pag;
intCurrIndex.Text = resta.ToString();}
else{intCurrIndex.Text = resta2.ToString();}
}


Si te fijas te digo que con referencia a tu codigo tambien por que ya lo incluyo.

Espero que me puedas a yudar para entender que es lo que hago mal ya que quiero que me despliege la primera vez solo 10 resultados y despues de dar un click en cualquiera de los demas botones pues la funcionalidad de cada uno de ellos

Muchas gracias y espero tu respuesta
Zyanya_80 está desconectado   Responder Citando
Antiguo 04-nov-2004, 10:36   #6 (permalink)
Moderador
RootK llegará a ser famoso muy prontoRootK llegará a ser famoso muy pronto
 
Avatar de RootK
 
Fecha de Ingreso: noviembre-2002
Ubicación: México D.F
Mensajes: 7.552
Enviar un mensaje por MSN a RootK
Y cual es el code que tienes en tu HTML ?
RootK está desconectado   Responder Citando
Antiguo 04-nov-2004, 10:51   #7 (permalink)
Moderador
RootK llegará a ser famoso muy prontoRootK llegará a ser famoso muy pronto
 
Avatar de RootK
 
Fecha de Ingreso: noviembre-2002
Ubicación: México D.F
Mensajes: 7.552
Enviar un mensaje por MSN a RootK
Ahh..ok.. creo que ya ví el detalle, lo que pasa es que tu estás llenando tu datatable de forma manual y el ejemplo que puse lo hice un dataAdapter y por eso podía paginar.., pero de todas formas tambien lo puedes hacer de la forma en que tu lo necesitas con algunas modificaciones:

Ejemplo:

Si ya tengo mi DataTable lleno (dt) puedo usar otro temporal que es el que voy a llenar dependiendo del tamaño.

Algo como ésto:

Cita:
Dim dtTemp as DataTable = dt.Clone()
'Veo el índice actual
For i = CInt(intCurrIndex.Text) To Cint(intPageSize.Text)
dtTemp.ImportRow(dt.Rows(i))
Next

Repeater1.DataSource = dtTemp
Repeater1.DataBind()
Esa es la idea general (es lo principal), creo que con eso ya será suficiente para que hagas tu paginacion, es cosa de adaptarlo, piensale un poco y verás que no será dificil..

Saludos y suerte
RootK está desconectado   Responder Citando
Antiguo 04-nov-2004, 10:54   #8 (permalink)
Zyanya_80 ha deshabilitado el karma
 
Fecha de Ingreso: septiembre-2004
Mensajes: 195
Hola:

es el siguiente:

<%@ Import Namespace="System.Data" %>
<%@ import namespace="System.Data.OleDb" %>
<%@ Page language="c#" Codebehind="Resultados.aspx.cs" AutoEventWireup="false" Inherits="BuscadorNET.Resultados" %>
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0 Transitional//EN" >
<HTML>
<HEAD>
<title>Resultados</title>
<meta content="Microsoft Visual Studio .NET 7.1" name="GENERATOR">
<meta content="C#" name="CODE_LANGUAGE">
<meta content="http://schemas.microsoft.com/intellisense/ie5" name="vs_targetSchema">
</HEAD>
<body>
<form id="Form1" method="post" runat="server">
<br>
<asp:panel id="Panel1" style="Z-INDEX: 101; LEFT: 16px; POSITION: absolute; TOP: 64px" runat="server"
Width="100%" Height="499px">
<TABLE style="WIDTH: 472px; HEIGHT: 40px" cellSpacing="1" cellPadding="1" width="472" border="1">
<TR>
<TD style="WIDTH: 52.72%" align="left" height="40">
<asp:TextBox id="TxBPalabra1" runat="server"></asp:TextBox>
<asp:Button id="Button1" runat="server" Text="Buscar"></asp:Button>
<asp:RequiredFieldValidator id="RequiredFieldValidator1" runat="server" ControlToValidate="TxBPalabra1" ErrorMessage="RequiredFieldValidator">El texto de busqueda no ha sido proporcionado</asp:RequiredFieldValidator></TD>
</TR>
</TABLE>

<asp:repeater id="Repeater1" runat="server">
<ItemTemplate>
<table cellpadding="0" cellspacing="0" border="0" width="100%">
<tr>
<td><%#((DataRowView) Container.DataItem) [5]%></td>
<td><%#((DataRowView) Container.DataItem) [10]%></td>
</tr> </table>
</ItemTemplate>
<HeaderTemplate>
</HeaderTemplate>
<FooterTemplate>
</FooterTemplate>
</asp:repeater>
</asp:panel>
</form>
</body>
</HTML>


espero que esto te sea un poco mas claro, aunque fantan otros componenetes que utilizo en la forma pero que no creo que tenga mucha importancia ponerlos ya que son botones y listas desplegables

Bueno aqui esta y espero tu respuesta, gracias.
Zyanya_80 está desconectado   Responder Citando
Antiguo 04-nov-2004, 10:55   #9 (permalink)
Moderador
RootK llegará a ser famoso muy prontoRootK llegará a ser famoso muy pronto
 
Avatar de RootK
 
Fecha de Ingreso: noviembre-2002
Ubicación: México D.F
Mensajes: 7.552
Enviar un mensaje por MSN a RootK
Cita:
Hola:

es el siguiente:
Ya leíste mi respuesta..?? te la acabo de poner..
RootK está desconectado   Responder Citando
Antiguo 09-nov-2004, 14:09   #10 (permalink)
Zyanya_80 ha deshabilitado el karma
 
Fecha de Ingreso: septiembre-2004
Mensajes: 195
Alegría Otro problema con al paginación

Hola RootK:

Ya lei tu respuesta muchas gracias fijate que resolvi el problema, pero ahora lo que pretendo es que no solo tenga la funcionalidad del next y Prev sino que me despliege las siguientes 10 paginas, las ultimas 10, que me muestre:
1-2-3-4-5-6-7-8-9-10.... y asi sucesivamente dependiendo del numero de paginas.

perdon yo se que ya di mucha lata pero en realidad lo necesito mucho.

lo que realizo hasta el momento es lo siguiente:

PagedDataSource objPds = new PagedDataSource();
DataView source = (DataView)Cache["Mycache"];
if(source == null)
{
source = new DataView(dt);
Cache["Mycache"] = source;
}
objPds.DataSource = source;
objPds.AllowPaging = true;

int CurPage = 1;
if (Request.QueryString["Page"] != null)
{CurPage=Convert.ToInt32(Request.QueryString["Page"]);}
else{CurPage = 1;}
objPds.CurrentPageIndex = CurPage - 1;
lblCurrentPage.Text = "Page: " + CurPage.ToString() + "de " + objPds.PageCount.ToString();
if (!objPds.IsFirstPage)
{
lnkPrev.NavigateUrl = Request.CurrentExecutionFilePath + "?Page=" + Convert.ToString(CurPage-1);
}
if (!objPds.IsLastPage)
{
lnkNext.NavigateUrl = Request.CurrentExecutionFilePath + "?Page=" + Convert.ToString(CurPage+1);
}
Repeater1.DataSource=objPds;
Repeater1.DataBind();

Espero que sea lo ultimo con lo que tenga problemas y muchas gracias por tomarte la molestia de contestar.
Zyanya_80 está desconectado   Responder Citando
Respuesta

No hay votos aún.


Herramientas
Desplegado

Normas de Publicación
No puedes crear nuevos temas
No puedes responder temas
No puedes subir archivos adjuntos
No puedes editar tus mensajes

BB code is Activado
Caritas están Activado
[IMG] está Activado
Código HTML está Desactivado


La Zona horaria es GMT -6. Ahora son las 20:46.


Message Board Statistics

LinkBacks Enabled by vBSEO 3.1.0

1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93