Foros del Web

Foros del Web (http://www.forosdelweb.com/)
-   Visual Basic clásico (http://www.forosdelweb.com/f69/)
-   -   Listbox. Itemdata no funciona si hay dos items con el mismo texto? (http://www.forosdelweb.com/f69/listbox-itemdata-no-funciona-si-hay-dos-items-con-mismo-texto-584582/)

grupouno 09/05/2008 06:21

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 


Avellaneda 09/05/2008 07:44

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.. :adios:


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

Desarrollado por vBulletin® Versión 3.8.7
Derechos de Autor ©2000 - 2026, Jelsoft Enterprises Ltd.