7/6/25, 23:26 FlexGrid con CheckBox
403 - FlexGrid con CheckBox
<Volver> - Anterior - Siguiente
Ejemplo para editar campos Boolean en un control MsFlexgrid o Hierarchical Flex
El siguiente ejemplo, visualiza un campo de tipo SI/NO en una columna, y los mismos se muestra con un
CheckBox, pero no insertando un control Check en la celda correspondiente, si no cambiando la fuente de
la celda por el tipo de fuente " Wingdings ".
El caracter 168 visualiza un check en False y el caracter 254 el check en True
Form
En el ejemplo, se utiliza la tabla Productos de la base de datos Nwind del directorio de vb, y el campo de
tipo SI/No es el campo "Suspendido"
Nota: hay dos rutinas , una llamada Cargar_FlexGrid, que se ejecuta en el Form Load y carga todos los
datos del recordset en la grilla. A esta rutina se le pasa el flex, el número de campo boolean para usar con
los checkbox, y el recordset con los datos
Texto plano Imprimir
1. Private Sub Cargar_FlexGrid(FlexGrid As Object, _
2. NumeroCampo As Integer, _
3. objRst As [Link])
La otra rutina, edita el recordset y la grilla al hacer Click en la celda. A esta le pasa también como
parámetro : el número de campo, el recordset y el flex
Call ActualizarCampo(1, rs, MSFlexGrid1)
[Link] 1/5
7/6/25, 23:26 FlexGrid con CheckBox
Ejemplo
Agregar al proyecto :
Un conrol Flexgrid o Hierarchical Flexgrid
La referencia a Ado
Código fuente en el form
Texto plano Imprimir
1. Option Explicit
2.
3. ' variables Ado
4. ''''''''''''''''''''''''''''''
5. Dim cn As New [Link]
6. Dim rs As New [Link]
7.
8. Private Sub Form_Load()
9.
10. Dim sRuta As String
11.
12. ' Abre una nueva conexión ADO
13. Set cn = New [Link]
14. ' ruta a la base de datos NWIND
15. sRuta = "C:\Archivos de programa\Microsoft Visual Studio\VB98\NWIND.
16.
17. ' Cadena de conexión
18. [Link] = "Provider=[Link].4.0;" & _
19. "Data Source=" & sRuta & ";" & _
20. "Persist Security Info=False"
21.
22. 'Abre la conexión
23. [Link]
24.
25. ' nuevo recordset
26. Set rs = New [Link]
27. [Link] = adUseClient
28. ' Llena el recordset con la consulta, _
29. Carga el campo " suspendido " que es de tipo SI/NO
30. [Link] "select NombreProducto,Suspendido from Productos", _
31. cn, adOpenStatic, adLockOptimistic, adCmdText
32.
33. ' Propiedades del Flex
34. With MSFlexGrid1
35. .Rows = 2
36. .Cols = 1
37. .FixedCols = 0
38. .FixedRows = 1
39. .SelectionMode = flexSelectionFree
40. End With
41.
42. ' rellena la grilla con los datos del recordset. _
43. Le pasa el nímero o index del campo queactuará como CheckBox
44. Call Cargar_FlexGrid(MSFlexGrid1, 1, rs)
45. End Sub
46.
47.
48. 'Sub que carga los registros en la Grilla
49. ''''''''''''''''''''''''''''''''''''''''''''''''''
50. Private Sub Cargar_FlexGrid(FlexGrid As Object, _
51. NumeroCampo As Integer, _
52. objRst As [Link])
53.
54. On Local Error GoTo ErrSub
55.
56. Dim c As Integer
57. Dim Fila As Integer
58. Dim AnchoCol() As Single
[Link] 2/5
7/6/25, 23:26 FlexGrid con CheckBox
59. Dim TempAnchoCol As Single
60.
61. With FlexGrid
62. ' deshabilita el repintado para que sea mas rápido
63. .Redraw = False
64. 'Cantidad de filas y columnas
65. .Rows = 1
66. .Cols = [Link]
67. End With
68.
69. 'Redimensiona el Array a la cantidad de campos del recordset
70. ReDim AnchoCol(0 To [Link] - 1)
71.
72. 'Recorre las columnas
73. For c = 0 To [Link] - 1
74. 'Añade el título del campo al encabezado de columna
75. [Link](0, c) = [Link](c).Name
76.
77. 'Guarda el ancho del campo en la matriz
78. AnchoCol(c) = TextWidth([Link](c).Name)
79. Next c
80. Fila = 1
81.
82. 'Recorre todos los registros del recordset
83. Do While Not [Link]
84. ' Añade una nueva fila
85. [Link] = [Link] + 1
86. For c = 0 To [Link] - 1
87.
88. 'Si el valor no es nulo
89. If Not IsNull([Link](c).Value) Then
90. ' si la columna es el campo de tipo CheckBox ...
91. If c = NumeroCampo Then
92. With FlexGrid
93. .Row = Fila ' se posiciona en la fila
94. .Col = c ' .. en la columna
95. ' cambia la fuente para esta celda
96. .CellFontName = "Wingdings"
97. .CellFontSize = 14
98. .CellAlignment = flexAlignCenterCenter
99. ' edita la celda
100. If objRst(NumeroCampo).Value = True Then
101. .TextMatrix(Fila, NumeroCampo) = Chr(254) '
102. Else
103. .TextMatrix(Fila, NumeroCampo) = Chr(168) '
104. End If
105. End With
106.
107. Else
108. 'Agrega el registro en la fila y columna específica
109. [Link](Fila, c) = [Link](c).Value
110. ' Almacena el ancho
111. TempAnchoCol = TextWidth([Link](c).Value)
112. End If
113.
114. If AnchoCol(c) < TempAnchoCol Then
115. AnchoCol(c) = TempAnchoCol ' nuevo ancho
116. End If
117. End If
118. Next
119. ' Siguiente registro
120. [Link]
121. Fila = Fila + 1 'Incrementa la posición de la fila actual
122. Loop
123.
124. ' Establece los ancho máximos de columna
125. For c = 0 To [Link] - 1
126. [Link](c) = AnchoCol(c) + 240
127. Next
128. ' vuelve a habilitar el redraw
129. [Link] = True
130. Exit Sub
131.
132. 'Error
[Link] 3/5
7/6/25, 23:26 FlexGrid con CheckBox
133. ErrSub:
134. MsgBox [Link], vbCritical
135. [Link] = True
136. End Sub
137.
138. Private Sub ActualizarCampo(NCampo As Integer, _
139. objrs As [Link], _
140. FlexGrid As Object, _
141. Optional character As Integer)
142.
143.
144. With FlexGrid
145. If (.MouseCol) = NCampo And .MouseRow <> 0 Then
146. ' mueve al primer registro
147. [Link]
148. ' se posiciona en el registro que corresponde la fila
149. [Link] .Row - 1
150.
151. ' CheckBox en false
152. If .TextMatrix(.Row, NCampo) = Chr(168) Then
153. objrs(NCampo).Value = True ' modifica
154. [Link] ' actualizar
155. .TextMatrix(.Row, NCampo) = Chr(254)
156.
157. ' CheckBox en true
158. Else
159. .TextMatrix(.Row, NCampo) = Chr(168)
160. objrs(NCampo).Value = False
161. [Link] 'actualiza el recordset
162.
163. End If
164. End If
165. End With
166. End Sub
167.
168. Private Sub Form_Resize()
169. [Link] 0, 0, ScaleWidth, ScaleHeight
170. End Sub
171.
172. ' descarga el recordset y la conexión
173. '''''''''''''''''''''''''''''''''''''''''
174. Private Sub Form_Unload(Cancel As Integer)
175.
176. If Not rs Is Nothing Then
177. If [Link] = adStateOpen Then
178. [Link]
179. Set rs = Nothing
180. End If
181. End If
182. If Not cn Is Nothing Then
183. If [Link] = adStateOpen Then
184. [Link]
185. Set cn = Nothing
186. End If
187. End If
188. End Sub
189.
190. Private Sub MSFlexGrid1_Click()
191. ' le pasa el número de campo de tipo Boolean _
192. El recordset enlazado al FlexGRid, y el control MsFlexgrid
193. Call ActualizarCampo(1, rs, MSFlexGrid1)
194. End Sub
Recursos Visual basic 6.0 - Enlaces relacionados
Editar fechas en Flexgrid
Otros ejemplos sobre MsFlexgrid
[Link] 4/5
7/6/25, 23:26 FlexGrid con CheckBox
Ejemplos de Ado
[Link] 5/5