在我的例子中,列'DEProduct'的排序是desc。
的数据当我进行datagridview更新时,所有内容都直接恢复为默认的列头值,并且我丢失了列头排序。
的我有很多列,那么我如何才能回到这个列头排序,而不是在选择哪一个之前检查它们,然后手动触发它?
n3schb8v1#
您提到了 * 缓存 *,所以我认为您看到所描述的情况的唯一方式是您正在重置缓存,以便DataGridview重新绑定到一个新的源。您可以使用DataGridView.SortedColumn Property和DataGridView.SortOrder Property存储当前的排序状态。然后进行更新。更新后,恢复存储的排序状态。
' since it is asumed that the datasource changes, store only the column name Dim sortColName As String = dgv1.SortedColumn?.Name 'dgv1.SortedColumn may be null Dim direction As SortOrder = dgv1.SortOrder UpdateData() ' replace this with your Update code ' restore the sort state if any If sortColName IsNot Nothing Then Dim columnToSort As DataGridViewColumn = dgv1.Columns(sortColName) If columnToSort IsNot Nothing Then Dim directionProgrammatic As System.ComponentModel.ListSortDirection Select Case direction Case SortOrder.Ascending directionProgrammatic = System.ComponentModel.ListSortDirection.Ascending Case SortOrder.Descending directionProgrammatic = System.ComponentModel.ListSortDirection.Descending End Select dgv1.Sort(columnToSort, directionProgrammatic) columnToSort.HeaderCell.SortGlyphDirection = direction End If End If
' since it is asumed that the datasource changes, store only the column name
Dim sortColName As String = dgv1.SortedColumn?.Name 'dgv1.SortedColumn may be null
Dim direction As SortOrder = dgv1.SortOrder
UpdateData() ' replace this with your Update code
' restore the sort state if any
If sortColName IsNot Nothing Then
Dim columnToSort As DataGridViewColumn = dgv1.Columns(sortColName)
If columnToSort IsNot Nothing Then
Dim directionProgrammatic As System.ComponentModel.ListSortDirection
Select Case direction
Case SortOrder.Ascending
directionProgrammatic = System.ComponentModel.ListSortDirection.Ascending
Case SortOrder.Descending
directionProgrammatic = System.ComponentModel.ListSortDirection.Descending
End Select
dgv1.Sort(columnToSort, directionProgrammatic)
columnToSort.HeaderCell.SortGlyphDirection = direction
End If
字符串
w80xi6nr2#
添加用C#编写的答案,与TnTinMn相同
var sortColName = dgv1.SortedColumn;var sortDirection = dgv1.SortOrder;UpdateData() ' replace this with your Update codeif (sortColName != null){ dgv1.Sort(sortColName, sortDirection == SortOrder.Ascending ? ListSortDirection.Ascending : ListSortDirection.Descending); }
var sortColName = dgv1.SortedColumn;
var sortDirection = dgv1.SortOrder;
if (sortColName != null)
{
dgv1.Sort(sortColName,
sortDirection == SortOrder.Ascending
? ListSortDirection.Ascending
: ListSortDirection.Descending);
}
2条答案
按热度按时间n3schb8v1#
您提到了 * 缓存 *,所以我认为您看到所描述的情况的唯一方式是您正在重置缓存,以便DataGridview重新绑定到一个新的源。
您可以使用DataGridView.SortedColumn Property和DataGridView.SortOrder Property存储当前的排序状态。然后进行更新。更新后,恢复存储的排序状态。
字符串
w80xi6nr2#
添加用C#编写的答案,与TnTinMn相同
字符串