DataGirdView实现排序功能有两种方式
1.绑定到BindingList(BindingList可以清空数据),然后通过列表头双击事件来对数据排序,然后再重新绑定到DataGridView,此方式列表头上面不会出现向上向下箭头
2 绑定到DataTable,此方式会自动可以通过双击列头实现排序,并且会出现向上向下箭头
using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using System.Windows.Forms;
namespace WindowsFormsApp3
{
public partial class Form1 : Form
{
public Form1()
{
InitializeComponent();
}
private BindingList<Student> students = new BindingList<Student>();
private void Form1_Load(object sender, EventArgs e)
{
//1 通过绑定到DataTable直接排序
//DataTable dt = new DataTable();
//dt.Columns.Add("Name", typeof(string));
//dt.Columns.Add("Age", typeof(int));
//for (int i = 0; i < 5; i++)
//{
// dt.Rows.Add("zs" + i.ToString(), 10 + i);
//}
//dataGridView1.DataSource = dt;
for (int i = 0; i < 5; i++)
{
students.Add(new Student() { Age = 10 + i, Name = "zs" + i.ToString() });
}
dataGridView1.DataSource = students;
}
//2.通过列头双击事件来对数据进行排序,并重新绑定
private bool b_flag = false;
private void dataGridView1_ColumnHeaderMouseDoubleClick(object sender, DataGridViewCellMouseEventArgs e)
{
b_flag = !b_flag;
List<Student> lst = new List<Student>();
if (b_flag)
{
if (e.ColumnIndex==0)
{
lst = students.OrderBy(s => s.Age).ToList();
}
else if (e.ColumnIndex ==1 )
{
lst = students.OrderBy(s => s.Name).ToList();
}
}
else
{
if (e.ColumnIndex == 0)
{
lst = students.OrderByDescending(s => s.Age).ToList();
}
else if (e.ColumnIndex == 1)
{
lst = students.OrderByDescending(s => s.Name).ToList();
}
}
students = new BindingList<Student>(lst);
dataGridView1.DataSource = students;
}
}
public class Student
{
public int Age { get; set; }
public string Name { get; set; }
public bool Male { get; set; }
}
}