winforms 如何在datagridview更新后保持表头排序

7qhs6swi  于 6个月前  发布在  其他
关注(0)|答案(2)|浏览(76)

在我的例子中,列'DEProduct'的排序是desc。


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



我有很多列,那么我如何才能回到这个列头排序,而不是在选择哪一个之前检查它们,然后手动触发它?

n3schb8v

n3schb8v1#

您提到了 * 缓存 *,所以我认为您看到所描述的情况的唯一方式是您正在重置缓存,以便DataGridview重新绑定到一个新的源。
您可以使用DataGridView.SortedColumn PropertyDataGridView.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

字符串

w80xi6nr

w80xi6nr2#

添加用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);
 }

字符串

相关问题