Foros del Web » Programación para mayores de 30 ;) » Programación General » Visual Basic clásico »

Listbox. Itemdata no funciona si hay dos items con el mismo texto?

Estas en el tema de Listbox. Itemdata no funciona si hay dos items con el mismo texto? en el foro de Visual Basic clásico en Foros del Web. 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 ...
  #1 (permalink)  
Antiguo 09/05/2008, 06:21
 
Fecha de Ingreso: mayo-2008
Mensajes: 1
Antigüedad: 16 años
Puntos: 0
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 
  #2 (permalink)  
Antiguo 09/05/2008, 07:44
Colaborador
 
Fecha de Ingreso: enero-2008
Ubicación: Unas veces aquí, otras veces allí
Mensajes: 1.482
Antigüedad: 16 años, 3 meses
Puntos: 37
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..
Atención: Estás leyendo un tema que no tiene actividad desde hace más de 6 MESES, te recomendamos abrir un Nuevo tema en lugar de responder al actual.
Respuesta

SíEste tema le ha gustado a 1 personas (incluyéndote)




La zona horaria es GMT -6. Ahora son las 19:19.