none
filtrar gridview asp.net mejores prácticas RRS feed

  • Pregunta

  • Hola:

    Actualmente estoy desarrollando un proyecto con asp.net 4, c# y sql server 2008, en una de las paginas de mi proyecto quiero mostrar un gridview que se cargue con la información de una tabla de la base de datos y que dicho gridview se pueda filtrar con un dropdownlist que muestra todas las columnas de la tabla y un textbox para digitar la busqueda.

    En mi capa de datos tengo un metodo asi:

    public static List<DestinatarioEntidad> ObtenerPorParametro(string param, string valor)
    {
    List<DestinatarioEntidad> list = new List<DestinatarioEntidad>();

    using (SqlConnection conn = new SqlConnection(con.ConnectionString.ToString()))
    {
    conn.Open();

      string sql = @"SELECT d.Id, d.Direccion, d.Nombre, d.Nit, d.Telefono, d.Destino, d.Barrio, d.Contacto, d.Cuenta
    FROM Destinatarios d INNER JOIN Cuentas c On d.Id_cuenta = c.Id
    WHERE d.@param LIKE @valor% ";

    SqlCommand cmd = new SqlCommand(sql, conn);
    cmd.Parameters.AddWithValue("@param", param);
    cmd.Parameters.AddWithValue("@valor", valor);

    SqlDataReader reader = cmd.ExecuteReader();

    while (reader.Read())
    {
    list.Add(Cargar(reader));
    }
    }

    return list;
    }

    como ven este metodo recibe dos parametros uno que se llama "param" que recibe el nombre de columna seleccionado en el dropdownlist y otro parametro que se llama "valor" que recibe el texto digitado en el textbox.

    Quisiera saber si debo crear un metodo por cada columna para filtrar la información, es decir:

     ObtenerPorNombre(string valor)......

    ObtenerPorDireccion(string valor)....

    ........

    o puedo usar un metodo generico como este donde recibe el nombre de columna y valor y filtra la información.

    Este codigo que he mostrado no funciona por la sentencia " WHERE d.@param LIKE @valor% "; " ya que d.@param es un error.

    ¿Quisiera saber cual es la mejor forma de filtrar la información de un gridview con un dropdownlist y un textbox?, o si hay otras alternativas mas efectivas para filtrar la información y que el usuario pueda obtener la información que necesita de todo el gridview de forma efectiva 

    Agradezco su colaboración 

    Cordial saludo.

    jueves, 26 de abril de 2012 4:50

Respuestas

  • hola

    lo que planteas de usar

    WHERE d.@param LIKE @valor%

    no es valido porque los parametros no se peuden definir como nombre de columnas

    tampoco es valido el crear un metodo por cada campo que vas a filtrar

    pero si podrias usar el cocneto de filtro condicional para crear un unico metodo que dependiendo que pases como dato de filtro prenda o apague ese filtro

    Filtros Condicionales (1/2)

    como veras jusgando con el null del parametro puede habilitar o no el filtro del mismo, asi podrias definir todas las columnas de forma fija por la cual vas a filtrar y pasas la info de aquella que si aplcia el filtro

    saludos


    Leandro Tuttini

    Blog
    Buenos Aires
    Argentina

    jueves, 26 de abril de 2012 4:59

Todas las respuestas

  • hola

    lo que planteas de usar

    WHERE d.@param LIKE @valor%

    no es valido porque los parametros no se peuden definir como nombre de columnas

    tampoco es valido el crear un metodo por cada campo que vas a filtrar

    pero si podrias usar el cocneto de filtro condicional para crear un unico metodo que dependiendo que pases como dato de filtro prenda o apague ese filtro

    Filtros Condicionales (1/2)

    como veras jusgando con el null del parametro puede habilitar o no el filtro del mismo, asi podrias definir todas las columnas de forma fija por la cual vas a filtrar y pasas la info de aquella que si aplcia el filtro

    saludos


    Leandro Tuttini

    Blog
    Buenos Aires
    Argentina

    jueves, 26 de abril de 2012 4:59
  • Hola Leandro:

    Muchas gracias por tu ayuda, voy a revisar el articulo

    Cordial saludo.

    viernes, 27 de abril de 2012 4:25