How to "unsort" a DataGridView

本文关键字:quot DataGridView unsort to How | 更新日期: 2023-09-27 17:57:40

我的windows窗体上有一个DataGridView,它绑定到DataSource,如下所示:

using (SqlCommand sqlCommand = new SqlCommand("SQL code here", sqlConnection))
{
    using (SqlDataReader sqlDataReader = sqlCommand.ExecuteReader())
    {
        DataSet ds1 = new DataSet();
        DataTable dt1 = new DataTable();
        dt1.Columns.Add("Select", System.Type.GetType("System.Boolean"));
        ds1.Tables.Add(dt1);
        ds1.Load(sqlDataReader, LoadOption.PreserveChanges, ds1.Tables[0]);
        dataGridView.DataSource = ds1.Tables[0];
    }
}

注意行中的内容:

dt1.Columns.Add("Select", System.Type.GetType("System.Boolean"));

这将boolean列添加到由checkbox表示的DataGridViewDataGridViewCellMouseClick处理程序看起来像这样(最简单的形式):

private void dataGridView_CellMouseClick(object sender, DataGridViewCellMouseEventArgs e)
{
    dataGridView.Rows[e.RowIndex].Cells["Select"].Value = !dataGridView.Rows[e.RowIndex].Cells["Select"].Value;
}

现在,在某个时刻,我想对DataGridView进行排序,以便所有选定的行(即,已检查checkboxes的行)都位于顶部。所以我称这个函数为:

dataGridView.Sort(dataGridView.Columns["Select"], ListSortDirection.Descending);

它就像一种魅力。唯一的问题是,从这一点开始,当这些值发生变化时,DataGridView将自动重新对自己进行排序。这导致了令人困惑的行为,我想停止这种行为。我如何告诉DataGridView,好吧,伙计,你现在已经排序了,谢谢,现在保持原样,直到我再次调用排序函数?

How to "unsort" a DataGridView

它没有显示在代码段中,但列的SortMode属性是否设置为Automatic?尝试将其更改为NotSortableProgrammatic:

dataGridView.Columns["Select"].SortMode = DataGridViewColumnSortMode.NotSortable;