Principales respuestas
Ordenar un GridView atraves de un DropDownList

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
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
-
>>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
-
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
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 -
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)
protected void ddlPrecio_SelectedIndexChanged(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();
}
{
rArticulo objArticulos = new rArticulo();
Articulo unArticulo = objArticulos.Cargar("sp_OrdenarXprecio ", ddlPrecio.SelectedValue);
ArrayList colArticulos = new ArrayList();
colArticulos = objArticulos.ListarXprecio();
GridView1.DataSource = colArticulos;
GridView1.DataBind();
} -
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
-
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 -
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 CodigoEstos son los procedimientos para ordenar el grid view desde el ddl pero que tengo que programarle al ddl para enlazarlo con el grid view
-
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
-
>>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
-
-
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 -
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
-
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