• User

    Restituire un valore dal database selezionando un determinato oggetto da una combobox

    Salve, come da titolo vorrei fare in modo che, selezionando un oggetto di una combobox gestito da un database MySql, il label variasse il suo valore in funzione del valore selezionato dal database.
    Grazie in anticipo per le eventuali risposte.

    
    protected void Preventivo_check_Click(object sender, EventArgs e)
            {
                string cmdText = "";
    
    
                string mysqlConnectionString = "server = localhost; user id = root; database = test; password = ";
                using (MySqlConnection connection = new MySqlConnection(mysqlConnectionString))
                {
                    if (Item.Equals("170"))
                    {
                        cmdText = "SELECT valore_01 FROM prezzi_grcarta_170";
                        LabelValue.Equals(cmdText);
                    }
                }
            }
    
    

    In Item.Equals("170"), 170 è un valore reperito dal database per una combobox.


  • User

    Non esiste un modo?


  • Moderatore

    Scusa trese ma non mi è chiara la domanda...

    Il codice che hai postato va in errore? In quale punto? Quale tecnologia stai usando?
    Partiamo di qua, direi che è già abbastanza...


  • User

    Grazie per la risposta,

    Utilizzo visual studio 2015 community, ASP.NET - C#. Database phpMyAdmin.

    La tabella nel database risulta:

    +--+------------+-+----------+
    | id | valore_01 | valore_02 |
    +--+------------+-+----------+
    | 1 | 0.15 | 0.20 | //Di tipo float
    +--+------------+-----------+

    Il codice non andava in errore ma non riusciva a caricare i dati dal database, ho risolto in questo modo:

    
    protected void Preventivo_check_Click(object sender, EventArgs e) //Preventivo _check è un button
            {
    
    
                string mysqlConnectionString = "server = localhost; user id = root; database = test; password = ";
                using (MySqlConnection connection = new MySqlConnection(mysqlConnectionString))
                {
                    connection.Open();
    
    
                    string mySql = "SELECT * FROM prezzi_grcarta_170";
    
    
                    MySqlCommand cb_gr_170 = new MySqlCommand(mySql, connection);
                    MySqlDataReader reader = cb_gr_170.ExecuteReader();
    
    
                    int selectedIndex_00 = Gr_Carta.SelectedIndex;
                    int selectedIndex_01 = Formato.SelectedIndex;
                    int selectedIndex_02 = Quantità.SelectedIndex;
                    int selectedIndex_03 = Applicazione.SelectedIndex;
                    int selectedIndex_04 = Caldo.SelectedIndex;
                    int selectedIndex_05 = Colori_Stampa.SelectedIndex;
                    int selectedIndex_06 = Finiture.SelectedIndex;
                    int selectedIndex_07 = F_P.SelectedIndex;
                    int selectedIndex_08 = Manico.SelectedIndex;
                    int selectedIndex_09 = Plastificazione.SelectedIndex;
                    int selectedIndex_10 = Rinforzo_Fondo.SelectedIndex;
                    int selectedIndex_11 = Rilievo_Stampa.SelectedIndex;
    
    
                    //Grammi Carta (I valori che dovrebbero essere presi dal database sono di tipo float)
    
    
                    //1
                    if (reader.Read() && selectedIndex_00 == 2 && selectedIndex_01 == 1 && selectedIndex_02 == 1)
                    {
                        Preventivo_value.Text = reader["valore_01"].ToString();
    
    
                        reader.Close();
                        connection.Close();
                    }
                    //2
                    else if(reader.Read() && selectedIndex_00 == 2 && selectedIndex_01 == 1 && selectedIndex_02 == 2)
                    {
                        Preventivo_value.Text = reader["valore_02"].ToString(); //Preventivo_value è un label
    
    
                        reader.Close();
                        connection.Close();
                    }
                    //3
                    else if (reader.Read() && selectedIndex_00 == 2 && selectedIndex_01 == 1 && selectedIndex_02 == 3)
                    {
                        Preventivo_value.Text = reader["valore_03"].ToString();
    
    
                        reader.Close();
                        connection.Close();
                    }
                    //4
                    else if (reader.Read() && selectedIndex_00 == 2 && selectedIndex_01 == 2 && selectedIndex_02 == 1)
                    {
                        Preventivo_value.Text = reader["valore_04"].ToString();
    
    
                        reader.Close();
                        connection.Close();
                    }
                    //5
                    else if (reader.Read() && selectedIndex_00 == 2 && selectedIndex_01 == 2 && selectedIndex_02 == 2)
                    {
                        Preventivo_value.Text = reader["valore_05"].ToString();
    
    
                        reader.Close();
                        connection.Close();
                    }
                    //6
                    else if (reader.Read() && selectedIndex_00 == 2 && selectedIndex_01 == 2 && selectedIndex_02 == 3)
                    {
                        Preventivo_value.Text = reader["valore_06"].ToString();
    
    
                        reader.Close();
                        connection.Close();
                    }
                }
            }
    
    

    In questo modo sono riuscito a prelevare il dato "valore_01" dal database ed effettivamente mi restituisce il valore_01.
    In teoria, viste le condizioni da me imposte, in base a ciò che viene selezionato nelle diverse Dropdown dovrebbe restituire un valore differente ma così non è. Ho provato a sostituire, in ordine nel codice, il valore_01 con il valore_02 ma nulla, non appare niente; viceversa ho provato a sostituire il valore_01 al valore_02 e non accade nulla. Mi rileva solamente il valore_01 impostato sull' if, pare che gli else if non funzionino o che non rilevi gli altri valori nel database.


  • Moderatore

    Ciao Trese, ogni volta che fai un

    reader.Read()
    

    Il cursore dovrebbe posizionarsi sul prossimo elemento del DataReader, quindi al primo sei sulla prima riga della tabella, ma poi continui a spostarti di riga...


  • User

    Sei stato gentilissimo e tempestivo, problema risolto impostando reader.Read() solamente nella prima condizione if.

    Grazie per l'aiuto, mi era sfuggito il corretto funzionamento di tale funzione.

    Puoi chiudere.


  • Moderatore

    Bene, buon lavoro!!!


  • User

    Prima di chiudere un' ultima cosa: come posso convertire la variabile reader in float?

    Nel label io alla fine vorrei vedere il risultato di una somma, il label l'ho usato solamente come test nella condizione if, in realtà ci dovrei mettere una variabile che verrà sommata alle altre per restituirmi la somma nel label.

    Se io imposto:

    
    float grCarta;
    
    if (...)
    {
    grCarta = reader[""] //Impossibile convertire oggetto in float ... Probabilmente manca un cast
    }
    
    

    Come posso? Sono alle prime armi, perdonatemi.


  • Moderatore

    Hai 3 possibilità:

    Se sei sicuro che l'elemento è un float puoi semplicemente fare unboxing del valore:

    grCarta = (float)reader["valore_01"];
    

    oppure

    grCarta = float.Parse(reader["valore_01"]);
    

    Se invece non sei sicuro del contenuto:

    
    float result;
    float.TryParse(reader["valore_01"], out result);
    grCarta = result;
    
    

  • User

    Ho provato con la prima opzione, sono sicuro che i valori reperiti dal database siano tutti float e per ora non mi da problemi.

    Grazie davvero.

    Visto quanto appena accaduto ti pregherei di non chiudere ancora il thread per eventuali delucidazioni 😉


  • Moderatore

    Il thread non lo chiudo, però sarebbe più opportuno aprirne uno per ogni tema... Specificando nel titolo il problema esatto.
    Altrimenti gli altri utenti non ne possono trarre vantaggio immediato...


  • User

    Ha ragione, in caso di nuovo problema aprirò un nuovo thread, grazie ancora.