Затем в своей форме я проверяю, что использую элемент управления MultiSortingDataGridView (как указано выше) вместо обычного DataGridView, и я устанавливаю его источник данных следующим образом:

ал пример сортировки DataGridView по нескольким столбцам, но, похоже, не смог найти пример, который делает то, что я хотел бы.

По сути, у меня есть связанный элемент управления DataGridView (связанный с DataTable / DataView), а связанный DataTable имеет два столбца: - приоритет и дата. Я хотел бы отсортировать по дате в рамках приоритета. То есть столбец приоритета имеет приоритет, затем его дата, но оба могут быть в порядке возрастания или убывания.

Так, например, у меня может быть низкий приоритет(порядок по приоритету asc, дата asc)и, щелкнув по заголовку столбца с датой, переключитесь на низкий приоритет, сначала на позднюю дату(порядок по приоритету asc, дата desc), Если я затем нажму на приоритет, я бы хотел сначала иметь высокий приоритет, а затем позднюю дату (текущий порядок сортировки для столбца даты -упорядочить по приоритету, по дате), но затем можно щелкнуть заголовок столбца даты, чтобы переключиться на высокий приоритет, раннюю дату(порядок по приоритету, дата по возрастанию).

В идеале я хотел бы, чтобы сортировки глифов в обоих столбцах отображались по возрастанию или убыванию.

Любые идеи или указатели будут с благодарностью приняты.

Это (см. Ниже), кажется, довольно близко, но глифы работают неправильно.

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";
     }
  }
}

Ответы на вопрос(5)

Ваш ответ на вопрос