Button del datagrid

Quisiera saber como utilizar el botón que usa el datagrid para desplegar un combobox al hacerle click

1 respuesta

Respuesta
1
Bueno para ser sincero esto que a continuación te explico no lo hice yo, pero si te sirve al menos me darás las gracias por que encontré el articulo en un sitio de un buen programador, este articulo lo escribió Harvey Triana. su URL es http://www.eidos.es/VeXPERT/
El articulo se llama personalizando el dbgrid estándar parte 2, el dbgrid y datagrid comparten la misma propiedad la cual permite, incluir un combobox en una de sus celdas.
Se logra a través de la propiedad Button de el objeto Column del DBGrid y su evento Clic. Rápidamente, digamos que ya tiene su DBGrid enlazada a datos y trabaja bien, solo desea agregar un ComboBox a una celda para dar una lista de ítems a sus usuarios. Digamos que el Field se llama "Idioma" (seguiré el ejemplo como el la imagen anterior y tratare de ser lo más sencillo posible, ya que se la técnica se puede optimizar bastante).
Identifique el índice de columna del campo que implementará una lista. Sencillamente, las columnas van enumeradas de 0, 1, 2, etc. Digamos que el campo Idioma se despliega en la columna 3, entonces defina la siguiente constante:
DefInt A-Z
Option Explicit
'// Indice de la columna que tiene un lista desplegable
'// Recomiendo la sintaxis ColIndex_NombreDeLista. P.e:
Const ColIndex_List1 = 3
Agregue un control List al formulario. Me imagino que sabe de sobra que un List o ComboBox se llena de datos al comenzar el programa. También especifique la propiedad Button. Esto se haría en el evento Cargar del formulario, use de guía el ejemplo:
Private Sub Form_Load()
'// Llena la lista de soporte al campo Idioma
'// Ejemplo sencillo
With List1
.AddItem "Español"
.AddItem "Ingles"
.AddItem "Ruso"
.AddItem "Aleman"
.AddItem "Frances"
.AddItem "Chino"
End With
'//Requerido antes de hacer referencia a Campos de DBGrid
Data1.Refresh
'//La celda de la columna "Idioma" mostrara un botón
DBGrid1.Columns(ColIndex_List1).Button = True
'//Opcional, La Celda actual es negra al estilo Access
DBGrid1.MarqueeStyle = dbgHighlightCell
End Sub
Eventos del DBGrid. El modelo es el siguiente (los comentarios documentan la acción):
Private Sub DBGrid1_ButtonClick(ByVal ColIndex As Integer)
Dim C As Column
If ColIndex = ColIndex_List1 Then
Set C = DBGrid1.Columns(ColIndex)
With List1
'// Despliegue de la lista al lado de la celda.
'// Elimine los comentarios de las dos siguientes líneas
'// y coloque comentarios a las tres posteriores. A su gusto
'.Left = DBGrid1.Left + C.Left + C.Width
'.Top = DBGrid1.Top + DBGrid1.RowTop(DBGrid1.Row)
'// Lista debajo de la celda, al estilo ComboBox (3 líneas)
.Left = DBGrid1.Left + C.Left
.Top = DBGrid1.Top + DBGrid1.RowTop(DBGrid1.Row) + DBGrid1.RowHeight
.Width = C.Width + 15
.ListIndex = 0
.Visible = True
.ZOrder 0
.SetFocus
End With
End If
End Sub
Private Sub DBGrid1_BeforeColEdit(ByVal ColIndex As Integer, ByVal KeyAscii As Integer, Cancel As Integer)
'// Use este evento para que cuando el usuario teclee un caracter sobre la celda
'// se despliegue la lista. Es decir, se obliga al usuario a usar un ítem de la lista.
'// En caso de dar al usuario libertad de escribir, elimine las siguientes líneas (If-End If),
'// o precedales con un comentario
If ColIndex = ColIndex_List1 Then
'// Se obliga a seleccionar de la lista:
Cancel = True
DBGrid1_ButtonClick (ColIndex)
End If
End Sub
Private Sub DBGrid1_Scroll(Cancel As Integer)
'//Oculta la lista si hace Scroll
List1.

Añade tu respuesta

Haz clic para o

Más respuestas relacionadas