Затем в своей форме я проверяю, что использую элемент управления 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";
}
}
}