C# WPF Datagrid:清除列排序
我在我的应用程序中使用了一个WPF数据网格,通过点击标题可以对列进行排序 我想知道是否有任何方法可以通过编程清除列的排序 我尝试对一列进行排序,然后清除C# WPF Datagrid:清除列排序,c#,wpf,wpfdatagrid,C#,Wpf,Wpfdatagrid,我在我的应用程序中使用了一个WPF数据网格,通过点击标题可以对列进行排序 我想知道是否有任何方法可以通过编程清除列的排序 我尝试对一列进行排序,然后清除MyDataGrid.Items.SortDescriptions,但该集合为空(即使对一列进行了排序) 我还尝试: MyDataGridColumn.SortDirection = null; 问题是列指示消失了,但在编辑单元格和切换行时仍会进行排序 没有办法清除列的排序吗 编辑(为了清楚起见):问题是,如果用户重新单击同一列标题,我希望允许
MyDataGrid.Items.SortDescriptions
,但该集合为空(即使对一列进行了排序)
我还尝试:
MyDataGridColumn.SortDirection = null;
问题是列指示消失了,但在编辑单元格和切换行时仍会进行排序
没有办法清除列的排序吗
编辑(为了清楚起见):问题是,如果用户重新单击同一列标题,我希望允许再次排序,因此将CanUserSort设置为false会有问题,即使它是在XAML中完成的。简言之,我试图做的是,一旦一个已排序的列有一个已修改的单元格,就防止对行进行排序。我想强制用户重新单击标题。将所有列的
CanUserSort
设置为false
-
foreach (var a in MyDataGrid.Columns)
{
a.CanUserSort = false;
}
在DataGrid的XAML代码中,可以添加CanUserSortColumns=“False”。然后,noboady将无法同时对任何列进行排序。这是一个小代码段,用于禁用对
DataGridView
的排序
for (int i = 0; i < dataGridView1.ColumnCount; i++)
{
dataGridView1.Columns[i].SortMode = DataGridViewColumnSortMode.NotSortable;
}
for(int i=0;i
以下是您需要的:
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;
}
}
原始资料来源:
我想知道的是M$没有在XAML中放入ClearSort()方法的想法…您可以使用以下代码将其关闭
<DataGridTextColumn Header="Header Name" CanUserSort="False"/>
这是我在程序中使用的(我有一个重置按钮,用它来清除数据网格上的排序) 工作起来很有魅力 干杯,国际航空运输组织作为延伸
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;
}
}
这不会阻止列再次被排序吗?我只是想删除特定列的排序,而不是禁用所有列的排序。那么,这不是你想要的吗?你不能在xaml中将这些特定列的此属性设置为false吗?@RV1987我想他希望用户能够手动对所有列进行排序,但是,他还希望通过编程更改排序以响应用户输入(比如,按下按钮)。问题是,如果用户重新单击同一列标题,我希望再次允许排序,因此将CanUserSort设置为false会有问题,即使它是在XAML中完成的。简言之,我试图做的是,一旦一个已排序的列有一个已修改的单元格,就防止对行进行排序。我想强制用户重新单击标题@ean5533正确:)我不知道当你编辑一行时它会出现。@Blam是的,它会。如果选择另一行,被编辑的单元格将对其行进行排序。例如,从CollectionView中清除:问题中已经提到,这种技术不适合。@Ren-这是一个用于禁用DataGridView排序的小代码。对于(int i=0;i
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;
}
}