c# - 如何在用户单击列标题时启用 DataGridView 排序?

标签 c# winforms sorting datagridview

我的表单上有一个 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/

相关文章:

java - 在颜色之后对 arraylist 进行排序

c# - 我应该为每个 Paint 请求创建新的 Pens/Brush 还是在整个应用程序生命周期中保留它们?

vb.net - DateTimePicker 控件在焦点上添加功能

.NET Compact 框架 - 使滚动条更宽

c++ - 将 std::sort 与自定义排序对象和数据类型模板一起使用 - 寻求正确的语法

r - 比较两列以匹配值并并排对齐

c# - 最快的阵列初始化?

c# - 使用自定义列名称将 C# 类序列化为 JSON 字符串

c# - 位移位是否总是考虑 Endian 体系结构?

c# - 在 C# NET 中检测应用程序关闭?