Problema con MSHFlexGrid

Tengo una aplicación con un form de consulta de xtabla la cual muestro en una rejilla, utilizo un campo text para filtrar datos mientras escribo, hasta allí todo OK pero si la consulta me devuelve cero registros y luego quito el filtro y quiero seleccionar una fila de la rejilla, esta no me lo permite, es como si se bloqueara.
¿Cual es el error.?
Cualquier ayuda me serviría de mucho.
Respuesta
1
¿Cómo filtras los datos?
¿Se restablecen todos los registros cuanto eliminas el filtro?
Te espero...
Los datos los filtro a través de una variable RecordSet enlazado a un objeto Connection.
En cuanto a lo otro si se restablecen los datos, estoy codificando en el evento Change del objeto Text.
Si el texto="" then Filtro=""
Espero que entiendas y tengas alguna solución.
Gracias
¿Podrías darme un fragmento de código? Como enlazas con el recordset y filtras los registros.
Declaro las variables:
Dim db As Connection
Dim rs As RecordSet
En el evento Load del Form abro la conexión con un ODBC (odbcverbal)que he creado el cual esta enlazado con la BD:
Set db = New Connection
db.CursorLocation = adUseClient
db.Open "PROVIDER=MSDASQL;dsn=odbcverbal;uid=;pwd=;"
Luego en el form tengo un campo text donde dígito lo que quiero filtrar y la rejilla para mostrar los datos.
Codigo Form_Activate
'hago la consulta
set rs=new recordset
rs.open "select * from tablaxy",db
'le paso los datos al flex
set MSHFlex1.datasource=rs
Los datos aparecen en la rejilla, ahora el filtro.
Codigo TxtFiltro_Change
if txtfiltro="" then rs.filter="" : Exit Sub
if len(txtfiltro)>0 then
rs.filter="campoBDx like '" & txtfiltro & "%" & "'"
end if
Si encuentra registros OK me puedo desplazar dentro del flex, el problema es después de haber hecho un filtro con cero registros.
Espero que se entienda y me brindes alguna solución.
Gracias.
He simulado tu código.
En un formulario tengo:
- Combobox
- Textbox
- MsHFlexGrid
Option Explicit
Dim db As Connection
Dim rs As Recordset
Private Sub Form_Activate()
Set rs = New Recordset
rs.open "select * from Tabla", db
Set MSHFlex1.DataSource = rs
cargaCampos
End Sub
Private Sub Form_Load()
Set db = New Connection
db.CursorLocation = adUseClient
db.open "PROVIDER=MSDASQL;dsn=ODBC;uid=;pwd=;"
End Sub
Private Sub txtFiltro_Change()
If txtFiltro = "" Then rs.Filter = "": Exit Sub
If Len(txtFiltro) > 0 Then
rs.Filter = Combo1.Text & " like '" & txtFiltro & "%" & "'"
End If
End Sub
Sub cargaCampos()
Dim i As Integer
For i = 0 To rs.Fields.Count - 1
Combo1.AddItem rs.Fields(i).Name
Next i
End Sub
El código está OK, pero el problema insisto, es cuando selecciono las filas de la rejilla. Haz una Prueba seleccionando las filas cuando cargue el formulario, luego filtra registros existentes y selecciona nuevamente (Ej. por un Campo Apellido: dígito "al" suponiendo que hayan 2 registros "ALBÁN, ALARCÓN", filtra los dos, seguidamente dígito "z", como no existen registros que comiencen con esas letras devuelve cero registros. Luego borra los tres caracteres digitados se tiene que borrar el filtro y mostrar todos los registros. Ahora trata de seleccionar una fila de la rejilla. ¿?
Espero tus comentarios.
Saludos
Creo que has topado con un bug del control.
Supongo que como yo habrás probado con otros grids, con datagrid va bien.
Siento no poder ayudarte.

Añade tu respuesta

Haz clic para o

Más respuestas relacionadas