Visual Basic - MSHFLexgrid

Life is soft - evento anual de software empresarial
   
Vista:

MSHFLexgrid

Publicado por Ezequiel (9 intervenciones) el 17/11/2007 13:35:25
HOLA A TODOS, TENGO UN MSHFlexgrid y quiero ordenar alfabeticamente los datos de la columna 2 y una vez ordenados se podria realizar que al apretar una letra del teclado el foco de la fila empiece a partir de la letra que ingrese.
Muchas gracias
Valora esta pregunta
Me gusta: Está pregunta es útil y esta claraNo me gusta: Está pregunta no esta clara o no es útil
0
Responder

RE:MSHFLexgrid

Publicado por Richard Montero (25 intervenciones) el 17/11/2007 19:27:55
Ezequiel:

Podes hacerlo de la siguiente manera:

Primero declará en el formulario las siguientes constantes:

Private m_iSortCol As Integer
Private m_iSortType As Integer

'Suponiendo que tu objeto grid se llame "MSHFlexGrid1"

'en el vento doble click escribí el siguiente código
'********************************************************
Private Sub MSHFlexGrid1_DblClick()
'-------------------------------------------------------------------------------------------
' el código del evento DblClick de la cuadrícula permite ordenar columnas
'-------------------------------------------------------------------------------------------

Dim i As Integer

' sólo ordena cuando se hace clic en una fila
If MSHFlexGrid1.MouseRow >= MSHFlexGrid1.FixedRows Then Exit Sub

i = m_iSortCol ' guarda la columna antigua
m_iSortCol = MSHFlexGrid1.Col ' establece la nueva columna

' incrementa el tipo de orden
If i <> m_iSortCol Then
' si hace clic en una columna nueva, inicia con orden ascendente
m_iSortType = 1
Else
' si hace clic en la misma columna, alterna entre orden ascendente y orden descendente
m_iSortType = m_iSortType + 1
If m_iSortType = 3 Then m_iSortType = 1
End If

DoColumnSort

End Sub
'******************************************************

'A continuacion escribí la siguiente subrutina:
'******************************************************
Sub DoColumnSort()
'-------------------------------------------------------------------------------------------
' orden de tipo intercambio en la columna m_iSortCol
'-------------------------------------------------------------------------------------------

With MSHFlexGrid1
.Redraw = False
.Row = 1
.RowSel = .Rows - 1
.Col = m_iSortCol
.Sort = m_iSortType

.FillStyle = flexFillRepeat
.Col = 0
.Row = .FixedRows
.RowSel = .Rows - 1
.ColSel = .Cols - 1
.CellBackColor = &HFFFFFF
' atenuar las demás filas
Dim iLoop As Integer
For iLoop = .FixedRows + 1 To .Rows - 1 Step 2
.Row = iLoop
.Col = .FixedCols
.ColSel = .Cols() - .FixedCols - 1
.CellBackColor = &HC0C0C0 ' gris claro
Next iLoop
.FillStyle = flexFillSingle

.Redraw = True
End With

End Sub
'************************************************************

' Y por último en el evento KeyPress escribí lo siguiente:
'************************************************************
Private Sub MSHFlexGrid1_KeyPress(KeyAscii As Integer)
Dim i As Integer
With MSHFlexGrid1
For i = 1 To .Rows - 1
If UCase(Left(.TextMatrix(i, m_iSortCol), 1)) = UCase(Chr(KeyAscii)) Then
.Row = i
.RowSel = i
.TopRow = i
Exit For
End If
Next i
End With
End Sub
'************************************************************

'Al hacer doble click en la cabexera de alguna columna te permitirá ordenarla.
'y al presionar una letra se ubicará el cursor en la primera fila que empiece
'por esa letra. (buscará en la fila ordenada)

Saludos,

Richard
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar

RE:MSHFLexgrid

Publicado por Ezequiel (9 intervenciones) el 19/11/2007 02:16:59
HOLA RICHARD, MUCHAS GRACIAS POR TU AYUDA, ES MUY BUENA LA IDEA, LO PROBE Y ME GUSTO, LO UNICO QUE NO FUNCIONA ES LA PARTE DONDE TECLEO UNA LETRA, APRETO LAS LETRAS Y NO ME MUEVE EL FOCO DE LA FILA. SE QUEDA FIJO. ESTARIA BUENO QUE LO REVISES Y ME MANDES EL EJEMPLO DE NUEVO, Y YA QUE ESTAS TE PREGUNTO COMO PUEDO HACER PARA QUE CUANDO CARGO EL FORM CON EL MSHFLEXGRID EL FOCO DE LA FILA EMPIECE EN EL PRIMER REGISTRO PORQUE ME APARECE COMO PRIMER FOCO EL NOMBRE DE LAS COLUMNAS.

MUCHAS GRACIAS DE NUEVO - UN ABRAZO
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar