32 messaggi dal 22 dicembre 2013
Ciao a tutti,
dovrei risolvere un problema ma non so bene come fare:
ho creato un' area riservata nel mio sitoweb nella quale poter gestire i prodotti che sono presenti in un database MySql. Qui permetto di aggiungere prodotti, eliminarli e modificarli; ed è proprio in quest'ultimo caso che ho dei problemi.
Ho creato modifica_vino.aspx alla quale passo l'id del prodotto selezionato e che uso per leggere i dati attualmente caricati nel db attraverso il metodo readVino() che faccio eseguire al caricamento della pagina.
Successivamente le stesse textbox che vengono popolate da readVino() sono le stesse in cui posso cancellare e scrivere i nuovi valori.
Una volta modificati i campi voluti, alla pressione del button aggiorna
dovrebbe partire il metodo btnUpdate_Click che prende i dati delle textbox ed aggiorna il db.
Fino a qui in realtà tutto bene, nel senso che effettivamente vengono inseriti i valori nel db ma alla pressine del button sembrerebbe come se la pagina venga prima "ricaricata" e quindi i valori contenuti nelle textbox tornano ad essere quelli vecchi. Detto in breve è come se aggiornassi il db sempre con le stesse informazioni.
Dico questo anche in ragione del fatto che se levo dal Page_Load readVino(),ovviamente al caricamento della pagina avrò tutti i campi vuoti, però se scrivo alcuni valori e premo il button aggiorna di fatto vengono salvati i nuovi dati.
A questo punto la domanda è come posso risolvere questo problema?

Spero di essere stato chiaro e ringrazio tutti in anticipo per la pazienza e per le eventuali risposte che mi verranno date.

Di seguito il codebehind della pagina modifica_vino.aspx
using System;
using System.Collections.Generic;
using System.Linq;
using System.Web;
using System.Web.UI;
using System.Web.UI.WebControls;
using MySql.Data.MySqlClient;
using MySql.Data;
using System.Configuration;

namespace haph.admin.gestisci_vini
{
    public partial class modifica_vino : System.Web.UI.Page
    {
        string cover = "";

        protected void Page_Load(object sender, EventArgs e)
        {
            readVino();
        }

        protected void readVino()
        {
            MySqlConnection con = new MySqlConnection(ConfigurationManager.ConnectionStrings["haph_dbConnectionString"].ToString());//stringa connessione db
            //query db
            string mySql = "select * from vini where vID = " + Request.QueryString["id"];
            con.Open();//apro la connessione con il db

            MySqlCommand cmd = new MySqlCommand(mySql, con);//eseguo il comando di inserimento grazie alla string (query) ella connection
            MySqlDataReader reader = cmd.ExecuteReader();

            reader.Read();

            txbNome.Text = reader["vNome"].ToString();
            txbAzienda.Text = reader["vAzienda"].ToString();
            Image_Vino.ImageUrl = "~/images/" + reader["vCover"].ToString();
            cover = reader["vCover"].ToString();
            ddlColore.SelectedValue = reader["vColore"].ToString();
            ddlOrigine.SelectedValue = reader["vOrigine"].ToString();
            ddlTipologia.SelectedValue = reader["vTipo"].ToString();
            ddlAnno.SelectedValue = reader["vAnno"].ToString();
            ddlCategoria.SelectedValue = reader["vCategoria"].ToString();
            txbPrezzo.Text = reader["vPrezzo"].ToString();
            txbOfferta.Text = reader["vOfferta"].ToString();
            txbPrezzoVecchio.Text = reader["vPrezzoVecchio"].ToString();
            txbQuantita.Text = reader["vQuantita"].ToString();
            txbData.Text = reader["vData"].ToString();
            txbCodice.Text = reader["vCodice"].ToString();
            txbPeso.Text = reader["vPeso"].ToString();

            con.Close();
        }

        protected void btnUpdate_Click(object sender, EventArgs e)
        {
            try
            {
                MySqlConnection con = new MySqlConnection(ConfigurationManager.ConnectionStrings["haph_dbConnectionString"].ToString());//stringa connessione db
                //query db
                string mySql = "update vini set vNome = '" + txbNome.Text + 
                               "', vAnno = '" + Convert.ToInt32(ddlAnno.SelectedValue) + 
                               "', vColore = '" + ddlColore.SelectedValue +
                               "', vOrigine = '" + ddlOrigine.SelectedValue + 
                               "', vCategoria = '" + ddlCategoria.SelectedValue + 
                               "', vCodice = '" + txbCodice.Text + 
                               "', vPrezzo = '12.20', vCover = '" + cambiaCover(Upload_Img) + 
                               "', vPeso = '1.5', vQuantita = '" + Convert.ToInt32(txbQuantita.Text) + 
                               "', vAzienda = '" + txbAzienda.Text + 
                               "', vTipo = '" + ddlTipologia.SelectedValue + 
                               "', vData = '2015-01-16', vOfferta = '" + txbOfferta.Text + 
                               "', vPrezzoVecchio = '" + txbPrezzoVecchio.Text + 
                               "' where vID = " + Request.QueryString["id"];
                con.Open();//apro la connessione con il db

                cmd.ExecuteNonQuery();//eseguo il comando di inserimento dati nel db
                con.Close();//eseguo chiusura connessione con il db

                txbRisultato.Text = "Il prodotto è stato aggiornato con successo!   ";
            }
            catch { txbRisultato.Text = "Errore! Il prodotto non è stato aggiornato con successo, si prega di ricontrollare tutti i campi"; }
        }

        protected string cambiaCover(FileUpload fu)
        {
            if (fu.HasFile)
                return fu.FileName;
            else
                return cover;
        }
    }
}

Modificato da Lomsoft il 25 gennaio 2015 17.52 -
354 messaggi dal 13 marzo 2013
Una domanda: ma quando aggiorni i valori nel database questi restano aggiornati oppure no?
21 messaggi dal 14 ottobre 2010
Dovresti vedere meglio l'ordine degli eventi al caricamento della pagina.

Se non ricordo male, alla pressione di un pulsante (evento onclick) la pagina viene ricaricata. Per evitare questi problemi dovresti gestire il postback nella routine associata all'evento load della pagina.

Spero di essere stato chiaro.

Saluti

La risposta che cerchi è dentro di te ...
Peccato che è quella sbagliata! (cit. Quelo)
32 messaggi dal 22 dicembre 2013
Scusate il mio ritardo nel leggere le vostre risposte.

Per la prima domanda rispondo dicendo che la funzione di aggiornamento "da un punto di vista tecnico avviene" è solo che i valori nel db vengono aggiornati con gli stessi di prima, proprio perché nella query del bottone "update" i valori dei campi di testo da me richiesti al momento della pressione dello stesso vengono, nn so perché, reimpostati a quelli vecchi (cioè quelli letti inizialmente dalla funzione readVino).

Per la seconda risposta invece posso solo dire che intuitivamente devo ammettere che avevo pensato ad un problema del genere, e che quindi dovrei cercare di gestire il postback nella routine associata all'evento load della pagina; ma essendo io un neofita del framework asp.net e di c# ho un po' di difficoltà nel mettere in pratica tale suggerimento.

Infine posso dirvi però che prima di vedere le vostre risposte ho rimesso mano al problema e per ora l'ho risolto in maniera forse poco ortodossa ma diciamo "efficace": poichè alla pagina di modifica(cioè quella che vi ho postato) vengo reindirizzato da un'altra pagina, allora oltre a passare nell'indirizzo l'id del prodotto per leggere i dati con readVino(), gli passo anche un altro parametro "update=false", in modo che readVino() al caricamento della pagina venga eseguito solo se update=false. Quando premo il bottone dell'update a quest'ultimo ho settato stavolta anche il postbackUrl sempre alla pagina modifica ma con il parametro update=true cosi readVino() non viene eseguito e i valori sia nel db che nella pagina vengono aggiornati a quelli nuovi.

Scusate se mi dilungo molto ma cerco sempre di essere più chiaro possibile. Con quanto detto poco fa però sono comunque sempre aperto a qualunque suggerimento che mi possa far gestire la mia situazione nel modo migliore, anche per poter approfondire lo studio di questo framwork.

Come sempre ringrazio chi mi ha risposto e chi eventualmente mi risponderà.
Modificato da Lomsoft il 27 gennaio 2015 18.08 -
Modificato da Lomsoft il 27 gennaio 2015 18.08 -
354 messaggi dal 13 marzo 2013
Se ti può interessare qua trovi come gestire il postback. E' molto facile, devi gestire un IF nel pageload per vedere se la pagina ha fatto il postback o meno.

https://msdn.microsoft.com/it-it/library/system.web.ui.page.ispostback(v=vs.110).aspx?cs-save-lang=1&cs-lang=csharp#code-snippet-2
32 messaggi dal 22 dicembre 2013
Ti ringrazio molto per l'articolo che mi hai postato non solo perché mi interessa per approfondire le conoscenze con questo linguaggio, ma anche perché vista la semplicità l'ho gia messo in pratica al posto della soluzione che avevo trovato da solo.

Torna al forum | Feed RSS

ASPItalia.com non è responsabile per il contenuto dei messaggi presenti su questo servizio, non avendo nessun controllo sui messaggi postati nei propri forum, che rappresentano l'espressione del pensiero degli autori.