none
Evitar el Sort Ascending o Descending al pulsar sobre la Columna de DataGridView RRS feed

  • Pregunta

  •  

    Hola amigos, tengo un DataGridView y me gustaría que al pulsar sobre la cabecera de cada columna, evitar que ordene los datos y pueda seleccionar todos los registros de dicha columna.

     

    No sé que propiedad tendría que deshabilitar mediante código o mediante el panel de propiedades.

     

    Así me gustaría agregarle un context menú a la columna para trabajar con todos los datos de dicha columna.

     

    Gracias.

    Francisco J.

    lunes, 6 de agosto de 2007 10:34

Respuestas

Todas las respuestas

  • Hola Francisco,

     

    ¿Como haces el databinding?, si lo haces desde tiempo de diseño debes seguir los siguientes pasos.

     

    1º. Comprobar en la colección de columnas (propiedad Columns, pinchas en coleccion), que cada una de ellas tiene la propiedad SortMode a NotSortable, esto hace que no se ordenen cuando pinchas en la columna.

    2º. Que la propiedad del DataGridView SelectionMode esté a ColumnHeaderSelect. Con esto consigues que la selección sea por columna, pero hace que no se pueda seleccionar la fila

    3º. Añadir un ContextMenuStrip (por defecto se llamará ContextMenuStrip1), luego el DataGridView tiene una propiedad llamada ContextMenuStrip, pues lo asocias con éste que has creado. Con esto tendrías un menú contextual para el grid.

     

    Si el databinding lo haces desde código, pues es hacer lo mismo pero desde código.

     

    Espero que te haya servido.

     

    • Propuesto como respuesta kakaroto2012 miércoles, 25 de noviembre de 2009 21:48
    lunes, 6 de agosto de 2007 12:44
  • Hola Carmen, muchas gracias voy a probarlo.

     

    Pues te comento, lo que tengo es una capa geográfica, ya que trabajo con Sistemas de Información Geográfica (SIG) y la capa geográfica se refiere a entidades espaciales vinculadas a datos alfanuméricos (en formato DBF). El formato se llama Shapefile.

     

    Este fichero tiene dicha base de datos en formato DBF y yo lo que quería hacer era vincular los datos sin acudir a gestion de Base de Datos, total el código que usé es el siguiente:

     

    Code Snippet

    Private Sub PoblarTabla()

    Dim shp As New MapWinGIS.Shapefile

    shp = mainMap.get_GetObject(Legend1.SelectedLayer)

    Dim m_DataTable As DataTable

    Dim m_field As MapWinGIS.Field

    m_DataTable = New DataTable()

    Dim m_datacolumn As DataColumn

    Dim m_datarow As DataRow

    For fld As Integer = 0 To shp.NumFields - 1

    m_datacolumn = New DataColumn

    m_field = shp.Field(fld)

    m_datacolumn.ColumnName = m_field.Name

    m_DataTable.Columns.Add(m_datacolumn)

    Next

    For shp1 As Integer = 0 To shp.NumShapes - 1

    m_datarow = m_DataTable.NewRow

    For fld As Integer = 0 To shp.NumFields - 1

    m_datarow(fld) = shp.CellValue(fld, shp1)

    Next

    m_DataTable.Rows.Add(m_datarow)

    Next

     

    ToA.DataGridView1.DataSource = m_DataTable

    End Sub

     

     

    Ese es el código que opera con cada entidad espacial y las columnas del dbf para pasarlo a un DataTable y posteriormente usar ese datatable como recurso para el DataGridView. Pero no sabia como hacer lo de la columna, y al escoger en la propiedad Columns - Colección. No me sale nada al no estar vinculado a datos. Probaré mediante diseño.

     

    Gracias.

    Un saludo.

    Francisco J.

    lunes, 6 de agosto de 2007 18:16
  • Amiga acado de probarlo y no me deja poner SelectionMode a ColumnHeaderSelect debido a que una o más columnas tiene el SortMode asignado, y no sé como quitárselo.

     

    Agradecería cualquier respuesta.

     

    Gracias.

    Francisco J.

     

    lunes, 6 de agosto de 2007 18:20
  • Conseguido mediante código jejeje:

     

    Pero ahora tengo otro problema, ¿no es posible tener los dos tipos de selección al mismo tiempo? Es decir, si quiero seleccionar tanto con la cabecera del campo todas las entidades, como al seleccionar una entidad, todos los campos que la componen, había probado lo siguiente pero no me permite.

     

    Code Snippet

     

    Dim col As Integer

    For col = 0 To DataGridView1.Columns.Count - 1

    DataGridView1.Columns(col).SortMode = DataGridViewColumnSortMode.NotSortable

    Next

     

     

    Y lo que probé para cambiar el SelectionMode fue lo siguiente:

     

    Code Snippet

     

    DataGridView1.SelectionMode = DataGridViewSelectionMode.ColumnHeaderSelect And DataGridView.SelectionMode.RowHeaderSelect

     

     

    Gracias de antemano.

    Francisco J.

    lunes, 6 de agosto de 2007 18:31
  • Se me ocurre que mediante una opción del menú contextual puedas indicar como quieres seleccionar los datos.
    martes, 7 de agosto de 2007 6:03
  •  

    Ey muy buena idea.

     

    O también mediante un botón en la barra de herramientas. lo pruebo y os comento.

     

    Saludos.

    Francisco J.

    martes, 7 de agosto de 2007 9:52
  • Me alegro mucho, cuando lo hayas comprobado, por fi, marca la respuesta que te he dado como que te ha servido, de esta manera si alguien busca lo mismo en el foro verá que las respuestas dadas funcionan y le puede servir.

     

    Saludos.

     

    martes, 7 de agosto de 2007 10:16
  • No he entendido bien como has conseguido que al pinchar en la cabecera de la columna quietes el orden y selecciones todos los registros solo de esa columna. Podrías poner el código por favor? Muchas gracias

    viernes, 14 de septiembre de 2007 11:35