C# DataGridView列排序后禁用自动重排问题求助
解决DataGridView添加数据后自动重排的问题
你设置SortMode = NotSortable只能禁用用户点击列头触发排序的操作,但如果数据源本身带有排序规则,或者在数据更新时触发了排序逻辑,依然会导致自动重排。可以通过以下几种方式解决:
1. 清除数据源的自动排序规则
如果你的DataGridView绑定的是BindingSource,确保它的Sort属性为空:
// 在初始化或添加数据前执行 yourBindingSource.Sort = string.Empty;
如果绑定的是DataTable的DefaultView,则关闭其排序允许:
yourDataTable.DefaultView.AllowSort = false;
2. 添加数据时临时禁用排序,完成后恢复
如果需要保留用户手动排序的功能,但添加数据时避免自动重排,可以临时禁用排序逻辑,操作完成后再恢复:
// 保存当前的排序状态 DataGridViewColumn sortedCol = dgvSequence.SortedColumn; ListSortDirection sortDir = dgvSequence.SortOrder == SortOrder.Ascending ? ListSortDirection.Ascending : ListSortDirection.Descending; // 临时清空排序并禁用列头排序 dgvSequence.Sort(null); foreach (DataGridViewColumn col in dgvSequence.Columns) { col.SortMode = DataGridViewColumnSortMode.NotSortable; } // 执行添加数据的逻辑 // 示例:dgvSequence.Rows.Add("新数据1", "新数据2", "新数据3"); // 恢复排序状态(如果之前有排序) if (sortedCol != null) { sortedCol.SortMode = DataGridViewColumnSortMode.Automatic; dgvSequence.Sort(sortedCol, sortDir); } else { // 无历史排序时,恢复列头手动排序功能 foreach (DataGridViewColumn col in dgvSequence.Columns) { col.SortMode = DataGridViewColumnSortMode.Automatic; } }
3. 排查是否有额外的排序触发逻辑
检查代码中是否在数据添加完成后,主动调用了DataGridView.Sort()方法,或者在数据源的ListChanged、RowAdded等事件中绑定了排序逻辑,这些都会导致自动重排,需要移除或添加触发条件。
内容的提问来源于stack exchange,提问作者Sutts77
相关产品推荐
相关产品推荐

