+ Rispondi al Thread
Visualizzazione dei risultati da 1 a 4 su 4

Discussione: intercettare la key in una combo di una datagridview

  1. #1
    SebastianoFloridia non è in linea Scolaretto
    Post
    130

    intercettare la key in una combo di una datagridview

    Salve ragazzi, ho un problema con una datagridview.
    ho impostato una colonna con combobox che si popola coi i dati di un dictionary.
    il datagridview non è collegato con database esterno.


    Il form_load:

    codice:
    DataGridViewComboBoxColumn dgvCmbCdc = new DataGridViewComboBoxColumn();
    
                {
                    // Hearder name of column
                    dgvCmbCdc.HeaderText = "Condizioni di Carico";
                    dgvCmbCdc.Width = 250;
                    // Add items into Combobox
                    dgvCmbCdc.DisplayMember = "Descrizione";
                    dgvCmbCdc.ValueMember = "Key";
                    foreach (var item in Globale.CondizionidC)
                    {
                        dgvCmbCdc.Items.Add(item.Value.Descrizione);
                    }
                    
                    // Column Index position of Controls
                    dgvCmbCdc.DisplayIndex = 1;
                }
                DataCarichi.Columns.Add(dgvCmbCdc);

    Nella fase di lettura della griglia, non mi interessa il testo ma la relativa key.


    codice:
    for (int i = 0; i < DataCarichi.Rows.Count - 1; i++)
                    {
                       KeyCdc = Convert.ToString(DataCarichi.Rows[i].Cells[1].Value);
                     }
    mi aspetto che il .Value mi restituisca la key. Ma così non succede. mi torna il testo visibile, ovvero la descrizione.
    Quale può essere il problema?

    Saluti & Grazie
    Sebastiano Floridia

  2. #2
    SebastianoFloridia non è in linea Scolaretto
    Post
    130
    Risolto con un dictionary!!!


    codice:
    // carica carichi base solai'
                Dictionary<string, String> ComboSourceMat = new Dictionary<string, String>();
                //ComboSourceMat.Add("M", "");
                foreach (var kvp2 in Globale.CondizionidC)
                {
                    ComboSourceMat.Add(kvp2.Key, kvp2.Value.Descrizione);
                }
                
    
                ((DataGridViewComboBoxColumn)DataCarichi.Columns["Descrizione"]).DataSource = new BindingSource(ComboSourceMat, null);
                ((DataGridViewComboBoxColumn)DataCarichi.Columns["Descrizione"]).DisplayMember = "Value";
                ((DataGridViewComboBoxColumn)DataCarichi.Columns["Descrizione"]).ValueMember = "Key";
    Saluti
    Sebastiano Floridia

  3. #3
    Sgrubak non è in linea Scolaretto
    Luogo
    Torrazza Piemonte
    Post
    278
    Quote Originariamente inviato da SebastianoFloridia Visualizza il messaggio
    mi aspetto che il .Value mi restituisca la key. Ma così non succede. mi torna il testo visibile, ovvero la descrizione.
    Quale può essere il problema?
    Tu carichi nella ComboBox delle stringhe corrispondenti alle descrizioni, il dato della Key lo perdi. Io modificherei il caricamento inserendo proprio l'oggetto e lascerei i settaggi di DisplayMember e ValueMember, così:
    codice:
    dgvCmbCdc.DisplayMember = "Descrizione";
    dgvCmbCdc.ValueMember = "Key";
    
    foreach (var item in Globale.CondizionidC)
                    {
                        dgvCmbCdc.Items.Add(item);
                    }
    e poi recupererei il valore come facevi tu, prima:
    codice:
    for (int i = 0; i < DataCarichi.Rows.Count - 1; i++)
                    {
                       KeyCdc = DataCarichi.Rows[i].Cells[1].Value;
                     }

  4. #4
    SebastianoFloridia non è in linea Scolaretto
    Post
    130
    Grazie!!
    Sebastiano Floridia

+ Rispondi al Thread

Permessi di invio

  • Non puoi inserire discussioni
  • Non puoi inserire repliche
  • Non puoi inserire allegati
  • Non puoi modificare i tuoi messaggi