2009-06-08 15 views
10

Sto utilizzando un DataGridView su un modulo di Windows. Visualizza solo due colonne. Per impostazione predefinita, quando si esegue l'applicazione, se si fa clic sulle intestazioni delle colonne, la vista datagrid viene ordinata in base a tale colonna. Tuttavia, voglio disabilitare completamente l'ordinamento nella vista griglia. Non ero in grado di trovare una proprietà in cui potessi impostare sorting = false, o qualcosa del genere.Come impedire l'ordinamento della vista griglia dati

Qualcuno può dirmi come disabilitare l'ordinamento della vista della griglia?

Grazie :)

EDIT:

Proprio pensato che avrei potuto impostare le singole colonne come NotSortable (risposta postato qui sotto). Può essere eseguito a livello di vista griglia anziché a colonne singole?

risposta

17

Ok, ho trovato la risposta. Per ogni colonna ho bisogno di specificare esplicitamente

this.dgv.Columns[1].SortMode = DataGridViewColumnSortMode.NotSortable; 

Così ho scritto la mia funzione in una classe Helper

/// <summary> 
/// Sets the sort mode for the data grid view by setting the sort mode of individual columns 
/// </summary> 
/// <param name="dgv">Data Grid View</param> 
/// <param name="sortMode">Sort node of type DataGridViewColumnSortMode</param> 
public static void SetGridViewSortState(DataGridView dgv, DataGridViewColumnSortMode sortMode) 
{ 
    foreach (DataGridViewColumn col in dgv.Columns) 
     col.SortMode = sortMode; 
} 

e ovunque, ho bisogno di fare griglia vede non ordinabile, io lo chiamo così:

Helper.SetGridViewSortState(this.dgv, DataGridViewColumnSortMode.NotSortable); 
+0

Questo funziona bene. Ho fatto questo in un metodo di estensione e ora posso chiamarlo in questo modo: 'dgv.SetGridViewSortState (DataGridViewColumnSortMode.NotSortable);' –

+0

Cool! Sono contento che la soluzione ti abbia aiutato :) –

-1

Si può sempre gestire l'intestazione della colonna e fare doppio clic sugli eventi autonomamente e non fare nulla in essi.

+0

Ho provato, ma è ancora diverso. –

3
For i = 0 To DataGridView1.Columns.Count - 1 
    DataGridView1.Columns.Item(i).SortMode = DataGridViewColumnSortMode.Programmatic 
Next i 

web GridView ha un'AllowSorting proprietà che è molto più facile!

+0

Sì, alla fine è quello che sto facendo. Tuttavia, è ancora a livello di colonna e non a livello di griglia. –

+0

Cool! Funziona in VB.NET, mi chiedo perché non ci sia un upvote su questo. –

2

L'ordinamento è, in parte, una funzionalità dell'origine dati. Qual è la fonte dei dati in questo caso? DataTable, forse? Un'opzione è semplicemente quella di usare una fonte di dati che non supporta l'ordinamento, che è quasi tutto. List<T>, BindingList<T> ecc. Non fornire l'ordinamento.

Se è necessario utilizzare DataView, si potrebbe (immagino) avvolgere la vista con una visualizzazione personalizzata che ri-attrezzi IBindingList (ritorno false per SupportsSorting), ma semplicemente cambiando i valori per colonna è un molto più facile (a il punto in cui sarebbe folle a fare altro ...)

-1

Fissando con .NET 3.0, il GridView ha una proprietà chiamata AllowSorting

Problemi correlati