none
Ordenar un GridView atraves de un DropDownList RRS feed

  • Pregunta

  • Hola necesito de su ayuda, estoy con un proyecto en el cual necesito hacerle filtros al  GridView atraves de un DropDownList estoy trabajando en tres capas, ya tengo creado un metodo que es el de listar los articulos en el  GridView y ahora tengo que ordenarlos cree un método llamado listarXprecio ahora el tema es que definir en el DropDownList para que me tome este nuevo metodo y me los liste en el GridView 
    miércoles, 4 de marzo de 2015 0:40

Respuestas

  • Ok, me cuesta un poquito entenderle porque usted parece ligar el concepto de filtrar con el de ordenar.  Técnicamente hablando no hay vínculo alguno entre el acto de filtrar y el de ordenar.  Son tareas 100% independientes.

    Pero bueno, veo que el DDL se llama ddlPrecio así que imagino que lo que usted llama "filtro" es una lista predeterminada de precios que seguramente se usan en la cláusula WHERE dentro del procedimiento almacenado sp_OrdenarXprecio, que en mi opinión tiene un nombre desafortunado pues pienso que debería ser sp_BuscarXprecio o sp_FiltrarXprecio, a menos claro que esté malentendiendo el asunto.  Usted me dirá cómo ando.

    Para cargar un DDL con la lista de precios, usted debería tener en su capa de datos forma de correr una consulta como SELECT DISTINCT <campo de valor>, <campo de título> FROM ... que sería lo que alimenta al DDL, o algo por el estilo.  Tal vez le podría ayudar más si me muestra un ejemplo de cómo lucen los datos en base de datos y cómo desea que luzcan en el DDL.


    Jose R. MCP
    Code Samples

    • Marcado como respuesta Alexis2494 viernes, 6 de marzo de 2015 4:16
    miércoles, 4 de marzo de 2015 5:07
    Moderador
  • >>Estos son los procedimientos para ordenar el grid view desde el ddl pero que tengo que programarle al ddl para enlazarlo con el grid view

    en el combo deberias definir el evento SeelctedindexChanged y el AutopostBack = true

    entonces usarias

    public void ddlOrden_SelectedIndexChanged(...){ DataTable dt = null; switch(ddlOrden.SeelctedIndex){ case 1: dt = OrdenPrecio(); break; case 2: dt = OrdenCodigo(); break; } gridview1.DataSource = dt; gridview1.DataBind(); }

    public DataTable OrdenPrecio(){

    //aqui invocas a procedure orden precio

    }

    public DataTable OrdenCodigo(){

    //invocas procedure orden codigo

    }

    como veras segun la seleccion invocas a un procedure u otro para devolver los datos que asignas al grid

    saludos


    Leandro Tuttini

    Blog
    MVP Profile
    Buenos Aires
    Argentina

    • Marcado como respuesta Alexis2494 viernes, 6 de marzo de 2015 4:16
    miércoles, 4 de marzo de 2015 17:13
  • Ok, entonces cuénteme:  ¿Cómo lucirían las opciones en el DDL?  ¿Tal vez algo así:  Precio | Categoría?  O sea, 2 items llamados Precio y Categoría.

    Si es así, supongo que no ocupa ninguna consulta de nada.  Simplemente agregue estas opciones al DDL en tiempo de diseño.

            <asp:DropDownList runat="server">
                <asp:ListItem Text="Precio" Value="1"></asp:ListItem>
                <asp:ListItem Text="Categoría" Value="2"></asp:ListItem>
            </asp:DropDownList>
    

    El SelectedValue del DDL será 1 o 2.  Con una sentencia switch (selected value) escoja el nombre del procedimiento almacenado a ejecutar y listo.


    Jose R. MCP
    Code Samples

    • Marcado como respuesta Alexis2494 viernes, 6 de marzo de 2015 4:16
    miércoles, 4 de marzo de 2015 16:50
    Moderador

Todas las respuestas

  • ¿Qué conteine el DDL:  Una lista de filtros, o el nombre de la columna por la cual el usuario indica el ordenamiento?

    Jose R. MCP
    Code Samples

    miércoles, 4 de marzo de 2015 2:43
    Moderador
  • El DDL tendría que contener la lista de filtros para que el Gridview se ordene según que seleccione, el tema es que no se como programarlo para poner todos los filtros juntos en un solo DDL tengo que ordenarlo por precio (menor a mayor ),ordenado por categoría y filtrado por categoría los procedimientos en la base ya los tengo programados  , estoy programando con c# en tres capas, lo que utilice por ahora es este código pero no me sirve porque en el DDL me aparece toda la colección que tengo en artículos y solo lo que quiero que aparezca es el nombre del filtro y programandolo así ademas tengo que hacerlo con 3 DDL  

    protected void Page_Load(object sender, EventArgs e)
        {
            if (!Page.IsPostBack)
            {
                CargarDatos();
                CargarTipos();
            }
        }

       private void CargarDatos()
        {
            ArrayList colArticulos = new ArrayList();
            rArticulo objArticulos = new rArticulo();
            colArticulos = objArticulos.Listar();

            GridView1.DataSource = colArticulos;
            GridView1.DataBind();

        }
        private void CargarTipos()
        {



            rArticulo objArticulos = new rArticulo();
            ArrayList colArticulos = new ArrayList();
            colArticulos = objArticulos.ListarXprecio();
            ddlPrecio.DataSource = colArticulos;


            ddlPrecio.DataTextField = "Precio";

            ddlPrecio.DataValueField = "codigo";
            ddlPrecio.DataBind();

        }

     protected void ddlPrecio_SelectedIndexChanged(object sender, EventArgs e)
        {
            rArticulo objArticulos = new rArticulo();
            Articulo unArticulo = objArticulos.Cargar("sp_OrdenarXprecio ", ddlPrecio.SelectedValue);
            ArrayList colArticulos = new ArrayList();
            colArticulos = objArticulos.ListarXprecio();
            GridView1.DataSource = colArticulos;
            GridView1.DataBind();
        }

    miércoles, 4 de marzo de 2015 3:18
  • Ok, me cuesta un poquito entenderle porque usted parece ligar el concepto de filtrar con el de ordenar.  Técnicamente hablando no hay vínculo alguno entre el acto de filtrar y el de ordenar.  Son tareas 100% independientes.

    Pero bueno, veo que el DDL se llama ddlPrecio así que imagino que lo que usted llama "filtro" es una lista predeterminada de precios que seguramente se usan en la cláusula WHERE dentro del procedimiento almacenado sp_OrdenarXprecio, que en mi opinión tiene un nombre desafortunado pues pienso que debería ser sp_BuscarXprecio o sp_FiltrarXprecio, a menos claro que esté malentendiendo el asunto.  Usted me dirá cómo ando.

    Para cargar un DDL con la lista de precios, usted debería tener en su capa de datos forma de correr una consulta como SELECT DISTINCT <campo de valor>, <campo de título> FROM ... que sería lo que alimenta al DDL, o algo por el estilo.  Tal vez le podría ayudar más si me muestra un ejemplo de cómo lucen los datos en base de datos y cómo desea que luzcan en el DDL.


    Jose R. MCP
    Code Samples

    • Marcado como respuesta Alexis2494 viernes, 6 de marzo de 2015 4:16
    miércoles, 4 de marzo de 2015 5:07
    Moderador
  • hola

    no entiendo la logica que aplicas, porque haces esto

    Articulo unArticulo = objArticulos.Cargar("sp_OrdenarXprecio ", ddlPrecio.SelectedValue);

    para obtener un articulo que despues no usas en ningun lado ?

    ----

    despues usas

    colArticulos = objArticulos.ListarXprecio();

    pero un ArrayList de verdad ? eso quedo en la historia, deberias usar un List<Articulo> para tener una lista tipada de tu objeto

    ademas a ListarXprecio() no veo que le apliques ningun filtro

    [ASP.NET] GridView – Edición Empleados

    analiza la capa de datos del articulo

    saludos


    Leandro Tuttini

    Blog
    MVP Profile
    Buenos Aires
    Argentina

    miércoles, 4 de marzo de 2015 10:35
  • create proc sp_OrdenarXprecio1 

    AS
    select * from Articulos  order by Precio asc 
    -----------------
    -- Ordenado por Categoria
    ------------------
    create procedure sp_OrdenarXcat
    AS
    select * from Articulos order by Codigo

    Estos son los procedimientos para ordenar el grid view desde el ddl pero que tengo que programarle al ddl para enlazarlo con el grid view 

    miércoles, 4 de marzo de 2015 16:28
  • Ok, entonces cuénteme:  ¿Cómo lucirían las opciones en el DDL?  ¿Tal vez algo así:  Precio | Categoría?  O sea, 2 items llamados Precio y Categoría.

    Si es así, supongo que no ocupa ninguna consulta de nada.  Simplemente agregue estas opciones al DDL en tiempo de diseño.

            <asp:DropDownList runat="server">
                <asp:ListItem Text="Precio" Value="1"></asp:ListItem>
                <asp:ListItem Text="Categoría" Value="2"></asp:ListItem>
            </asp:DropDownList>
    

    El SelectedValue del DDL será 1 o 2.  Con una sentencia switch (selected value) escoja el nombre del procedimiento almacenado a ejecutar y listo.


    Jose R. MCP
    Code Samples

    • Marcado como respuesta Alexis2494 viernes, 6 de marzo de 2015 4:16
    miércoles, 4 de marzo de 2015 16:50
    Moderador
  • >>Estos son los procedimientos para ordenar el grid view desde el ddl pero que tengo que programarle al ddl para enlazarlo con el grid view

    en el combo deberias definir el evento SeelctedindexChanged y el AutopostBack = true

    entonces usarias

    public void ddlOrden_SelectedIndexChanged(...){ DataTable dt = null; switch(ddlOrden.SeelctedIndex){ case 1: dt = OrdenPrecio(); break; case 2: dt = OrdenCodigo(); break; } gridview1.DataSource = dt; gridview1.DataBind(); }

    public DataTable OrdenPrecio(){

    //aqui invocas a procedure orden precio

    }

    public DataTable OrdenCodigo(){

    //invocas procedure orden codigo

    }

    como veras segun la seleccion invocas a un procedure u otro para devolver los datos que asignas al grid

    saludos


    Leandro Tuttini

    Blog
    MVP Profile
    Buenos Aires
    Argentina

    • Marcado como respuesta Alexis2494 viernes, 6 de marzo de 2015 4:16
    miércoles, 4 de marzo de 2015 17:13
  • La pregunta ahora es como invoco al procedure  ya que estoy trabajando en capas 
    miércoles, 4 de marzo de 2015 17:43
  • Pues según el código que usted ha mostrado anteriormente, veo que la llamada a objArticulos.Cargar() acepta el nombre del procedimiento almacenado.  En vez de pasar un nombre, pase una variable cuyo contenido se maneja con un switch(selected value del DDL).

    ¿O ha variado su capa de datos desde que nos mostró ese código?


    Jose R. MCP
    Code Samples

    miércoles, 4 de marzo de 2015 17:48
    Moderador
  • No eh variado la capa de datos

    public DataTable OrdenPrecio(){

    rArticulo objArticulos = new rArticulo();

            Articulo unArticulo = objArticulos.Cargar("sp_OrdenarXprecio", ddlOrden.SelectedValue);

    }

    public DataTable OrdenCodigo(){

    //invocas procedure orden codigo

    }

    Mi duda es que programarle a estos metodos para que me devuelva el valor invocando el procedure atraves del metodo cargar y ademas que mas tengo que programar, con un ejemplo me ayudaria a entenderlo



        
    miércoles, 4 de marzo de 2015 18:10
  • No tendría que programar nada más, creo yo.  El switch() seleccionará el procedimiento almacenado correcto y todo lo demás es el mismo código.  Pruébelo y determine si de verdad falta algo o no.

    Jose R. MCP
    Code Samples

    miércoles, 4 de marzo de 2015 18:29
    Moderador