我已經搜索了一個在多列上對DataGridView進行排序的示例,但似乎無法找到符合要求的示例。對多列進行DataGridView排序?
基本上,我有一個綁定的DataGridView控件(綁定到DataTable/DataView),綁定的DataTable有兩列: - 優先級和日期。我想按優先級排序。也就是說,優先級列優先,然後是日期,但都可以是升序或降序。
因此,舉例來說,我可以具有低優先級,早日第一(按優先級遞增順序,日期ASC),並且,通過單擊日期列標題,切換到低優先級,延遲日期第一(順序按優先順序排序,日期說明)。如果我然後點擊優先級,我想先優先,然後延遲日期(日期列的當前排序順序 - 按優先順序desc,日期desc),但然後能夠點擊日期列標題切換到高優先級,早日(按優先順序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";
}
}
}
對於箭頭字形而言,「不正常工作」是什麼意思?我真的不想花時間去編寫排序代碼,但是我已經看到了它的前景,而且現在看起來你已經是大部分了。 – 2011-01-10 13:35:41
嗯......第一列的字形(優先級)在上下之間切換,但第二列的字形似乎是某種三態,並顯示爲上,無,無。我猜測DGV並不喜歡同時有兩個排序字形嗎?我添加了第三列「正常」排序,看起來很好,但(前兩列的字形消失),但單擊第二列的標題,然後在第一列給我一個升序字形。 – 2011-01-10 14:18:34
Google for`MultisortDataGridView` IIRC。 – leppie 2011-01-10 15:20:35