He buscado un ejemplo para ordenar un DataGridView en varias columnas, pero parece que no puedo encontrar un ejemplo que haga lo que me gustaría.¿Ordenar un DataGridView en varias columnas?
Básicamente, tengo un control DataGridView vinculado (vinculado a un DataTable/DataView), y el DataTable encuadernado tiene dos columnas: - prioridad y fecha. Me gustaría ordenar por fecha con prioridad. Es decir, la columna de prioridad toma precendencia, luego es la fecha, pero ambas pueden ser ascendentes o descendentes.
Así, por ejemplo, es posible que tenga baja prioridad, fecha temprana primera (ordenado por asc prioridad, fecha asc) y, haciendo clic en el encabezado de la columna Fecha, cambie a baja prioridad, la fecha final de la primera (orden por prioridad asc, fecha desc). Si hago clic en la prioridad, me gustaría tener prioridad alta primero, luego fecha tardía (el orden de clasificación actual para la columna de fecha - ordena por prioridad desc, fecha desc), pero luego, puede hacer clic en la columna de fecha encabezado para cambiar a alta prioridad, fecha temprana (orden por prioridad desc, fecha asc).
Idealmente, me gustaría ordenar los glifos en ambas columnas para mostrar ascendente o descendente.
Cualquier idea o sugerencia sería gratamente recibida.
Esto (ver más abajo) parece acercarse bastante, pero los glifos no funcionan bien.
using System;
using System.Windows.Forms;
namespace WindowsFormsApplication4
{
public partial class Form1 : Form
{
DataSet1 dataset;
public Form1()
{
InitializeComponent();
dataset = new DataSet1(); // two columns: Priority(Int32) and date (DateTime)
dataset.DataTable1.AddDataTable1Row(1, DateTime.Parse("01-jan-10"));
dataset.DataTable1.AddDataTable1Row(1, DateTime.Parse("02-jan-10"));
dataset.DataTable1.AddDataTable1Row(1, DateTime.Parse("03-jan-10"));
dataset.DataTable1.AddDataTable1Row(2, DateTime.Parse("04-jan-10"));
dataset.DataTable1.AddDataTable1Row(2, DateTime.Parse("05-jan-10"));
dataset.DataTable1.AddDataTable1Row(2, DateTime.Parse("06-jan-10"));
dataset.DataTable1.AddDataTable1Row(3, DateTime.Parse("07-jan-10"));
dataset.DataTable1.AddDataTable1Row(3, DateTime.Parse("08-jan-10"));
dataset.DataTable1.AddDataTable1Row(3, DateTime.Parse("09-jan-10"));
dataGridView1.DataSource = dataset.DataTable1.DefaultView;
dataGridView1.AllowUserToAddRows = false;
dataGridView1.Columns[0].SortMode = DataGridViewColumnSortMode.Programmatic;
dataGridView1.Columns[1].SortMode = DataGridViewColumnSortMode.Programmatic;
dataGridView1.Columns[0].HeaderCell.SortGlyphDirection = SortOrder.Ascending;
dataGridView1.Columns[1].HeaderCell.SortGlyphDirection = SortOrder.Ascending;
}
private void dataGridView1_ColumnHeaderMouseClick(object sender, DataGridViewCellMouseEventArgs e)
{
DataGridViewColumn[] column = new[] { dataGridView1.Columns[0], dataGridView1.Columns[1] };
DataGridViewColumnHeaderCell headerCell = dataGridView1.Columns[e.ColumnIndex].HeaderCell;
if (headerCell.SortGlyphDirection != SortOrder.Ascending)
headerCell.SortGlyphDirection = SortOrder.Ascending;
else
headerCell.SortGlyphDirection = SortOrder.Descending;
String sort = column[0].DataPropertyName + " " + fnSortDirection(column[0])
+ ", "
+ column[1].DataPropertyName + " " + fnSortDirection(column[1]);
dataset.DataTable1.DefaultView.Sort = sort;
this.textBox1.Text = sort;
}
private String fnSortDirection(DataGridViewColumn column)
{
return column.HeaderCell.SortGlyphDirection != SortOrder.Descending ? "asc" : "desc";
}
}
}
¿Qué quiere decir con "no están funcionando bien" con respecto a los glifos de flecha? Realmente no quería tomarme el tiempo para escribir el código de clasificación, pero he conseguido que esto se vea justo antes, y parece que ya has recorrido la mayor parte del camino. –
Bueno ... el glifo de la primera columna (prioridad) alterna entre arriba y abajo, pero el glifo de la segunda columna parece ser un tipo de tres estados, y se visualiza como arriba, nada, nada. Supongo que a la DGV no le gusta tener dos glifos de clasificación al mismo tiempo. Agregué una tercera columna con clasificación "normal", y eso parece estar bien pero (con los glifos en las dos primeras columnas desapareciendo), pero al hacer clic en el encabezado de la segunda columna, aparece un glifo ascendente en la primera columna. –
Google for 'MultisortDataGridView' IIRC. – leppie