62 messaggi dal 01 maggio 2001
Ciao a tutti,

Il mio problema riguarda il passaggio di un parametro (uno stupido ID) preso da due gridview differenti.
Il gridview sulla bacheca deve inviare l'id ad una pagina dove risiede il codice che si occupa di aggiornare/inserire i dati in varie tabelle tramite il parametro hyperlink.
Il gridview che si trova nella stessa pagina che "elabora" l'id invece utilizza l'evento OnSelectedIndexChanged="Metodo_...." per passare questo id.

Il problema è che il parametro necessario per eseguire le varie queries è solo questo stupido ID che arriva alla pagina di elaborazione sia tramite hyperlink(Request.QueryString["idrichiesta"]) nel caso della pagina remota, oppure tramite GridView1.SelectedDataKey.Value.ToString() nel caso della pagina di elaborazione...

Una volta che la pagina di elaborazione riceve questo fantomatico ID ( e vi assicuro che L'ID arriva sempre e comunque) e l'utente preme il solito pulsante "salva modifiche" viene richiamato il metodo "Btn_...." che elabora la richiesta dove l'unico parametro richiesto è questo stupido ID che (vi assicuro) esiste!... tutto funziona solo se il parametro viene passato tramite il metodo che viene richiamato dall'evento OnSelectedIndexChanged... la cosa più strana che succede è che non tutte le queries "non vengono eseguite" ma solo una parte.

Chi di voi saprebbe spiegarmi questo strano comportamento?
2.198 messaggi dal 30 novembre 2001
posta un pò di codice così è un pò difficile aiutarti.
62 messaggi dal 01 maggio 2001
chiccosimo ha scritto:
posta un pò di codice così è un pò difficile aiutarti.


Metodo eseguito dall'evento OnSelectedIndexChanged

protected void GridView1_SelectedIndexChanged(object sender, EventArgs e)
        {
            
            //Mostro il Pannello dell'operatore
            PanelDettaglioChiamata.Visible = true;

            //imposto la connessione al DB
            string StringaConnessione = WebConfigurationManager.ConnectionStrings["IntranetConnectionString"].ConnectionString;
            SqlConnection conn = new SqlConnection(StringaConnessione);

            string SQLDettagliRichiesta = "SELECT RICHIESTE_ASSISTENZA.ID_RICHIESTA, RICHIESTE_ASSISTENZA.DATA_APERTURA, RICHIESTE_ASSISTENZA.UTENTE, RICHIESTE_ASSISTENZA.PC, ";
            SQLDettagliRichiesta += "RICHIESTE_ASSISTENZA.DESCRIZIONE_RICHIESTA, RICHIESTE_ASSISTENZA.PRIORITA, RICHIESTE_ASSISTENZA.PRESA_IN_CARICO, RICHIESTE_ASSISTENZA.STADIO, STANZE.DESCRIZIONE_STANZA, STANZE.INTERNO, STANZE.PIANO, ";
            SQLDettagliRichiesta += "REPARTI.DESCRIZIONE_REPARTO, STRUTTURE.DESCRIZIONE_STRUTTURA FROM RICHIESTE_ASSISTENZA INNER JOIN ";
            SQLDettagliRichiesta += "STRUTTURE ON RICHIESTE_ASSISTENZA.IDSTRUTTURA = STRUTTURE.ID_STRUTTURA INNER JOIN ";
            SQLDettagliRichiesta += "REPARTI ON RICHIESTE_ASSISTENZA.REPARTO = REPARTI.ID_REPARTO INNER JOIN ";
            SQLDettagliRichiesta += "STANZE ON RICHIESTE_ASSISTENZA.POSIZIONE = STANZE.ID_STANZA ";
            SQLDettagliRichiesta += "WHERE RICHIESTE_ASSISTENZA.ID_RICHIESTA=@PrID_RICHIESTA";


            //RECUPERO L'ID DELLA RICHIESTA DI ASSISTENZA
            var ID = GridView1.SelectedDataKey.Value.ToString();

            SqlCommand cmd = new SqlCommand(SQLDettagliRichiesta, conn);
            SqlDataReader reader;

            // Aggiungo il parametro per recuperare i dati
            cmd.Parameters.AddWithValue("@PrID_RICHIESTA", ID);

            //prova ad aprire la connessione col DB
            try
            {
                conn.Open();
                reader = cmd.ExecuteReader();
                reader.Read();

                LblUtente.Text = reader["UTENTE"].ToString();
                LblIdRichiesta.Text = reader["ID_RICHIESTA"].ToString();
                LblDataApertura.Text = reader["DATA_APERTURA"].ToString();
                LblPc.Text = reader["PC"].ToString();
                txtRichiesta.Text = reader["DESCRIZIONE_RICHIESTA"].ToString();
                LblStanza.Text = reader["DESCRIZIONE_STANZA"].ToString();
                LblReparto.Text = reader["DESCRIZIONE_REPARTO"].ToString();
                LblInterno.Text = reader["INTERNO"].ToString();
                LblPiano.Text = reader["PIANO"].ToString();
                DrDnElencoPriorita.SelectedValue = reader["PRIORITA"].ToString();
                if (reader["PRESA_IN_CARICO"].ToString() == User.Identity.Name.ToUpper().ToString())
                {
                    CheckBoxCaricoChiamata.Checked = true;
                }
                else
                {
                    CheckBoxCaricoChiamata.Checked = false;
                }
                if (reader["STADIO"].ToString() != null)
                {
                    DrDnStadioRichiesta.SelectedValue = reader["STADIO"].ToString();
                }

                
                reader.Close();
            }
            catch (Exception err)
            {
                errore.Text = "Errore nel recuperare i dati.";
                errore.Text += err.Message;
                errore.Text += err.Source;
            }
            finally
            {
                conn.Close();
            }
        }

Metodo Eseguito quando L'ID arriva tramite http
protected void DettagliRichiesta(string strQueryStringvalue)
        {
            if (strQueryStringvalue != null)
            {
                string ID = strQueryStringvalue;

                //Mostro il Pannello dell'operatore
                PanelDettaglioChiamata.Visible = true;

                //imposto la connessione al DB
                string StringaConnessione = WebConfigurationManager.ConnectionStrings["IntranetConnectionString"].ConnectionString;
                SqlConnection conn = new SqlConnection(StringaConnessione);

                string SQLDettagliRichiesta = "SELECT RICHIESTE_ASSISTENZA.ID_RICHIESTA, RICHIESTE_ASSISTENZA.DATA_APERTURA, RICHIESTE_ASSISTENZA.UTENTE, RICHIESTE_ASSISTENZA.PC, ";
                SQLDettagliRichiesta += "RICHIESTE_ASSISTENZA.DESCRIZIONE_RICHIESTA, RICHIESTE_ASSISTENZA.PRIORITA, RICHIESTE_ASSISTENZA.PRESA_IN_CARICO, RICHIESTE_ASSISTENZA.STADIO, STANZE.DESCRIZIONE_STANZA, STANZE.INTERNO, STANZE.PIANO, ";
                SQLDettagliRichiesta += "REPARTI.DESCRIZIONE_REPARTO, STRUTTURE.DESCRIZIONE_STRUTTURA FROM RICHIESTE_ASSISTENZA INNER JOIN ";
                SQLDettagliRichiesta += "STRUTTURE ON RICHIESTE_ASSISTENZA.IDSTRUTTURA = STRUTTURE.ID_STRUTTURA INNER JOIN ";
                SQLDettagliRichiesta += "REPARTI ON RICHIESTE_ASSISTENZA.REPARTO = REPARTI.ID_REPARTO INNER JOIN ";
                SQLDettagliRichiesta += "STANZE ON RICHIESTE_ASSISTENZA.POSIZIONE = STANZE.ID_STANZA ";
                SQLDettagliRichiesta += "WHERE RICHIESTE_ASSISTENZA.ID_RICHIESTA=@PrID_RICHIESTA";




                SqlCommand cmd = new SqlCommand(SQLDettagliRichiesta, conn);
                SqlDataReader reader;

                // Aggiungo il parametro per recuperare i dati
                cmd.Parameters.AddWithValue("@PrID_RICHIESTA", ID);

                //prova ad aprire la connessione col DB
                try
                {
                    conn.Open();
                    reader = cmd.ExecuteReader();
                    reader.Read();

                    LblUtente.Text = reader["UTENTE"].ToString();
                    LblIdRichiesta.Text = reader["ID_RICHIESTA"].ToString();
                    LblDataApertura.Text = reader["DATA_APERTURA"].ToString();
                    LblPc.Text = reader["PC"].ToString();
                    txtRichiesta.Text = reader["DESCRIZIONE_RICHIESTA"].ToString();
                    LblStanza.Text = reader["DESCRIZIONE_STANZA"].ToString();
                    LblReparto.Text = reader["DESCRIZIONE_REPARTO"].ToString();
                    LblInterno.Text = reader["INTERNO"].ToString();
                    LblPiano.Text = reader["PIANO"].ToString();
                    DrDnElencoPriorita.SelectedValue = reader["PRIORITA"].ToString();
                    if (reader["PRESA_IN_CARICO"].ToString() == User.Identity.Name.ToUpper().ToString())
                    {
                        CheckBoxCaricoChiamata.Checked = true;
                    }
                    else
                    {
                        CheckBoxCaricoChiamata.Checked = false;
                    }
                    if (reader["STADIO"].ToString() != null)
                    {
                        DrDnStadioRichiesta.SelectedValue = reader["STADIO"].ToString();
                    }


                    reader.Close();
                }
                catch (Exception err)
                {
                    errore.Text = "Errore nel recuperare i dati.";
                    errore.Text += err.Message;
                    errore.Text += err.Source;
                }
                finally
                {
                    conn.Close();
                }
            }
        }


come puoi vedere il codice è lo stesso cambia solo la prima parte del metodo

Codice che elabora la richiesta Una volta premuto il pulsante

protected void OnButtonClick_SalvaModifiche(object Sender, EventArgs e)
        {
            //imposto la connessione al DB
            string StringaConnessione = WebConfigurationManager.ConnectionStrings["IntranetConnectionString"].ConnectionString;
            SqlConnection conn = new SqlConnection(StringaConnessione);
            
            

            var DataChiusura = DateTime.Now.ToString();

            

            string SqlAggiornaRichiesta = "";
            string SqlTimer = ""; // query eseguita per tenere traccia del tempo impiegato per la lavorazione di una richesta
            string SqlTimerDurata = "UPDATE TIMER_RICHIESTE SET DURATA = @PrDurata WHERE ID_RICHIESTA = @PrIdRichiesta"; //query da eseguire dopo la sospensione
            
            string SqlInserisciStorico = "INSERT INTO CRONOLOGIA (UTENTE, DATA_OPERAZIONE, OPERATORE, NOTE_OPERATORE, POSTAZIONE, ID_RICHIESTA_ASSISTENZA) ";
            SqlInserisciStorico += "VALUES(@PrUtente, @PrDataChiusura, @PrOperatoreHelpDesk, @PrNoteOperatore, @PrPostazione, @PrIdRichiesta)";

            //Preparo la Query per aggiornare i record e verifico se la chiamata è stata chiusa
            // 0 = chiusa, 1 = aperta
            string StatoRichiesta = DrDnStatoRichiesta.SelectedValue.ToString();
            switch (StatoRichiesta)
            {
                case "0":
                    SqlAggiornaRichiesta = "UPDATE RICHIESTE_ASSISTENZA SET DATA_CHIUSURA=@PrDataChiusura, PRIORITA=@PrPriorita, STATO_RICHIESTA=@PrStatoRichiesta, OPERATORE_HELPDESK=@PrOperatoreHelpdesk, PRIORITA_ASSEGNATA=@PrPrioritaAssegnata, NOTE_OPERATORE=@PrNoteOperatore, PRESA_IN_CARICO=@PrPresaInCarico, STADIO=@PrStadio WHERE ID_RICHIESTA=@PrIdRichiesta";
                    break;

                case "1":
                    SqlAggiornaRichiesta = "UPDATE RICHIESTE_ASSISTENZA SET PRIORITA=@PrPriorita, STATO_RICHIESTA=@PrStatoRichiesta, OPERATORE_HELPDESK=@PrOperatoreHelpdesk, PRIORITA_ASSEGNATA=@PrPrioritaAssegnata, NOTE_OPERATORE=@PrNoteOperatore, PRESA_IN_CARICO=@PrPresaInCarico, STADIO=@PrStadio WHERE ID_RICHIESTA=@PrIdRichiesta";
                    break;
            }
            
            
            // controllo sul tipo di selezione effettuata sul controllo DrDnStadioRichiesta per iniziare o fermare il calcolo del tempo impiegato
            string Scelta = DrDnStadioRichiesta.SelectedValue.ToString();
            switch (Scelta)
            {
                case "2":
                    SqlTimer = "INSERT INTO TIMER_RICHIESTE (ID_RICHIESTA, DATA_INIZIO, IN_SOSPESO) VALUES (@PrIdRichiesta, @PrDatainizio, @PrFlagFalse)";
                    break;

                case "3":
                    SqlTimer = "UPDATE TIMER_RICHIESTE SET DATA_SOSPENSIONE = @PrDataSospensione, IN_SOSPESO = @PrFlag WHERE ID_RICHIESTA = @PrIdRichiesta";
                    break;
            }

            SqlCommand cmd = new SqlCommand(SqlAggiornaRichiesta, conn);
            SqlCommand cmdArchivio = new SqlCommand(SqlInserisciStorico, conn);
            SqlCommand cmdTimer = new SqlCommand(SqlTimer, conn);
            SqlCommand cmdTimerDurata = new SqlCommand(SqlTimerDurata, conn);
         

            //Imposto i parametri per la query di aggiornamento
            cmd.Parameters.AddWithValue("@PrDataChiusura", DataChiusura);
            cmd.Parameters.AddWithValue("@PrPriorita", DrDnElencoPriorita.SelectedValue);
            cmd.Parameters.AddWithValue("@PrStatoRichiesta", DrDnStatoRichiesta.SelectedValue);
            cmd.Parameters.AddWithValue("@PrOperatoreHelpdesk", User.Identity.Name.ToUpper());
            cmd.Parameters.AddWithValue("@PrPrioritaAssegnata", DrDnElencoPriorita.SelectedValue);
            cmd.Parameters.AddWithValue("@PrNoteOperatore", TxtNoteOperatore.Text);
            cmd.Parameters.AddWithValue("@PrIdRichiesta", LblIdRichiesta.Text);
            cmd.Parameters.AddWithValue("@PrUtente", LblUtente.Text);
            cmd.Parameters.AddWithValue("@PrPostazione", LblStanza.Text);
            if (CheckBoxCaricoChiamata.Checked)
            {
                cmd.Parameters.AddWithValue("@PrPresaInCarico", User.Identity.Name.ToUpper());
            }
            else if (DrDnInoltroChiamata.SelectedValue == "...Seleziona")
            {
                cmd.Parameters.AddWithValue("@PrPresaIncarico", "");
            }
            else
            {
                cmd.Parameters.AddWithValue("PrPresaInCarico", DrDnInoltroChiamata.SelectedValue);
            }

            cmd.Parameters.AddWithValue("@PrStadio", DrDnStadioRichiesta.SelectedValue);

            //Parametri per la query del timer
            cmdTimer.Parameters.AddWithValue("@PrIdRichiesta", LblIdRichiesta.Text);
            cmdTimer.Parameters.AddWithValue("@PrDataInizio", DataChiusura);
            cmdTimer.Parameters.AddWithValue("@PrDataSospensione", DataChiusura);
            cmdTimer.Parameters.AddWithValue("@PrDataFine", DataChiusura);
            cmdTimer.Parameters.AddWithValue("@PrFlag", true);
            cmdTimer.Parameters.AddWithValue("@PrFlagFalse", false);

            cmdArchivio.Parameters.AddWithValue("@PrUtente", LblUtente.Text);
            cmdArchivio.Parameters.AddWithValue("@PrDataChiusura", DataChiusura);
            cmdArchivio.Parameters.AddWithValue("@PrOperatoreHelpdesk", User.Identity.Name.ToUpper());
            if (DrDnStatoRichiesta.SelectedValue == "0")
            {
                if (TxtNoteOperatore.Text != "")
                {
                    cmdArchivio.Parameters.AddWithValue("@PrNoteOperatore", "Richiesta Chiusa. " + TxtNoteOperatore.Text);
                }
                else
                {
                    cmdArchivio.Parameters.AddWithValue("@PrNoteOperatore", "Richiesta Chiusa.");
                }
            }
            else
            {
                cmdArchivio.Parameters.AddWithValue("@PrNoteOperatore", TxtNoteOperatore.Text);
            }



            cmdArchivio.Parameters.AddWithValue("@PrPostazione", LblStanza.Text);
            cmdArchivio.Parameters.AddWithValue("@PrIdRichiesta", LblIdRichiesta.Text);


             //prova ad aprire la connessione col DB
            try
            {
                conn.Open();
                cmd.ExecuteNonQuery();
                cmdArchivio.ExecuteNonQuery();

                // Controllo lo stato impostato sulla richiesta

                switch (Scelta)
                {
                    case "2":
                        cmdTimer.ExecuteNonQuery();
                        break;

                    case "3":
                        cmdTimer.ExecuteNonQuery();

                        cmdTimerDurata.Parameters.AddWithValue("@PrDurata", DurataAttivita(LblIdRichiesta.Text));
                        cmdTimerDurata.Parameters.AddWithValue("@PrIdRichiesta", LblIdRichiesta.Text);

                        cmdTimerDurata.ExecuteNonQuery();
                        break;
                }
                
            }
            catch (Exception err)
            {
                errore.Visible = true;
                errore.Text = "Errori durante la query di aggiornamento. ";
                errore.Text += err.Message;
            }
            finally
            {
                conn.Close();
                errore.Visible = false;

                PanelDettaglioChiamata.Visible = false;
                GridView1.DataBind();
                Response.Redirect("~/Richieste/Admin/ElencoAssistenza.aspx");
            }
        }

    }
2.198 messaggi dal 30 novembre 2001
sbaglio o nel metodo di aggiornamento il parametro ID non viene utilizzato? se i 2 metodi sono uguali e differiscono solo per la valorizzazione di ID, puoi utilizzare un unico metodo e valorizzare ID nel page_load nel caso la queryString è diversa da null oppure nel selectedIndexChanged
226 messaggi dal 08 ottobre 2010
Vorrei capire meglio:

Pagina Bacheca.aspx:

Un gridView con una serie di HyperLink che rimandano alla pagina Elabora.aspx

Pagina Elabora.aspx:

Un gridView che visualizza una serie di dati.
Un bottone per salvare le modifiche.


L'id serve per visualizzare i dettagli del record che vuoi modificare, una volta recuperato stampi i dati nel pannello di visualizzazione (in modo che poi li puoi recuperare al Salva)
Se ho capito bene direi che per aiutarti ci servirebbe qualche informazione in più, esattamente, cos'è che non va?
Non recupera l'id dall'http?
Non salva correttamente i dati?
Non esegue alcune query? (Quali?)
62 messaggi dal 01 maggio 2001
chiccosimo ha scritto:
sbaglio o nel metodo di aggiornamento il parametro ID non viene utilizzato? se i 2 metodi sono uguali e differiscono solo per la valorizzazione di ID, puoi utilizzare un unico metodo e valorizzare ID nel page_load nel caso la queryString è diversa da null oppure nel selectedIndexChanged


Il parametro ID viene utilizzato ma viene preso dal modulo(LblIdRichiesta.Text) che viene valorizzato con i dati restituiti dalla query che utilizza L'ID.
62 messaggi dal 01 maggio 2001
Verce84 ha scritto:
Vorrei capire meglio:

Pagina Bacheca.aspx:

Un gridView con una serie di HyperLink che rimandano alla pagina Elabora.aspx

Pagina Elabora.aspx:

Un gridView che visualizza una serie di dati.
Un bottone per salvare le modifiche.


L'id serve per visualizzare i dettagli del record che vuoi modificare, una volta recuperato stampi i dati nel pannello di visualizzazione (in modo che poi li puoi recuperare al Salva)
Se ho capito bene direi che per aiutarti ci servirebbe qualche informazione in più, esattamente, cos'è che non va?
Non recupera l'id dall'http?
Non salva correttamente i dati?
Non esegue alcune query? (Quali?)


L'ID viene recuperato sempre (altrimenti non comparirebbe il pannello per aggiornare i dati)
I Dati (quando l'ID viene recuperato dall'header http) vengono aggiornati in parte.

Non viene eseguita la query :
UPDATE RICHIESTE_ASSISTENZA SET PRIORITA=@PrPriorita, STATO_RICHIESTA=@PrStatoRichiesta, OPERATORE_HELPDESK=@PrOperatoreHelpdesk, PRIORITA_ASSEGNATA=@PrPrioritaAssegnata, NOTE_OPERATORE=@PrNoteOperatore, PRESA_IN_CARICO=@PrPresaInCarico, STADIO=@PrStadio WHERE ID_RICHIESTA=@PrIdRichiesta


@PrIdRichiesta è valorizzato da: cmd.Parameters.AddWithValue("@PrIdRichiesta", LblIdRichiesta.Text);
LblIdrichiesta.Text Sarebbe il valore dell'ID famoso che esiste(altrimenti non esisterebbe neanche il LblIdRichiesta).
2.198 messaggi dal 30 novembre 2001
hai abilitato il viewstate alla label? perchè se come dici tu viene valorizzata correttamente e poi non passa il valore o non è abilitato il viestate oppure reimposti di nuovo il valore della label da qualche parte.

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.