none
Porque no me pagina como debe ser, en el filtrado ASP.NET C# ? [SOLUCIONADO]

    Question

  • Hola a todos.

    Pues hoy les vengo con un problema que no se por que no me sale como debe ser y es que tengo un gridview con tres paginas:

    Y tengo un DropDownList que me filtra con el evento SelectedIndexChanged, cuando le doy en filtrar la grilla en "Objetos Personales" con el DropDownList sale perfecto con un total de 11 registros:


    Friday, October 19, 2012 9:50 PM

Answers

  • ¡Pero aquí! biene el inconveniente que no entiendo y es cuando le doy a la pagina numero 2 cuando filtro me muestra todos los registros o sea las 3 paginas:

    es que cuando cambias de pagian en el evento PageIndexChanging tienes que volver a recuperar los datos aplciando el filtro

    si cargas el DataSource del grid sin los datos filtroados el paginado se msotrara incorrecto

    o sea el mismo query que usaste en el SelectedIndexChanged tiene que volver aplciarlo en el PageIndexChanging


    Leandro Tuttini

    Blog
    Buenos Aires
    Argentina

    Friday, October 19, 2012 11:25 PM
  • Bueno ya pude resolverlo y si, lo que me decías era cierto. tenia que recuperar los datos que filtraba, entonces lo que hice fue crear un Session[""] y le mando el resultado del filtrado. A un que tenia que cambiar algunas cosas me sale perfecto. Y quedaría de esta forma:

    En el evento SelectedIndexChanged de mi ddl quedaria de la siguiente forma:

    if (ddlFiltrarArticulo.SelectedValue == "")
                {
                    gvObjetos.DataSource = ArticulosList.GetArticulos();
                    gvObjetos.DataBind();
                    Session["ds"] = ArticulosList.GetArticulos();
                }
                else
                {
                    DataTable MiTabla = ArticulosList.GetArticulos();
                    DataTable DT = MiTabla as DataTable;
                    DataView DV = DT.DefaultView;
                    DV.RowFilter = "tipo = '" + ddlFiltrarArticulo.SelectedValue +"'";                
                    gvObjetos.DataSource = DV;
                    gvObjetos.DataBind();
                    Session["ds"] = DV; // Mando el resultado a una Session["ds"].
                }

    Entonces en el evento PageIndexChanging me quedaría de la siguiente forma:

    this.gvObjetos.PageIndex = e.NewPageIndex;
    this.gvObjetos.DataSource = Session["ds"];
    this.gvObjetos.DataBind();

    Eso quiere decir que cada consulta que haga lo mando a la session para que se muestre...

    Monday, October 22, 2012 2:21 PM

All replies

  • ¡Pero aquí! biene el inconveniente que no entiendo y es cuando le doy a la pagina numero 2 cuando filtro me muestra todos los registros o sea las 3 paginas:

    Entonces tengo que poner el DropDownList en blanco y después realizar la búsqueda otra vez para que me salga la pagina que quería al hacer el filtro que en este caso seria por "Objetos Personales":




    Alguien sabe por que me sale esto o es que estoy haciendo algo mal ? se lo agradecería de verdad.

    Friday, October 19, 2012 9:51 PM
  • Alguien sabe por que me sale esto o es que estoy haciendo algo mal ? 

    Al cargar la grilla o tengo que modificar el evento PageIndexChanging ?

    Friday, October 19, 2012 10:47 PM
  • ¡Pero aquí! biene el inconveniente que no entiendo y es cuando le doy a la pagina numero 2 cuando filtro me muestra todos los registros o sea las 3 paginas:

    es que cuando cambias de pagian en el evento PageIndexChanging tienes que volver a recuperar los datos aplciando el filtro

    si cargas el DataSource del grid sin los datos filtroados el paginado se msotrara incorrecto

    o sea el mismo query que usaste en el SelectedIndexChanged tiene que volver aplciarlo en el PageIndexChanging


    Leandro Tuttini

    Blog
    Buenos Aires
    Argentina

    Friday, October 19, 2012 11:25 PM
  • Me estas queriendo decir que tengo que utilizar los dos eventos para que me salga bien el paginado ? pues lo que yo tengo en el evento SelectedIndexChanged es esto:

    if (ddlFiltrarArticulo.SelectedValue == "")
                {
                    gvObjetos.DataSource = ArticulosList.GetArticulos();
                    gvObjetos.DataBind();
                }
                else
                {
                    DataTable MiTabla = ArticulosList.GetArticulos();
                    DataTable DT = MiTabla as DataTable;
                    DataView DV = DT.DefaultView;
                    DV.RowFilter = "tipo = '" + ddlFiltrarArticulo.SelectedValue +"'";
                    gvObjetos.DataSource = DV;
                    gvObjetos.DataBind();
                }

    Como tomaría el resultado del filtro es este caso para mandarlo al PageIndexChanging ?

    Monday, October 22, 2012 12:59 PM
  • Bueno ya pude resolverlo y si, lo que me decías era cierto. tenia que recuperar los datos que filtraba, entonces lo que hice fue crear un Session[""] y le mando el resultado del filtrado. A un que tenia que cambiar algunas cosas me sale perfecto. Y quedaría de esta forma:

    En el evento SelectedIndexChanged de mi ddl quedaria de la siguiente forma:

    if (ddlFiltrarArticulo.SelectedValue == "")
                {
                    gvObjetos.DataSource = ArticulosList.GetArticulos();
                    gvObjetos.DataBind();
                    Session["ds"] = ArticulosList.GetArticulos();
                }
                else
                {
                    DataTable MiTabla = ArticulosList.GetArticulos();
                    DataTable DT = MiTabla as DataTable;
                    DataView DV = DT.DefaultView;
                    DV.RowFilter = "tipo = '" + ddlFiltrarArticulo.SelectedValue +"'";                
                    gvObjetos.DataSource = DV;
                    gvObjetos.DataBind();
                    Session["ds"] = DV; // Mando el resultado a una Session["ds"].
                }

    Entonces en el evento PageIndexChanging me quedaría de la siguiente forma:

    this.gvObjetos.PageIndex = e.NewPageIndex;
    this.gvObjetos.DataSource = Session["ds"];
    this.gvObjetos.DataBind();

    Eso quiere decir que cada consulta que haga lo mando a la session para que se muestre...

    Monday, October 22, 2012 2:21 PM