datagridview更新后如何保持标题排序

问题描述 投票:0回答:2

在我的示例中,“DEProduct”列按 desc 排序。

当我进行 datagridview 更新时,所有内容都会直接恢复为默认数据源值,并且我会丢失列标题排序。

我有很多列,那么如何返回此列标题排序,而不检查选择哪一列之前的所有列,并在选择之后手动触发它?

winforms datagridview
2个回答
4
投票

您提到数据源,所以我可以看到您所看到的情况的唯一方法是您正在重置数据源,以便 DataGridview 重新绑定到新源。

您可以使用 DataGridView.SortedColumn 属性DataGridView.SortOrder 属性 存储当前排序状态。然后进行更新。更新后,恢复存储的排序状态。

  ' 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

0
投票

添加用 C# 编写的答案,与 TnTinMn 相同

var sortColName = dgv1.SortedColumn;
var sortDirection = dgv1.SortOrder;


UpdateData() ' replace this with your Update code

if (sortColName != null)
{
     dgv1.Sort(sortColName,
          sortDirection == SortOrder.Ascending
              ? ListSortDirection.Ascending
              : ListSortDirection.Descending);
 }
© www.soinside.com 2019 - 2024. All rights reserved.