2009-06-08 8 views
10

Estoy usando un DataGridView en el formulario de Windows. Muestra solo dos columnas. De forma predeterminada, cuando se ejecuta la aplicación, si hago clic en los encabezados de columna, la vista de tabla de datos se ordena en función de esa columna. Sin embargo, quiero desactivar la ordenación en la vista de cuadrícula por completo. No pude encontrar una propiedad donde pudiera establecer Sorting = false, o algo así.Cómo evitar la clasificación de la vista de cuadrícula de datos

¿Alguien puede decirme cómo desactivar la clasificación de vista de cuadrícula?

Gracias :)

EDIT:

Sólo pensé que podría configurar columnas individuales como NotSortable (respuesta publicado más adelante). ¿Se puede hacer a nivel de vista de cuadrícula, en lugar de columnas individuales?

Respuesta

17

Bien, encontré la respuesta. Para cada columna que necesito para especificar explícitamente

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

así que escribí mi propia función en una clase de ayuda

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

y donde sea, necesito hacer rejilla ve unsortable, lo llamo así:

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

Esto funciona muy bien. Hice esto en un método de extensión y ahora puedo llamarlo de esta manera: 'dgv.SetGridViewSortState (DataGridViewColumnSortMode.NotSortable);' –

+0

¡Genial! Me alegro de que la solución te haya ayudado :) –

-1

Siempre puede manejar los eventos de clic de encabezado de columna y hacer doble clic en los eventos usted mismo, y no hacer nada en ellos.

+0

Lo intenté, pero aún así parece. –

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

web gridview tiene una propiedad AllowSorting que es mucho más fácil.

+0

Sí, eventualmente eso es lo que estoy haciendo. Sin embargo, aún está a nivel de columna y no a nivel de cuadrícula. –

+0

¡Genial! Funciona en VB.NET, me pregunto por qué no hay un voto explícito sobre esto. –

2

La clasificación es, en parte, una función de la fuente de datos. ¿Cuál es la fuente de datos en este caso? DataTable, quizás? Una opción es simplemente usar una fuente de datos que no admita la ordenación, que es casi la totalidad. List<T>, BindingList<T> etc. - no proporcione la clasificación.

Si tiene que usar DataView, usted podría (supongo) envuelva la vista con una vista personalizada que re-implementos IBindingList (volviendo false para SupportsSorting), sino simplemente cambiar los valores por columna es una mucho más fácil (a el punto en que sería una locura para hacer otra cosa ...)

-1

Mirando con .NET 3.0, el GridView tiene una propiedad llamada AllowSorting

Cuestiones relacionadas