【问题标题】:WPF Datagrid: Clear column sortingWPF Datagrid:清除列排序
【发布时间】:2012-11-04 07:25:40
【问题描述】:

我在我的应用程序中使用 WPF 数据网格,可以通过单击标题对列进行排序。

我想知道是否有任何方法可以以编程方式清除列的排序?

我尝试对一列进行排序,然后清除 MyDataGrid.Items.SortDescriptions,但该集合为空(即使一列已排序)。

我也试过了:

MyDataGridColumn.SortDirection = null;

问题是列指示消失了,但是在编辑单元格和切换行时排序仍然发生。

有没有办法清除列的排序?

编辑(为清楚起见):问题是如果用户重新单击同一列标题,我希望允许再次排序,因此将 CanUserSort 设置为 false 将是有问题的,即使它是在 XAML 中完成的.简而言之,我试图做的是,一旦排序的列有一个被修改的单元格,就阻止对行进行排序。我想强制用户重新点击标题。

【问题讨论】:

  • 我不知道当你编辑一行时它会求助。
  • @Blam 是的。如果您选择另一行,则已编辑的单元格将对其行进行排序。
  • 从 CollectionView 中清除例如:stackoverflow.com/questions/5401912/…

标签: c# wpf wpfdatagrid


【解决方案1】:

这是你需要的:

using System.Windows.Data;
using System.ComponentModel;

ICollectionView view = CollectionViewSource.GetDefaultView(grid.ItemsSource);
if (view != null)
{
    view.SortDescriptions.Clear();
    foreach (DataGridColumn column in grid.Columns)
    {
        column.SortDirection = null;
    }
}

原文来源:https://stackoverflow.com/a/9533076/964053

我想知道的是,M$ 不使用 ClearSort() 方法是怎么想的...

【讨论】:

  • 是的,想知道同样的事情。当 ItemSourceProperty 更改为 clear 时,我最终使用了附加行为。
【解决方案2】:

将所有列的CanUserSort 设置为false -

foreach (var a in MyDataGrid.Columns)
{
    a.CanUserSort = false;
}

【讨论】:

  • 这不会阻止列再次排序吗?我只是想删除特定列的排序,而不是对所有列禁用它。
  • 那么,这不是你想要的吗?
  • 你不能将 xaml 中的那些特定列的这个属性设置为 false 吗?
  • @RV1987 我认为他希望用户能够手动对所有列进行排序,但他也希望以编程方式更改排序以响应用户输入(例如,按下按钮)
  • 问题是,如果用户重新单击相同的列标题,我希望允许再次排序,因此将 CanUserSort 设置为 false 将是有问题的,即使它是在 XAML 中完成的。简而言之,我试图做的是,一旦排序的列有一个被修改的单元格,就阻止对行进行排序。我想强制用户重新点击标题。 @ean5533 正确:)
【解决方案3】:

作为扩展...

    public static  void ClearSort(this DataGrid grid)
    {
        var view = CollectionViewSource.GetDefaultView(grid.ItemsSource);
        view?.SortDescriptions.Clear();

        foreach (var column in grid.Columns)
        {
            column.SortDirection = null;
        }
    }

【讨论】:

    【解决方案4】:

    在 XAML 中,您可以使用此代码将其关闭。

    <DataGridTextColumn Header="Header Name" CanUserSort="False"/>
    

    【讨论】:

    • 问题是排序后如何清除它,而不是如何完全删除排序。
    【解决方案5】:

    这是我在我的程序中使用的(我有一个 RESET 按钮并使用它来清除数据网格上的排序)。

    System.Windows.Data.CollectionViewSource.GetDefaultView(MY_DATA_GRID.ItemsSource).SortDescriptions.Clear();
    

    像魅力一样工作。

    干杯,伊托

    【讨论】:

      【解决方案6】:

      在 DataGrid 的 XAML 代码中,您可以添加 CanUserSortColumns="False"。那么没有人将能够在 rumtime 对任何列进行排序。

      【讨论】:

      • 问题中已经提到,这种技术不适合。
      • @Ren - 这是一个小代码片段,用于禁用 DataGridView 的排序。 for (int i = 0; i
      【解决方案7】:

      这是一个小代码sn-p,用于禁用DataGridView的排序。

      for (int i = 0; i < dataGridView1.ColumnCount; i++)
      {
          dataGridView1.Columns[i].SortMode = DataGridViewColumnSortMode.NotSortable;
      }
      

      【讨论】:

      • 如果你读了这个问题,你会发现这不是作者想要的。他希望在用户对单元格进行编辑时防止列自动排序,但他希望启用排序功能,以便用户仍然可以单击列标题对表格进行排序。
      猜你喜欢
      • 2019-06-20
      • 2014-11-05
      • 2013-12-31
      • 2010-11-17
      • 2010-12-15
      • 1970-01-01
      • 2011-09-04
      • 2011-08-19
      • 2012-02-16
      相关资源
      最近更新 更多