Problema con paginacion de DataGrid

17/04/2006 - 10:40 por Elecktrus | Informe spam
Hola a todos:
Tengo un problema con un datagrid dentro de un webpart en SPS 2003 (Portal).

El datagrid me muestra los datos, pero cuando le doy a los controles de
avanzar/retroceder la pagina NO dispara el evento, y por tanto no pagina.
A continuacion, os muestro el codigo :

protected override void CreateChildControls()
{
grid = new DataGrid();
grid.AutoGenerateColumns = false;
grid.GridLines = GridLines.None;
grid.AllowPaging=true;
grid.PageSize=2;
grid.EnableViewState=true;
grid.PageIndexChanged += new
DataGridPageChangedEventHandler(grid_PageIndexChanged);
Controls.Add(grid);

//aqui irian los datos de las columnas no los incluyo por ser muy largos


protected override void RenderWebPart(HtmlTextWriter output)
{

Rellenar(); //aqui hago el data bind
output.Write("<TABLE>");
output.Write("<TR>");
output.Write("<TD>");
grid.RenderControl(output);
output.Write("</TD>");
output.Write("</TR>");
output.Write("</TABLE>");
}

//este es el evento que NO se dispara
private void grid_PageIndexChanged(Object sender,
DataGridPageChangedEventArgs e)
{

try
{
messages.Text +=" evento ";
grid.CurrentPageIndex = e.NewPageIndex;
Rellenar();
}
catch(Exception err)
{
messages.Text += err.Message;

}
}

Por si os sirve de pista, os dire que he probado lo siguiente:
- si el metodo Rellenar (el que hace la query y la asocia al data grid) lo
pongo dentro del createchildcontrol, muestra el datagrid con datos la primera
vez, pero al paginar, no muestra datos (la consulta siempre me devuelve
datos, lo he comprobado)
- si el metodo Rellenar lo pongo en el Render (como esta ahora), siempre me
muestra los datos, pero siempre los mismos, es decir NO pagina

En cualquiera de los 2 casos, he puesto trazas, y nunca se activan. Es
decir, es como si no se llamara nunca al evento. En la pagina html generada
me coloca una funcion javascript del tipo _dopostback($MiddleZone)

¿sabeis si hay que hacer algo especial para que se dispare el evento? En una
pagina asp.net funciona asi perfectamente.

Por cierto, si alguien tiene un ejemplo de datagrid con paginacion que
fucnione, me vendría muy bien
Muchas Gracias
PD: Tengo aspnet 1.1, sql2000 y el sp2 de WSS y SPS
 

Leer las respuestas

#1 francisco
17/04/2006 - 16:01 | Informe spam
El dataBind solo lo debes de invocar sino se ha hecho una recarga de la
página, es decir, solo al cargarse la página por primera vez sino los eventos
asociados al datagrid no se lanzan.
Sería algo así:
if (!this.Page.IsPostback)
grid.DataBind();

Suerte.


"Elecktrus" escribió:

Hola a todos:
Tengo un problema con un datagrid dentro de un webpart en SPS 2003 (Portal).

El datagrid me muestra los datos, pero cuando le doy a los controles de
avanzar/retroceder la pagina NO dispara el evento, y por tanto no pagina.
A continuacion, os muestro el codigo :

protected override void CreateChildControls()
{
grid = new DataGrid();
grid.AutoGenerateColumns = false;
grid.GridLines = GridLines.None;
grid.AllowPaging=true;
grid.PageSize=2;
grid.EnableViewState=true;
grid.PageIndexChanged += new
DataGridPageChangedEventHandler(grid_PageIndexChanged);
Controls.Add(grid);

//aqui irian los datos de las columnas no los incluyo por ser muy largos


protected override void RenderWebPart(HtmlTextWriter output)
{

Rellenar(); //aqui hago el data bind
output.Write("<TABLE>");
output.Write("<TR>");
output.Write("<TD>");
grid.RenderControl(output);
output.Write("</TD>");
output.Write("</TR>");
output.Write("</TABLE>");
}

//este es el evento que NO se dispara
private void grid_PageIndexChanged(Object sender,
DataGridPageChangedEventArgs e)
{

try
{
messages.Text +=" evento ";
grid.CurrentPageIndex = e.NewPageIndex;
Rellenar();
}
catch(Exception err)
{
messages.Text += err.Message;

}
}

Por si os sirve de pista, os dire que he probado lo siguiente:
- si el metodo Rellenar (el que hace la query y la asocia al data grid) lo
pongo dentro del createchildcontrol, muestra el datagrid con datos la primera
vez, pero al paginar, no muestra datos (la consulta siempre me devuelve
datos, lo he comprobado)
- si el metodo Rellenar lo pongo en el Render (como esta ahora), siempre me
muestra los datos, pero siempre los mismos, es decir NO pagina

En cualquiera de los 2 casos, he puesto trazas, y nunca se activan. Es
decir, es como si no se llamara nunca al evento. En la pagina html generada
me coloca una funcion javascript del tipo _dopostback($MiddleZone)

¿sabeis si hay que hacer algo especial para que se dispare el evento? En una
pagina asp.net funciona asi perfectamente.

Por cierto, si alguien tiene un ejemplo de datagrid con paginacion que
fucnione, me vendría muy bien
Muchas Gracias
PD: Tengo aspnet 1.1, sql2000 y el sp2 de WSS y SPS

Preguntas similares