2010-12-02 65 views

Respuesta

14

No, creo que configurar SortMode en la columna directamente es lo mejor posible. Pero, sinceramente, ¿a quién le importa? ¿Qué hay de malo en un simple bucle?

+1

hay un pequeño problema con un bucle para establecer el sortmode columna individual, por ejemplo, permitir al usuario añadir más columnas, entonces usted tiene que re-loop todo de nuevo, o encuentre la columna agregada y configure su modo de sortear. eso es un poco más de trabajo (para el caso de re-bucle, en un caso extremo imposible de agregar una sola columna a un ya miles de columnas existentes, eso llevaría mucho tiempo) – am05mhz

13

¿Qué tiene esto de malo? Si te molesta para recorrer las columnas o si tiene múltiples DataGridView de, puede escribir un método de extensión para esto:

public static class DatatGridViewExtensions 
{ 
    public static void SetColumnSortMode(this DataGridView dataGridView, DataGridViewColumnSortMode sortMode) 
    { 
     foreach (var column in dataGridView.Columns) 
     { 
      column.SortMode = sortMode; 
     } 
    } 
} 

utilizar de esta manera:

BalancesGridView.SetColumnSortMode(DataGridViewColumnSortMode.NotSortable); 
+0

Esto realmente no logra nada. Esto hace que todas las columnas en la vista de tabla de datos no se puedan ordenar. El método de extensión en sí no es una mala idea, pero está incompleto. Necesita tener otro parámetro y tal vez incluso una sobrecarga para permitir el ingreso de una identificación de columna, nombre de columna o una colección de cualquiera. –

+2

@Joel Etherton: Lea su pregunta nuevamente. El OP quiere deshabilitar la clasificación de encabezado de columna en general. – VVS

+0

tengo que trabajar con una ligera modificación: pública SetColumnSortMode static void (esto dataGridView DataGridView, DataGridViewColumnSortMode sortMode) { foreach (columna DataGridViewTextBoxColumn en dataGridView.Columns) {dataGridView.Columns [column.Name] .SortMode = DataGridViewColumnSortMode. NotSortable; } } – fa1c0n3r

3

me encontré con este problema hoy en día. Escribí este método y lo llamé en el evento de carga de formulario.

public void DisableGridviewSorting(DataGridView grid, int index) 
    { 
     //Index = DataGridView.Columns.Count 
     for (int i = 0; i < index; i++) 
     { 
      grid.Columns[i].SortMode = DataGridViewColumnSortMode.NotSortable; 
     } 
    } 

Parece que está bastante atascado bucle a través de la DataGridView no importa cómo lo haga, a menos que utilice los datos consolidados. Luego puede configurar no ordenar para cada columna individual.

7

No sé por qué nadie se sugiere LINQ manera de hacer esto:

BalancesGridView.Columns.Cast<DataGridViewColumn>().ToList().ForEach(f => f.SortMode = DataGridViewColumnSortMode.NotSortable); 
+2

Esto realmente no ayuda con el rendimiento. Solo hace que el código sea corto. –

2

Si se construye el DataGridView en tiempo de ejecución, puede desactivar columna de ordenación medida que se agregan las columnas utilizando el evento ColumnAdded:

private void BalancesGridView_ColumnAdded(object sender, System.Windows.Forms.DataGridViewColumnEventArgs e) 
{ 
    e.Column.SortMode = DataGridViewColumnSortMode.NotSortable; 
} 
0

En VB utilizo un poco de subrutina que llamo para cada vgd donde quiero las columnas que se unsortable:

Public Sub subNo_Sort_DGV_Columns(dgv As DataGridView) 

    For intColumn_Count As Integer = 1 To dgv.Columns.Count - 1 
    dgv.Columns(intColumn_Count).SortMode = _ DataGridViewColumnSortMode.NotSortable 
    Next 

End Sub 
1

lo he hecho de esta manera:

private void gvItReq_RowsAdded(object sender, DataGridViewRowsAddedEventArgs e) 
{ 
    for (int colIdx = 0; colIdx < gvItReq.Columns.Count; colIdx++) 
     gvItReq.Columns[colIdx].SortMode = DataGridViewColumnSortMode.NotSortable; 
} 
+0

¿Podría por favor elaborar más su respuesta agregando un poco más de descripción sobre la solución que proporciona? – abarisone

+0

Funcionará, pero esta es una mala manera de hacerlo. Para cada fila agregada, configurará el modo de ordenamiento de la misma columna una y otra vez ... – ehh

0

La mejor manera que he encontrado para evitar que la clasificación es definir es definir un bucle cuando se piensa que tiene a muchas columnas que tratar.

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

¿Qué sucede si la longitud de la columna es menor a 10? Esto lanzará una excepción. – InspiredCoder

+0

pobre ejemplo de un bucle y el autor de la pregunta específicamente solicitó una alternativa a un bucle. también acaba de agregar desorden a la Q & A – workabyte

4

bueno, esto es un poco viejo, pero hay un pequeño problema con un bucle para establecer el sortmode columna individual, por ejemplo, permitir al usuario añadir más columnas, entonces usted tiene que re-loop todo de nuevo, o encuentre la columna agregada y configure su modo de sortear. eso es un poco más trabajo.

la solución que encontré es como este enlace: Disable sorting when clicking DataGridView column header

en ella, que acaba de agregar un controlador de eventos de ColumnAdded para que DataGridView, por lo que cada vez que la cuadrícula de datos agrega la columna, se establece automáticamente como no clasificable

esto es realmente como la respuesta de @ OldDog, la diferencia es que en su respuesta, el sortmode se establece de una manera indirecta.

Private Sub DataGridView1_ColumnAdded(sender As Object, e As DataGridViewColumnEventArgs) Handles DataGridView1.ColumnAdded 
    e.Column.SortMode = DataGridViewColumnSortMode.NotSortable 
End Sub 
4

Digo que recorrer las columnas no es una gran respuesta, especialmente si su fuente de datos está cambiando de vez en cuando. Una línea de código en el evento ColumnAdded hace el truco:

e.Column.SortMode = DataGridViewColumnSortMode.NotSortable 
Cuestiones relacionadas