Visualizzare combobox con testo (mi visualizza l'id)

di MassimoT il
11 risposte

Buongiono, scusate la banalità della domanda ma sono alle prime armi:

Ho una tabella in access con 2 colonne id e prodotto l'ho collegata come datasource a una combobox e viene correttamente caricata, ho impostato come DisplayMember prodotto e come come valuemember id ma mi fa vedere l'id e non il corrispondente nome del prodotto, sapreste dirmi come posso fare ?

Grazie

11 Risposte

  • Prova a postare il codice

  • Ciao, forse ad entrambe le proprietà ValueMember e DisplayMember non hai assegnato delle stringhe. Dovrebbe essere, ad esempio, così:

            public Form1()
            {
                InitializeComponent();
                
                List<Riga> elenco = new List<Riga>();
                elenco.Add(new Riga() { ID = 1, Name = "Alberto" });
                elenco.Add(new Riga() { ID = 2, Name = "Davide" });
                elenco.Add(new Riga() { ID = 3, Name = "Francesco" });
                elenco.Add(new Riga() { ID = 4, Name = "Giuseppe" });
                
                comboBox1.ValueMember = "ID";
                comboBox1.DisplayMember = "Name";
                comboBox1.DataSource = elenco;            
    
            }
            class Riga
            {
                public int ID { get; set; }
                public string Name { get; set; }
            }
  • Ciao grazie per le risposte il codice è quello riportato in basso

    la tabella access prodotti ha come tipo iDProdotto un autoincrement intero lungo, la tabella su cui andrà a scrivere la combo è dello stesso tipo

    con = new OleDbConnection("Provider=Microsoft.ACE.OLEDB.12.0;Data Source=|DataDirectory|\\test.accdb");
    con.Open();
    cm = new OleDbCommand("Select IDProdotto,prodotto from prodotti", con);
    dt = new DataTable();
    da = new OleDbDataAdapter(cm);
    da.Fill(dt);
    cboIdprodotto.DataSource = dt;
    cboIdprodotto.DisplayMember = "prodotto";
    cboIdprodotto.ValueMember = "IDProdotto";

  • Allora, sostituisci le ultime 3 righe con:

    cboIdprodotto.DisplayMember = dt.Columns["prodotto"].ColumnName;
    cboIdprodotto.ValueMember = dt.Columns["IDProdotto"].ColumnName;
    cboIdprodotto.DataSource = dt;
  • Ho provato il codice che mi hai postato, quando apro il form mi visualizza il primo elemento della tabella (non quello che c'è scritto sulla tabella collegata) poi andando avanti e indietro con il binding navigator mi mostra l'idprodotto non la descrizione del prodotto

  • Intanto, io comincerei a vedere se i tuoi dati vengono realmente letti e inseriti nelle colonne della DataTable.

    Potresti provare ad inserire queste righe, per visualizzare la datatable in un controllo DataGridView:

    DataGridView dataGridView1 = new DataGridView();
    dataGridView1.ClientSize = new Size(600, 300);
    dataGridView1.DataSource = dt;                        
    Controls.Add(dataGridView1);
  • La datagridview mi elenca correttamente le 2 colonne  della tabella prodotti.

    forse mi sfugge qualcosa ma non mi dovrebbe fare vedere selezionato il valore del prodotto con id = 7 invece che il numero ?

  • Sicuramente,

    allora prova ad andare nella finestra di progettazione, cancella il ComboBox e creane uno nuovo, perchè potrebbe anche darsi che inavvertitamente hai modificato qualche valore nel riquadro delle proprietà…

  • Ho provato ma non è cambiato nulla.

     La butto li ma non è che l'associazione alla colonna di destinazione del database la devo dare dopo che ho popolato la combobox ?

    Io ho creato la combobox dall'origine dati che ha già collegato il campo di destinazione e successivamente la popolo.

  • Ah, forse questo è l'inghippo. Quando crei la ComboBox nella finestra di progettazione, nelle proprietà non devi associare nessun dato. Poi, dopo il popolamento della DataTable, metti quelle tre righe che ti ho scritto sopra (Display… Value e DataSource…) in quest'ordine. A me funziona.

    Altrimenti, dopo la datatable, crea una List con una coppia di valori e assegnagli la List alla ComboBox, altrimenti diventiamo matti.

  • Grazie mille per l'aiuto fabiocaruso ho risolto.

Devi accedere o registrarti per scrivere nel forum
11 risposte