Ordenar DataGridView por varias columnas

02/03/2009 - 16:36 por Alfredo | Informe spam
Hola

Tengo un datagridview con varias columnas. De todas ellas, necesito que
mi aplicación ordene por 2 de ellas. Si pincho en la primera, debe ordenador
por ella y, si hay varias filas con el mismo dato, que ordene por la segunda
(al estilo del Access). Si pincho en la segunda, debe ordenar por la segunda
y (si hay varias iguales) por la primera dentro de todas esas iguales.

¿Cómo lo puedo hacer?

Gracias
 

Leer las respuestas

#1 Alex Jimenez
03/03/2009 - 19:59 | Informe spam
Buenas Aqui te dejo un pequeño codigo de ejemplo de una pagina con un
GridView Simple habilitando la propiedad [AllowSorting] y el evento
[Sorting]

Espero que te sea de ayuda, se que no es nada estetico pero es la forma como
me ha funcionado... cualquier cosa avisas por este medio...

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

//Metodo para llenar el GridView1
private void LlenarGrid()
{
SqlConnection cn = new
SqlConnection(@"Server=TUSERVER;Database=TUBD;Integrated security=true");
SqlDataAdapter da = new SqlDataAdapter("Select * From MiTabla",
cn);
DataTable dtData = new DataTable();
da.Fill(dtData );
Session["MiData"] = dtData ; //Almaceno el DataSet en una
variable de Session para usarla el Sorting del GridView
GridView1.DataSource = dtData ;
GridView1.DataBind();
}

protected void GridView1_Sorting(object sender,
GridViewSortEventArgs e)
{
DataTable dt = ((DataTable)Session["MiData"]);

if (Session["Orden1"] == null)
{
Session["Orden1"] = e.SortExpression + " " +
e.SortDirection.ToString().Substring(0,3);
dt.DefaultView.Sort = Session["Orden1"].ToString() ;
}
else
{
if (Session["Orden1"].ToString() != e.SortExpression + " " +
e.SortDirection.ToString().Substring(0, 3))
{
Session["Orden2"] = e.SortExpression + " " +
e.SortDirection.ToString().Substring(0, 3);
dt.DefaultView.Sort = Session["Orden1"].ToString() + ",
" + Session["Orden2"].ToString();
}
}

GridView1.DataSource = dt.DefaultView;
GridView1.DataBind();

}


Saludos,

Alex Jimenez
Blog: http://alexjimenez.wordpress.com
Maracay - Venezuela

"Alfredo" escribió en el mensaje de
noticias:
Hola

Tengo un datagridview con varias columnas. De todas ellas, necesito que
mi aplicación ordene por 2 de ellas. Si pincho en la primera, debe
ordenador
por ella y, si hay varias filas con el mismo dato, que ordene por la
segunda
(al estilo del Access). Si pincho en la segunda, debe ordenar por la
segunda
y (si hay varias iguales) por la primera dentro de todas esas iguales.

¿Cómo lo puedo hacer?

Gracias

Preguntas similares