提问人:Tim 提问时间:4/24/2017 更新时间:4/25/2017 访问量:1477
按行标题对绑定到 BindingList 的 DataGridView 进行排序
Sort DataGridView bound to BindingList by row header
问:
我有一个 DataGridView,其 DataSource 绑定到 BindingList。生成的表如下所示。
Row Header Property 1 Property 2 Property 3
---- ---- ---- ----
---- ---- ---- ----
最简单的方法是什么,以便在单击“行标题”时,表格会按它排序?
答:
4赞
Navoneel Talukdar
4/25/2017
#1
您必须使用该事件,并使用泛型列表作为数据源对 DataGridView 进行排序。ColumnHeaderMouseClick
DataGridViewColumn.HeaderCell.SortGlyphDirection
示例代码是
public partial class Form1 : Form
{
public Form1()
{
InitializeComponent();
Person p = new Person { Birthday = new DateTime(2006, 12, 21), FirstName = "Jane", LastName = "Smith" };
Person p2 = new Person { Birthday = new DateTime(2007, 9, 11), FirstName = "Alice", LastName = "Doe" };
lstPeople.Add(p);
lstPeople.Add(p2);
dgvPeople.DataSource = lstPeople;
foreach (DataGridViewColumn col in dgvPeople.Columns)
{
col.SortMode = DataGridViewColumnSortMode.Programmatic;
}
}
public List<Person> lstPeople = new List<Person>();
/// <summary>
/// Sort the DataGridView when Header Column is clicked
/// </summary>
/// <param name="sender"></param>
/// <param name="e"></param>
private void dgvPeople_ColumnHeaderMouseClick(object sender, DataGridViewCellMouseEventArgs e)
{
DataGridView grid = (DataGridView)sender;
SortOrder so = SortOrder.None;
if (grid.Columns[e.ColumnIndex].HeaderCell.SortGlyphDirection == SortOrder.None ||
grid.Columns[e.ColumnIndex].HeaderCell.SortGlyphDirection == SortOrder.Ascending)
{
so = SortOrder.Descending;
}
else
{
so = SortOrder.Ascending;
}
//set SortGlyphDirection after databinding otherwise will always be none
Sort(grid.Columns[e.ColumnIndex].Name, so);
grid.Columns[e.ColumnIndex].HeaderCell.SortGlyphDirection = so;
}
/// <summary>
/// Sort the DataGridView
/// </summary>
/// <param name="column"></param>
/// <param name="sortOrder"></param>
private void Sort(string column, SortOrder sortOrder)
{
switch (column)
{
case "FirstName":
{
if (sortOrder == SortOrder.Ascending)
{
dgvPeople.DataSource = lstPeople.OrderBy(x => x.FirstName).ToList();
}
else
{
dgvPeople.DataSource = lstPeople.OrderByDescending(x => x.FirstName).ToList();
}
break;
}
case "LastName":
{
if (sortOrder == SortOrder.Ascending)
{
dgvPeople.DataSource = lstPeople.OrderBy(x => x.LastName).ToList();
}
else
{
dgvPeople.DataSource = lstPeople.OrderByDescending(x => x.LastName).ToList();
}
break;
}
case "Birthday":
{
if (sortOrder == SortOrder.Ascending)
{
dgvPeople.DataSource = lstPeople.OrderBy(x => x.Birthday).ToList();
}
else
{
dgvPeople.DataSource = lstPeople.OrderByDescending(x => x.Birthday).ToList();
}
break;
}
}
}
}
public class Person
{
public string FirstName { get; set; }
public string LastName { get; set; }
public DateTime Birthday { get; set; }
}
评论