2012-11-15 28 views
10

Sto utilizzando un Datagrid WPF nella mia applicazione in cui le colonne possono essere ordinate facendo clic sull'intestazione.DataGrid WPF: Cancella ordinamento colonna

Mi chiedevo se esistesse un modo per cancellare l'ordinamento di una colonna in modo programmatico?

Ho provato a ordinare una colonna e quindi a cancellare MyDataGrid.Items.SortDescriptions, ma quella raccolta era vuota (anche se una colonna è stata ordinata).

Ho anche provato:

MyDataGridColumn.SortDirection = null; 

Il problema è che l'indicazione colonna è andato, ma l'ordinamento si verifica ancora quando si modifica una cella e commutazione righe.

Non c'è modo di cancellare l'ordinamento di una colonna?

Modifica (per chiarezza): il problema è che mi piacerebbe consentire nuovamente l'ordinamento se l'utente fa nuovamente clic sulla stessa intestazione di colonna, quindi impostare CanUserSort su false sarebbe problematico, anche se fosse stato fatto nel XAML. In breve, quello che sto tentando di fare è impedire che le righe vengano ordinate dopo che una colonna ordinata ha una cella che è stata modificata. Voglio forzare l'utente a fare nuovamente clic sull'intestazione.

+0

Non sapevo che sarebbe ricorso quando si modifica una riga. – Paparazzi

+0

@Blam Sì, lo fa. Se selezioni un'altra riga, la cella che è stata modificata avrà la sua riga ordinata. –

+0

Cancellare dal CollectionView ad esempio: http://stackoverflow.com/questions/5401912/how-to-remove-wpf-grid-sort-arrow-after-clearing-sort-descriptions – Vibes

risposta

4

Impostare CanUserSort-false per tutte le colonne -

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

Questo non impedirà le colonne dall'ordinamento di nuovo? Sto solo cercando di rimuovere l'ordinamento per una particolare colonna, non di disabilitarla per tutte le colonne. –

+0

Quindi, non è quello che vuoi? –

+0

Non puoi impostare per quelle particolari colonne in xaml questa proprietà su false? –

-2

Nel codice XAML di DataGrid è possibile aggiungere CanUserSortColumns = "false". Quindi Noboady sarebbe in grado di ordinare qualsiasi colonna durante il rumtime.

+0

È già stato menzionato nella domanda che questa tecnica non è adatta. – Ren

+0

@Ren - Questo è un piccolo snipet di codice per disabilitare l'ordinamento di DataGridView. for (int i = 0; i Vaibhav

-2

Questo è un piccolo snippet di codice per disabilitare l'ordinamento di DataGridView.

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

Se leggi la domanda, vedrai che questo non è ciò che l'autore vuole. Vuole impedire automaticamente l'ordinamento delle colonne quando gli utenti effettuano le modifiche alle celle, ma vuole lasciare l'ordinamento abilitato in modo che gli utenti possano ancora fare clic sull'intestazione di una colonna per ordinare la tabella, se lo desiderano. – Ren

10

Ecco quello che vi serve:

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; 
    } 
} 

Fonte originale: https://stackoverflow.com/a/9533076/964053

Quello che voglio sapere è ciò che è stato M $ pensare per non mettere un metodo ClearSort() ...

1

In XAML è possibile disattivarlo utilizzando questo codice.

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