Sortieren eines DataGridView nach mehreren Spalten?

Ich gesucht habe für ein Beispiel zum Sortieren einer DataGridView nach mehreren Spalten, aber nicht zu sein scheinen in der Lage zu finden, ein Beispiel, das tut, was ich möchte.

Grundsätzlich habe ich ein gebundenes DataGridView-control (gebunden an eine DataTable/DataView), und das gebundene DataTable hat zwei Spalten: Priorität und Datum. Ich möchte nach Datum Sortieren innerhalb von Priorität. Das heißt, die Spalte "Priorität" takes precendence, dann werden seine das date, aber beide können aufsteigend oder absteigend sein.

So, ich habe zum Beispiel können niedrige Priorität, das frühe Datum der ersten (Reihenfolge nach Priorität asc, Datum asc), und, indem Sie auf die Spalte Datum, header, schalten Sie auf niedrige Priorität, späte Datum des ersten (Reihenfolge nach Priorität asc, Datum desc). Wenn ich dann auf auf die Priorität, möchte ich mit hoher Priorität zuerst, dann späten Zeitpunkt (die aktuelle Sortierfolge für die Spalte Datum - order by priority desc, Datum desc), aber dann in der Lage sein, um Sie auf die Datum-Spalte-header zu wechseln hohe Priorität, frühe Datum (order by priority desc, Datum asc).

Im Idealfall würde ich gerne Sortieren von Glyphen auf beide Spalten, um zu zeigen, aufsteigend oder absteigend.

Irgendwelche Ideen oder Hinweise wäre dankbar angenommen.

Diese (siehe unten) scheint ziemlich nahe, aber die Glyphen 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 meinst du mit "nicht richtig" im Hinblick auf die Pfeil-Glyphen? Ich habe wirklich nicht die Zeit nehmen wollen, zu schreiben, der Sortieren code, aber ich habe diese nach rechts zu sehen, bevor, und es sieht aus wie du bist auf dem besten Weg dort hin.
  • Naja... die Glyphe für die erste Spalte (Priorität) schaltet zwischen oben und unten, aber die Glyphe für die zweite Spalte scheint eine Art von drei-Zustand, und zeigt wie oben, nichts, nichts. Ich vermute, dass der DGV nicht wirklich wie mit zwei Sortier-Glyphen zur gleichen Zeit ? Ich habe eine Dritte Spalte mit "normalen" Sortieren, und das scheint gut, aber (mit den Glyphen auf den ersten beiden Spalten verschwinden), aber Klick auf die überschrift der 2. Spalte, dann gibt mir ein aufsteigender Glyphe ' auf die 1.Säule.
  • Google für MultisortDataGridView IIRC.
InformationsquelleAutor Black Light | 2011-01-10
Schreibe einen Kommentar