2012-11-15 274 views
10

我在我的應用程序中使用WPF Datagrid,其中可以通過單擊標題對列進行排序。WPF Datagrid:清除列排序

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

我試着對一列進行排序,然後清除MyDataGrid.Items.SortDescriptions,但那個集合是空的(即使一列被排序)。

我也嘗試:

MyDataGridColumn.SortDirection = null; 

的問題是,列指示了,但排序編輯單元格並切換行時仍然發生。

有沒有辦法清除一個列的排序?

編輯(爲清楚起見):問題是如果用戶重新點擊相同的列標題,我想再次排序,因此將CanUserSort設置爲false會有問題,即使它是在XAML。總之,我試圖做的是防止行被排序,一旦排序的列有一個被修改的單元格。我想強制用戶重新點擊標題。

+0

我不知道它會在你編輯一行時求助。 – Paparazzi

+0

@Blam是的,它的確如此。如果您選擇另一行,則編輯的單元格將對其行進行排序。 –

+0

從CollectionView清除,例如: http://stackoverflow.com/questions/5401912/how-to-remove-wpf-grid-sort-arrow-after-clearing-sort-descriptions – Vibes

回答

4

設置CanUserSortfalse所有列 -

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

這不會阻止列從再次排序?我只是想刪除特定列的排序,而不是爲所有列禁用它。 –

+0

那是不是你想要的? –

+0

你不能爲xaml這個屬性中的那些特定列設置爲false嗎? –

-2

在數據網格您的XAML代碼可以添加CanUserSortColumns = 「FALSE」。然後noboady將能夠在朗姆酒時間排序任何列。

+0

它已經在問題中提到,這種技術是不適合的。 – Ren

+0

@人 - 這是一個小代碼snipet禁用DataGridView的排序。 對(INT I = 0;我 Vaibhav

-2

這是一個小的代碼片段,用於禁用排序DataGridView

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

如果你看過這個問題,你會發現這不是作者想要的。他希望在用戶對單元格進行編輯時自動阻止列排序,但他希望啓用排序功能,以便用戶仍然可以單擊列標題對錶格進行排序(如果他們願意的話)。 – Ren

10

這裏是你需要的東西:

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()方法...

1

在XAML中,您可以使用此代碼將其關閉。

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