Pagina 1 di 2 1 2 ultimoultimo
Visualizzazione dei risultati da 1 a 10 su 13
  1. #1

    [VB2010] Settare index su combobox popolata da codice

    Ciao a tutti,

    in un form ho una combobox che viene popolata prelevando i dati da una tabella MySQL tramite questa funzione che ho scritto:

    Codice PHP:
    Public Function PopolaCategoriaClienti()
            
    db.apri()
            
    Dim stringa As String "SELECT * FROM TblCategoriaClienti"
            
    Try
                
    Dim popola As New MySqlCommand
                popola
    .Connection db.conn
                popola
    .CommandText stringa
                popola
    .CommandType CommandType.Text
                Dim reader 
    As MySqlDataReader popola.ExecuteReader()
                While (
    reader.Read())
                    
    frmClienteNuovo.cmbCategoria.Items.Add(reader("categoria"))
                
    End While
                
    reader.Close()
                Return 
    True
            
    Catch ex As Exception
                
    Return False
                MsgBox
    ("Errore")
            
    End Try
        
    End Function 
    Il controllo viene regolarmente popolato e i dati possono essere selezionati. Il mio problema è che vorrei settare manualmente il valore index, associandolo alla colonna dedicata alla chiave primaria che è di tipo numerico.
    Ingenuamente avevo scritto questo:

    Codice PHP:
    frmClienteNuovo.cmbCategoria.Items.Add(reader("id"), reader("categoria")) 
    nella speranza che funzionasse ma purtroppo si genera l'errore "too many arguments" e via dicendo.

    Qualcuno mi sa dare un input su come risolvere?


    --- EDIT

    Ho provato anche questa soluzione ma non viene popolato il controllo

    Codice PHP:
    cmbCategoria.Items.Insert(reader("id"), reader("categoria")) 
    Errare è umano, ma per fare veramente casino ci vuole la password di root

  2. #2
    Utente di HTML.it
    Registrato dal
    Jan 2011
    Messaggi
    237
    Ciao

    La combobox espone la proprietà apposita "SelectedIndex", per impostare l'indice in formato numerico, dell'item selezionato.. Oppure vedi SelectedItem per specificare l'oggetto selezionato..
    vedi qua:
    http://msdn.microsoft.com/it-it/libr...ctedindex.aspx

  3. #3
    aspetta perchè forse non mi sono spiegato bene. Io non ho il problema di trovare l'index del valore selezionato, ma voglio settare manualmente l'index.

    Ad esempio

    VALORE | TESTO
    1 | PRIVATO
    2 | PUBBLICO
    3 | PROBONO

    e via così
    Errare è umano, ma per fare veramente casino ci vuole la password di root

  4. #4
    Utente di HTML.it
    Registrato dal
    Jan 2011
    Messaggi
    237
    Ah, tu vuoi che venga scritto il numero dell'item, oltre alla "descrizione", ho capito giusto?
    Ma in tal caso basta fare così:

    codice:
    frmClienteNuovo.cmbCategoria.Items.Add(reader("id") & "|" & reader("categoria"))
    No? concateni in una stringa ID e Categoria e lo aggiungi...

  5. #5
    No. Nella combo box vedo i valori della colonna che chiamo categoria. Quando seleziono uno di questi elementi voglio che il suo valore sia quello contenuto nella colonna id.
    Errare è umano, ma per fare veramente casino ci vuole la password di root

  6. #6
    Forse mi è venuto in mente come fare per risolvere il problema ma ne genera un'altro: io scrivo nel combobox il valore id e categoria ad esempio così:

    1-PRIVATI
    2-AZIENDE
    3-ONLUS

    Quando vado a salvare i dati nel db cancello tutto ciò che segue il simbolo - compreso. Ma come faccio a troncare la stringa dal simbolo - in poi?
    Errare è umano, ma per fare veramente casino ci vuole la password di root

  7. #7
    E in tutto il suo splendore ecco la soluzione al problema

    1. Creo una classe clsComboID

    codice:
        Public Property id As Integer
        Public Property categoria As String
    
        Sub New(ByVal id As Integer, ByVal categoria As String)
            Me.id = id
            Me.categoria = categoria
        End Sub
    
        Public Overrides Function ToString() As String
            Return Me.categoria
        End Function
    2. Utilizzo la mia classe per creare il contenuto della combobox

    codice:
     frmClienteNuovo.cmbCategoria.Items.Add(New clsComboID(id:=reader("id"), categoria:=reader("categoria")))
    3. Estrapolo i dati che mi servono

    codice:
    Dim chiave As String
            If cmbCategoria.SelectedIndex > -1 Then
                chiave = CType(cmbCategoria.SelectedItem, clsComboID).id.ToString()
            End If
    e il gioco è fatto! A volte una sigaretta aiuta più che fare mille tentativi
    Errare è umano, ma per fare veramente casino ci vuole la password di root

  8. #8
    Utente di HTML.it
    Registrato dal
    Jan 2011
    Messaggi
    237
    Beh, bene che ti funzioni..
    Anche quello è un buon modo..
    Oppure se cerchi su google, esistono dei sorgenti di controlli personalizzati che permetto di inserire dati incolonnati..
    Guarda che bellino questo:
    http://www.codeproject.com/Articles/...i-column-Combo


  9. #9
    Un'altra soluzione è quella di crearti un DataTable e associarlo alla combo.
    codice:
        Dim dt As DataTable
        Dim row As DataRow
    
        Private Sub SetDataTable()
            dt = New DataTable
            With dt
                .TableName = "catagoria"
                .Columns.Add("id", System.Type.GetType("System.Int32"))
                .Columns.Add("categoria", System.Type.GetType("System.String"))
            End With
            SetComboCategoria()
        End Sub
    
        Private Sub SetComboCategoria()
            cmbCategoria.DataSource = dt
            cmbCategoria.DisplayMember = "categoria"
            cmbCategoria.ValueMember = "id"
        End Sub
    
        Private Sub Form1_Load(sender As Object, e As EventArgs) Handles Me.Load
            SetDataTable()
        End Sub
    per popolare la combo:
    codice:
            For x As Int32 = 1 To 10
                row = dt.NewRow
                row("id") = x
                row("categoria") = "categoria " & x.ToString
                dt.Rows.Add(row)
            Next
    e il valore selezionato lo leggi sfruttando la SelectedValue: cmbCategoria.SelectedValue.ToString
    Jupynet

  10. #10
    si, ma con una classe lo posso usare su altri controlli, altrimenti mi tocca sempre riscrivere il codice
    Errare è umano, ma per fare veramente casino ci vuole la password di root

Permessi di invio

  • Non puoi inserire discussioni
  • Non puoi inserire repliche
  • Non puoi inserire allegati
  • Non puoi modificare i tuoi messaggi
  •  
Powered by vBulletin® Version 4.2.1
Copyright © 2025 vBulletin Solutions, Inc. All rights reserved.