我的表单上有一个 datagridview,我用这个填充它:
dataGridView1.DataSource = students.Select(s => new { ID = s.StudentId, RUDE = s.RUDE, Nombre = s.Name, Apellidos = s.LastNameFather + " " + s.LastNameMother, Nacido = s.DateOfBirth })
.OrderBy(s => s.Apellidos)
.ToList();
现在,我使用 s.Apellidos 作为默认排序,但我也希望允许用户在单击列标题时进行排序。
这种排序方式不会以任何方式修改数据,这只是客户端的一个好处,可以让他们在用眼睛扫视屏幕时更轻松地搜索信息。
感谢您的建议。
最佳答案
将所有列的(可由用户排序的)SortMode 属性设置为自动
dataGridView1.DataSource = students.Select(s => new { ID = s.StudentId, RUDE = s.RUDE, Nombre = s.Name, Apellidos = s.LastNameFather + " " + s.LastNameMother, Nacido = s.DateOfBirth })
.OrderBy(s => s.Apellidos)
.ToList();
foreach(DataGridViewColumn column in dataGridView1.Columns)
{
column.SortMode = DataGridViewColumnSortMode.Automatic;
}
编辑:由于您的 datagridview 与 linq 查询绑定(bind),因此不会对其进行排序。因此,请仔细阅读此[404 死链接,请参阅下一节]
,它解释了如何创建可排序的绑定(bind)列表,然后将其作为数据源提供给 datagridview。
从死链接中恢复的代码
上面的链接是 404-dead。我从 Internet Wayback Machine 恢复了代码 archive页面的。
public Form1()
{
InitializeComponent();
SortableBindingList<person> persons = new SortableBindingList<person>();
persons.Add(new Person(1, "timvw", new DateTime(1980, 04, 30)));
persons.Add(new Person(2, "John Doe", DateTime.Now));
this.dataGridView1.AutoGenerateColumns = false;
this.ColumnId.DataPropertyName = "Id";
this.ColumnName.DataPropertyName = "Name";
this.ColumnBirthday.DataPropertyName = "Birthday";
this.dataGridView1.DataSource = persons;
}
关于c# - 如何在用户单击列标题时启用 DataGridView 排序?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/5553100/