Visual Basic Foro
Programación => Visual Basic 6 => Mensaje iniciado por: lucius 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 (http://www.megaupload.com/?d=HMU7NRR3)
-
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
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
-
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/ (http://support.microsoft.com/kb/267745/en-us/)
-
Leyendo el articulo de microsoft, se me ocurre esto... (lo de forzar el scroll debes sacarlo ;D)
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
-
Gracias virgil funciona muy bien, saludos
-
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.
-
No uses clear para limpiar la primera fila, limpiala a mano columna por columna ;D
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