Tuve este problema hoy también. Tengo un DataGridView
que intercambie a cabo su DataSource
(un DataTable
) con regularidad. Yo era capaz de eliminar finalmente el tipo especificado por el usuario cuando el usuario hace clic en un encabezado de columna usando el siguiente código:
If dgv.SortedColumn IsNot Nothing AndAlso dgv.DataSource IsNot Nothing Then
Dim dt_Sender As DataTable = DirectCast(dgv.DataSource, DataTable)
dt_Sender.DefaultView.Sort = dt_Sender.Columns(0).ColumnName & " ASC"
End If
Esto funciona porque tengo una columna oculta en mi DataGridView
que siempre está en la posición de índice-columna 0. Es una clave primaria entera para los datos subyacentes que se clasifica en la carga de datos.
* Es posible que deba nombrar su columna de índice en el DataTable
si aún no lo ha hecho (por ejemplo, dt_Sender.Columns(0).ColumnName = "colIndex"
).
* Si se utiliza un objeto BindingSource
como intermediario entre su DataGridView
y su DataTable
(como muchas personas parecen hacerlo), entonces tendrá que anidan su DirectCast
adecuadamente en la segunda línea (es decir, Dim dt_Sender As DataTable = DirectCast(dgv.DataSource, DataTable)
cambiaría a algo como: Dim dt_Sender As DataTable = DirectCast(DirectCast(dgv.DataSource, BindingSource), DataTable)
).
* Además, si su DataTable
pasa a estar poblado por una consulta de SQL Server que no tiene una clave primaria entera (¿quizás un GUID?), Entonces podría alterar su consulta fuente para incluir un nuevo número de fila y luego ocultar la nueva columna en su DataGridView
. P.ej.:
SELECT Row_Number() OVER (ORDER BY (SELECT '')) AS RowNumber, Column1, Column2, Column3
FROM SourceTable
Esperemos que esta solución sea útil para otra persona en el futuro.
¿Esta es una cuadrícula de datos encuadernados? –
Sí. Pero incluso estoy cambiando DataSources. Estoy llamando DataSource = null y Columns.Clear antes del cambio. – BuddyJoe
Me gustaría poder permitir una actualización pero guardar el orden de clasificación. Pero si el usuario cambia lo que quiere mirar (a través de un TreeView), entonces me gustaría que el orden de clasificación desaparezca. ¿Es esto un error? He intentado algunas cosas, no puedo encontrar una manera de hacer que desaparezca. – BuddyJoe