我的表单上有一个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作为默认排序,但我也希望允许用户在单击列标题时进行排序。
这种排序不会以任何方式修改数据,这只是一个客户端的好处,以允许更容易搜索信息时,他们的眼睛扫描屏幕。
谢谢你的建议。
发布于 2011-04-05 22:07:09
将所有列(可由用户排序)的SortMode属性设置为Automatic
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查询绑定时,它将不会被排序。因此,请阅读这个[404 dead link, see next section]
,它解释了如何创建一个可排序的绑定列表,然后将其作为数据源提供给datagridview。
从死链接恢复的代码
上面的链接是404-死了。我从网页的互联网回路机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;
}
发布于 2011-04-06 02:15:23
按照Niraj的建议,使用SortableBindingList.我已经在DataGridView中非常成功地使用了这一点。
下面是我使用的更新代码的链接- Presenting the SortableBindingList - Take Two - archive
只需将这两个源文件添加到您的项目中,您就可以开始工作了。
源代码在SortableBindingList.zip - 404 dead link
中
发布于 2017-04-19 09:10:29
另一种方法是使用"System.Linq.Dynamic“库。您可以从Nuget获得此库。不需要任何自定义实现或可排序列表:)
using System.Linq.Dynamic;
private bool sortAscending = false;
private void dataGridView_ColumnHeaderMouseClick ( object sender, DataGridViewCellMouseEventArgs e )
{
if ( sortAscending )
dataGridView.DataSource = list.OrderBy ( dataGridView.Columns [ e.ColumnIndex ].DataPropertyName ).ToList ( );
else
dataGridView.DataSource = list.OrderBy ( dataGridView.Columns [ e.ColumnIndex ].DataPropertyName ).Reverse ( ).ToList ( );
sortAscending = !sortAscending;
}
https://stackoverflow.com/questions/5553100
复制相似问题