DataGridView列排序降序C#
本文关键字:降序 排序 DataGridView | 更新日期: 2023-09-27 18:27:29
我在DataGridView
控件中遇到了一个关于排序数据的小问题。在此之前,我制作了保存数据的BinaryWriter
表单。我使用这行代码以BinaryReader
形式按降序对我的列进行排序
this.dataGridView1.Sort(this.dataGridView1.Columns[4], ListSortDirection.Descending);
我必须把这些数字按降序排列——12、10、7和5。这是我DataGrid
的第4栏。一切都很好,但每次我保存的最后一行数据都没有排序,只停留在这里。
我如何对最后一排进行排序?什么东西不见了,还是有其他解决方案?谢谢
此问题已在MSDN 中得到回答
这是经过设计的,"最后一行"不属于DataGridView的数据集合,它只是一个用于输入的空行,我认为用真实的数据记录进行排序是没有意义的。
因此,对于排序,您可以获得DataTable
,对其进行排序,然后将排序后的DataTable
绑定到DataGridView
样本代码
var src = //get DataTable from your source
var dv = src.DefaultView;
dv.Sort = "<your column name> desc";
src = dv.ToTable();
dataGridView.DataSource = src;
好的,所以如果您将新数据添加到最后一行,那么它将不会被包括在排序中,因为它不是提交的数据。在这一点上,它仍然被归类为"脏"。您需要在保存数据时提交数据,然后在完成后进行订购。
编辑
要实现您想要的,您应该首先验证新数据行中的数据,然后使用此处的datagrid.currentrow.datagrid.endedit()。这可以用这样的东西来完成(取自链接的问题,以防问题在未来被删除):
void dataGridView_RowValidating(object sender, DataGridViewCellCancelEventArgs e)
{
// Ignore Row if it's not dirty
if (!dataGridView.IsCurrentRowDirty)
return;
// Validate all cells in the current row.
}