Autor Tema: Problema con MSHFlexgrid cuando no tiene registros  (Leído 4843 veces)

0 Usuarios y 1 Visitante están viendo este tema.

lucius

  • Gigabyte
  • ****
  • Mensajes: 263
  • Reputación: +6/-5
    • Ver Perfil
Problema con MSHFlexgrid cuando no tiene registros
« en: Septiembre 29, 2011, 11:05:55 pm »
Cuando aplico un filtro o hago cualquier busqueda y el Hflexgrid queda vacio ya no se puede seleccionar ninguna fila aunque lo vuelva a cargar con registros, dejo el ejemplo que estoy utilizando, he bajado otros pero pasa lo mismo.
http://www.megaupload.com/?d=HMU7NRR3

Virgil Tracy

  • Kilobyte
  • **
  • Mensajes: 64
  • Reputación: +38/-1
    • Ver Perfil
Re:Problema con MSHFlexgrid cuando no tiene registros
« Respuesta #1 en: Septiembre 30, 2011, 07:13:07 am »
Te parecera una boludes la solucion,  pero obligandolo a que haga un scroll, el flexgrid vuelve a la normalidad  ;D

En tu ejemplo, en el botton de Quitar Filtro pone esto

Código: (vb6) [Seleccionar]
Private Sub Command1_Click()
Dim n As Long

With MSHFlexGrid1
     
     'calcular cuantas filas se necesitan
     'para hacer scroll
     
     n = .Height / .RowHeight(0)

     .Rows = n + 1
     .Row = n
     .TopRow = n

End With

rs.Filter = adFilterNone

End Sub

lucius

  • Gigabyte
  • ****
  • Mensajes: 263
  • Reputación: +6/-5
    • Ver Perfil
Re:Problema con MSHFlexgrid cuando no tiene registros
« Respuesta #2 en: Septiembre 30, 2011, 06:48:39 pm »
Muy buena tu solucion pero como el problema tambien aparece cuando no hay registros y al estar el codigo de busqueda dentro del change del textbox se scrollea a cada rato y se nota feo, intente probando colocando tu codigo en el evento gotfocus del MSHFlexgrid y me fue peor, la cuestion es que solo ejecute el codigo una sola vez cuando no haya registros y despues de obtener al menos 1 fila en el grid, ya me hize bolas.

Tambien encontre que se trata de un bug del control
http://support.microsoft.com/kb/267745/en-us/

Virgil Tracy

  • Kilobyte
  • **
  • Mensajes: 64
  • Reputación: +38/-1
    • Ver Perfil
Re:Problema con MSHFlexgrid cuando no tiene registros
« Respuesta #3 en: Octubre 01, 2011, 03:49:32 am »
Leyendo el articulo de microsoft, se me ocurre esto... (lo de forzar el scroll debes sacarlo ;D)

Código: (vb6) [Seleccionar]
Private Sub txtBuscar_Change()

With MSHFlexGrid1

    Set .DataSource = Nothing
    .Rows = 2
    .Clear

End With

If txtBuscar = "" Then
   rs.Filter = adFilterNone
Else
   rs.Filter = "Nombre like '" & txtBuscar + "%" & "'"
End If

If rs.RecordCount > 0 Then
   Set MSHFlexGrid1.DataSource = rs
End If

End Sub

lucius

  • Gigabyte
  • ****
  • Mensajes: 263
  • Reputación: +6/-5
    • Ver Perfil
Re:Problema con MSHFlexgrid cuando no tiene registros
« Respuesta #4 en: Octubre 01, 2011, 03:29:18 pm »
Gracias virgil funciona muy bien, saludos

zxs23

  • Megabyte
  • ***
  • Mensajes: 146
  • Reputación: +5/-2
    • Ver Perfil
Re:Problema con MSHFlexgrid cuando no tiene registros
« Respuesta #5 en: Diciembre 22, 2011, 04:47:10 pm »
hola Virgil Tracy el codigo en sí funciona correctamente pero al quedar vacio el recordset y no mostrar ningun registro tambien desaparecen las cabeceras no obstante estas vuelven a aparecen cuando hay algo en el recordset.

Si se pudiera solucionar de alguna forma estaria perfecto.

Saludos.

Virgil Tracy

  • Kilobyte
  • **
  • Mensajes: 64
  • Reputación: +38/-1
    • Ver Perfil
Re:Problema con MSHFlexgrid cuando no tiene registros
« Respuesta #6 en: Diciembre 23, 2011, 03:35:12 am »
No uses clear para limpiar la primera fila, limpiala a mano columna por columna ;D

Código: (VB) [Seleccionar]
Private Sub txtBuscar_Change()
Dim i As Long

With MSHFlexGrid1

    Set .DataSource = Nothing
    .Rows = 2
    '.Clear                    '<-- no usar clear
    For i = 0 To .Cols - 1
        .TextMatrix(1, i) = "" '<-- limpiar a mano la primera fila del flexgrid
    Next
   
End With

If txtBuscar = "" Then
   rs.Filter = adFilterNone
Else
   rs.Filter = "Nombre like '" & txtBuscar + "%" & "'"
End If

If rs.RecordCount > 0 Then
   Set MSHFlexGrid1.DataSource = rs
End If

Me.Caption = rs.RecordCount

End Sub