Ich habe nach einem Beispiel für die Sortierung eines DataGridView auf mehrere Spalten gesucht, aber ich finde nicht in der Lage, ein Beispiel zu finden, das tut, was ich möchte.Eine DataGridView auf mehreren Spalten sortieren?
Grundsätzlich habe ich ein gebundenes DataGridView-Steuerelement (an eine DataTable/DataView gebunden), und die gebundene DataTable hat zwei Spalten: - Priorität und Datum. Ich möchte nach Priorität sortieren. Das heißt, die Prioritätsspalte hat Vorrang, dann ist es das Datum, aber beide können aufsteigend oder absteigend sein.
So zum Beispiel kann ich mit niedriger Priorität, früh erste (Reihenfolge nach Priorität asc, Datum auf) und durch den Datum Spaltenkopf, Schalter auf niedrige Priorität klicken, spätes Datum zuerst (Bestellung nach Priorität Asc, Datum desc). Wenn ich dann auf die Priorität klicke, möchte ich zuerst eine hohe Priorität haben, dann ein spätes Datum (die aktuelle Sortierreihenfolge für die Datumsspalte - Reihenfolge nach Priorität desc, Datum desc), aber dann in der Lage sein, auf die Datumsspalte zu klicken Kopfzeile, um zu hoher Priorität zu wechseln, frühes Datum (Reihenfolge nach Priorität desc, Datum asc).
Idealerweise möchte ich Glyphen für beide Spalten sortieren, um aufsteigend oder absteigend anzuzeigen.
Alle Ideen oder Hinweise würden dankbar erhalten werden.
Dies (siehe unten) scheint ziemlich nah zu sein, aber die Glyphen funktionieren nicht richtig.
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";
}
}
}
Was meinen Sie mit "funktionieren nicht richtig" in Bezug auf die Pfeilzeichen? Ich wollte mir wirklich nicht die Zeit nehmen, um den Sortiercode zu schreiben, aber ich habe das vorher genau gesehen, und es sieht so aus, als ob du jetzt am meisten da bist. –
Nun ... die Glyphe für die erste Spalte (Priorität) wechselt zwischen oben und unten, aber die Glyphe für die zweite Spalte scheint eine Art Dreizustand zu sein und wird als hoch, nichts, nichts angezeigt. Ich nehme an, dass der DGV nicht wirklich mag, zwei Glyphen gleichzeitig zu sortieren? Ich habe eine dritte Spalte mit "normaler" Sortierung hinzugefügt, und das scheint in Ordnung zu sein (die Glyphen in den ersten beiden Spalten verschwinden jedoch), aber wenn ich auf die Überschrift für die zweite Spalte klicke, erscheint eine aufsteigende Glyphe in der ersten Spalte. –
Google für 'MultisortDataGridView' IIRC. – leppie