Retroceder   Foros del Web > Temas generales de computación > Programación > Visual Basic

Respuesta
 
Herramientas Desplegado
Antiguo 09-may-2008, 06:21   #1 (permalink)
grupouno ha deshabilitado el karma
 
Fecha de Ingreso: mayo-2008
Mensajes: 1
Listbox. Itemdata no funciona si hay dos items con el mismo texto?

Hola

Estoy usando la propiedad ListBox.ItemData para crear listas dinámicas desde una base de datos

Para un listbox con unos productos utilizo la propiedad ItemData para almacenar el Id de cada producto

Tengo una funcion que me crea el ListBox o Combobox a partir de una SQL y me deja seleccionado un elemento

PROBLEMA: Creo que Itemdata no funciona bien si hay 2 Items con el mismo texto en el ListBox...

Si hay varios elementos en el listbox con el mismo nombre, siempre me selecciona el primero de ellos, a pesar que uso el Id para referirme a ellos en el ItemData
A alguien le ha pasado?

Cuando los nombres son distintos funciona...


Os mando el procedimiento y la llamada


Un saludo


----------------------------------------------------------------

Codigo que me selecciona el elemento buscado
Código PHP:
        'Seleccionamos el valor indicado, opcional
        '
RstTemp(0tiene el Id del Registro
        ItemDataSeleccionado se lo he pasado a la función
        
If (RstTemp(0) = ItemDataSeleccionadoThen
            ComboBox
.ListIndex ComboBox.NewIndex
        End 
If 


ActualizaComboBox CIdProducto, "SELECT Id, Codigo FROM Unidades WHERE 1 ORDER BY Codigo ASC", IdSeleccionado, M.Base


Código PHP:
Public Sub ActualizaComboBox(ComboBox As ObjectQuery As StringItemDataSeleccionado As IntegerBaseElegida As Database)
    
Dim RstTemp As Recordset
    Dim x 
As Integer

    
'Recorremos el recordset
    Set RstTemp = BaseElegida.OpenRecordset(Query)
    If Not RstTemp.BOF Then
        RstTemp.MoveFirst
    End If
    Do While Not RstTemp.EOF
        '
Añade elemento al ComboBox. (Texto y Valor)

       
'Meto la segunda columna de la query (nombre o codigo)
        ComboBox.AddItem RstTemp(1)
       '
Meto la primera columna de la query (Id)
        
ComboBox.ItemData(ComboBox.NewIndex) = RstTemp(0)

        
'Seleccionamos el valor indicado, opcional
        If (RstTemp(0) = ItemDataSeleccionado) Then
            ComboBox.ListIndex = ComboBox.NewIndex
        End If

        RstTemp.MoveNext
    Loop
    '
Selecciona el primer elemento
    
If ItemDataSeleccionado 0 Then
        ComboBox
.ListIndex 0
    End 
If
    
Si ItemData es -1 no se encuentra y no selecciona nada
End Sub 
grupouno está desconectado   Responder Citando
Antiguo 09-may-2008, 07:44   #2 (permalink)
Avellaneda está en el buen camino
 
Avatar de Avellaneda
 
Fecha de Ingreso: enero-2008
Ubicación: Madrid
Mensajes: 564
Re: Listbox. Itemdata no funciona si hay dos items con el mismo texto?

Hola,

te pongo un ejemplo de cómo funciona la propiedad ItemData de un ComboBox


Código:
Private Sub Form_Load()
    Dim sBase As String
    Dim cn As ADODB.Connection
    Dim rs As ADODB.Recordset
    sBase = App.Path & "\bd1.mdb"
    Set cn = New ADODB.Connection
    Set rs = New ADODB.Recordset
    cn.Open "Provider=Microsoft.Jet.OLEDB.4.0; Data Source=" & sBase
    rs.Open "SELECT ElCampo from Tabla1", cn, adOpenStatic, adLockOptimistic
    rs.MoveFirst
    Do Until rs.EOF
        Combo1.AddItem rs.Fields(0)
        Combo1.ItemData(Combo1.NewIndex) = rs.AbsolutePosition
        rs.MoveNext
    Loop
    rs.Close
    Set cn = Nothing
End Sub
para mostrar el seleccionado al hacer click en el ComboBox:


Código:
Private Sub Combo1_Click()
Adodc1.Recordset.AbsolutePosition = Combo1.ItemData(Combo1.ListIndex)
End Sub
En este caso estamos trabajando con un control Adodc, pero igualmente lo puedes hacer creando directamente el recordset.
Mira que lo que estamos cargando en la propiedad es el número de registro del recordset, con lo cual nunca se puede repetir.

Un saludo..
Avellaneda está desconectado   Responder Citando
Respuesta
Calificación: Calificación de Tema: 1 votos, 5,00 de promedio.


Herramientas
Desplegado

Normas de Publicación
No puedes crear nuevos temas
No puedes responder temas
No puedes subir archivos adjuntos
No puedes editar tus mensajes

BB code is Activado
Caritas están Activado
[IMG] está Activado
Código HTML está Desactivado


La Zona horaria es GMT -6. Ahora son las 09:29.


Message Board Statistics

LinkBacks Enabled by vBSEO 3.1.0

1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93