Visual Basic - combobox

Life is soft - evento anual de software empresarial
 
Vista:

combobox

Publicado por sandra (86 intervenciones) el 26/01/2008 19:30:15
HOLA QUE TAL:
ESTOY DESARROLLANDO UN SISTEMA EN VB6 CON ACCES Y TOY NESECITANDO SAVER COMO PUEDE HACER LO SIGUIENTE:

TENGO UN COMBOBOX LLAMADO CBOPERSONA QUE HACE ESTO:
***************
FORM_LOAD()

DIM RECOR AS ADODB.RECORDSET

RECOR.OPEN "SELECT ID_PERSONA, APELLIDO, NOMBRE FROM PERSONAS ", BASEDATO, ADOPENSTATIC
WHILE NOT RECOR.EOF
CBOPERSONA.ADDITEM RECOR("APELLIDO") & "," & ("NOMBRE")
RECOR.MOVENEXT
WEND

END SUB
**************
ESTE COMBO TIENE LOS APELLIDOS,NOMBRE DE LAS PERSONA DE UNA TABLA.
LO QUE ESTOY NECESITANDO ES QUE CUANDO SELECCIONO UNA PERSONA (CUANDO AGO UN CLIK EN EL COMBO)
NECESITO GUARDAR EL ID_PERSONA DE LA PERSONA Q ELEJI O SELECCIONE EN
EL CBOPERSONA, EN UNA VARIABLE DE TIPO INTEGER.

BUENO DESDE YA MUCHAS GRACIAS.
ESPERO UNA PRONTA AYUDA. ESTOY NECESITANDO DE SUMA URJENCIA.
ATTE SALUDOS!!!!!
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:combobox

Publicado por cmgcharli (128 intervenciones) el 30/01/2008 14:11:17
Una forma, es meter tambien el combo el valor de ID_PERSONA. en otra columna que no se mostrara al usuario y, mediante la propiedad BoundColumn
que identifica el origen de los datos en un control ComboBox o un control ListBox de múltiples columnas, obtener del ID_PERSONA de la fila seleccionada en el Combo.
Para mostrar una unica columna nos serviremos de la propiedad ColumnCount que especifica el número de columnas que se van a mostrar en un cuadro de lista o un cuadro combinado.

Pasos

Sobre en el Objto (combo) en modo diseño modificar las siguientes propiedades:

Propiedad BoundColumn =2

Propiedad ColumnCount=1

Para cargar el combo con dos columna utilizaremos la propiedad List(fila, Columna), cargando premiamente los datos en una matriz bidimensional, para lo cual deberemos definir en le procedimiento las siguientes rutinas:

Dim MiMatriz() as Variant
Dim MiFila as Long

Nota: La dimensión de la matriz nos la va ha dar el numero de registros de tu
Recorset, que según tu ejemplo el RECOR

RECOR.MoveFirst
Redim MiMatriz(RECOR.RecordCount-1,1)
MiFila =0

Do Until RECOR.EOF
MiMatriz(MiFila,0)=RECOR("APELLIDO") & "," & ("NOMBRE")
MiMatriz(MiFila,1)=RECOR("ID_PERSONA")
MiFila=MiFila+1
RECOR.MoveNext
Loop

Nota: Llegado aqui ya tenemos en nuestra matriz cargados los datos que se van
ha cargar en el combo que si no he entendido mal lo llamas CBOPERSONA

CBOPERSONA.List()=MiMatriz()

Nota: Para vaciar la memoria que esta cargada con los datos contenidos en la
matriz utilizamos la Instruccion Erase que vuelve a inicializar los elementos
de matrices de tamaño fijo y libera el espacio de almacenamiento asignado
a matrices dinámicas.

Erase MiMatriz

Nota: Ahora en el evonto Clik del combo cuando el usuario seleccione un
elemento de la lista podremos detectar el ID_PERSONA del elemento
seleccionado mediante CBOPERSONA.Value

Nota: En el ejemplo siguiente se mostraria en un mensaje el ID_PERSONA del
elemeno que se seleccione en el combo.
Private Sub ComboBox1_Click()
MsgBox CBOPERSONA.Value
End Sub
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

mucho mas facil

Publicado por ED (70 intervenciones) el 21/02/2008 19:24:00
no te compliques tanto
asi es mas facil, espero q te guste y me avises q te parecio

cmb = ComboBox
rstAux = recordset

cuando carges el ComboBox:

Do While Not rstAux.EOF
cmb.AddItem rstAux.Fields("nombre")
cmb.ItemData(i) = Val(rstAux.Fields("id"))
i = i + 1
rstAux.MoveNext
Loop

en el evento click del ComboBox:

If cmb.ListIndex <> -1 Then
MsgBox "Ningun dato seleccionado", vbOkOnly + vbCritical ,"Atencion:"
Else
MsgBox "id= " & cmb.ItemData(cmb.ListIndex)
Endif
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

mucho mucho mas facil

Publicado por david (1 intervención) el 28/01/2014 17:46:59
La propiedad ItemData no existe para controles ComboBox, sólo se utiliza para DataCombo.

En este caso lo unico que se hace para guardar otra columna de datos es lo siguiente.

cmbPrueba.Clear
cmbPrueba.ColumnCount = 1 // Indicas la cantidad de columnas que MOSTRARÁ el combobox
cmbPrueba.BoundColumn = 2 // Indicas la columna que será seleccionada internamente
cmbPrueba.AddItem "a" //agregas un elemento
cmbPrueba.ListIndex = 0 // Indica la fila en el combo, la propiedad NewIndex tampoco existe en combobox,
cmbPrueba.Column(1) = "A" // Asignas un valor a la segunda columna de la fila anterior.
MsgBox cmbPrueba.Value // Verificas que la letra "A" aparece en la posición del item "a" pero en otra columna.

Listo!!!
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