我已经搜索了一个在多列上对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