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栏。一切都很好,但每次我保存的最后一行数据都没有排序,只停留在这里。

我如何对最后一排进行排序?什么东西不见了,还是有其他解决方案?谢谢

DataGridView列排序降序C#

此问题已在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.
}