Título: Re-Pintado de Grid me Falla. Publicado por: YAcosta en 31 Julio 2011, 05:04 am Hola, para pintar un Grid tipo cebra llamo a este procedimiento :
Call ZebraGrid(Grid) ____Esto lo pongo en el load del form y ese procedimiento tiene esto (El grid que uso es el MSHFlexGrid): Código: Public Sub ZebraGrid(Flex As Object) Call AltLVBackGroundFlex(Flex, RGB(255, 255, 255), RGB(230, 243, 255)) End Sub (Lo llamo con ZebraGrid porque originalmente tiene mas parametros que uso para formatear algunas columnas). 255,255,255 es blanco y 230,243,255 es un celeste pastel El codigo de AltLVBackGroundFlex es este: Código: Public Sub AltLVBackGroundFlex(Flex As Object, ByVal BackColorOne As OLE_COLOR, ByVal BackColorTwo As OLE_COLOR) Dim Row As Long Dim Col As Integer With Flex .Redraw = False .BackColor = BackColorOne For Row = 1 To .Rows - 1 Step 2 .Row = Row For Col = 1 To .Cols - 1 .Col = Col .CellBackColor = BackColorTwo Next Next .Redraw = True End With End Sub Hasta aquí todo perfecto, nada del otro mundo, es bastante usable. El problemilla que tengo es que se me ha pedido ordenar las filas haciendo clic en la cabecera del grid, el ordenamiento ya lo tengo resuelto, pero se me echa a perder el pintado del grid porque a cada clic que se le hace se desordenan los colores mas y mas tendiendo a ponerse todo el grid de un solo color (el del celeste pastel). Para querer resolverlo sin éxito puse este codigo: Código: If Grid1.MouseRow = 0 Then Call RSel(Grid1, True) <--- Con esto ordeno las filas Grid1.BackColor = vbWhite <--- Con esto quise que me pinte todo el grid en blanco y luego aplique el zebra Call ZebraGrid(Grid) End If Pero Grid1.BackColor no me cambia el color de todo el grid como lo esperaba, creo que es porque ya aplique CellBackColor y no me deja. Por siaca les pongo el codigo de RSel. Código: Public Sub RSel(Miflex As MSHFlexGrid, Ordenar As Boolean) If Ordenar Then If Miflex.MouseRow = 0 Then If ContaClick = 1 Then Miflex.Sort = ContaClick ContaClick = 2 Else Miflex.Sort = ContaClick ContaClick = 1 End If Else Miflex.Col = 0 Miflex.ColSel = Miflex.Cols - 1 End If Else Miflex.Col = 0 Miflex.ColSel = Miflex.Cols - 1 End If End Sub Espero me puedan dar una mano, gracias. |