Récupération d'une variable d'une méthode à une autre [Résolu]

Signaler
Messages postés
95
Date d'inscription
lundi 11 février 2008
Statut
Membre
Dernière intervention
8 juin 2009
-
Fo0Zie
Messages postés
95
Date d'inscription
lundi 11 février 2008
Statut
Membre
Dernière intervention
8 juin 2009
-
Bonjour à tous.

Dans mon code behind dans la méthode row command de ma grid view je récupère une valeur qui est dans un champ caché de ma grid view.
J'ai déclaré comme attribut de ma classe une variable id,  qui récupère cette valeur pour pouvoir l'utiliser dans d'autre méthode de la classe.
Voici ma méthode row_command :
        protected void GridViewCiv_RowCommand(object sender, GridViewCommandEventArgs e)
        {   
            if (e.CommandName == "Select")
            { 
                GridViewRow row = (GridViewRow)(((ImageButton)e.CommandSource).NamingContainer);
                // Récupère la valeur du champ caché "hfIdCiv" qui est la clef primaire de la ligne sélectionnée à modifier
                HiddenField hfIdCiv = (HiddenField)row.FindControl("hfIdCiv");

                // récupération l'id dans une variable
                this.idCiv = Convert.ToInt32(hfIdCiv.Value);
            }          
        }
En mode debug, Quand je test si mon idCiv est vide dans une autre méthode, il ne l'est pas mais il vaut  zéro. Alors que dansla méthode de mon row command il vaut bien la valeur de mon idCiv, par exemple 13.

12 réponses

Messages postés
40
Date d'inscription
mercredi 31 janvier 2007
Statut
Membre
Dernière intervention
23 février 2009

as -tu bien vérifié que tu ne re-instancie pas ta variable entre temps ?
Messages postés
95
Date d'inscription
lundi 11 février 2008
Statut
Membre
Dernière intervention
8 juin 2009
1
Oui j'ai vérifier
Messages postés
40
Date d'inscription
mercredi 31 janvier 2007
Statut
Membre
Dernière intervention
23 février 2009

peux-tu mettre l'autre fonction qui récupere cette valeur avec une notification dessous pour montrer a quel moment tu visualise que ta valeur est mauvaise ?
Messages postés
118
Date d'inscription
lundi 16 février 2009
Statut
Membre
Dernière intervention
6 décembre 2010
1
Effectivement tu recharges ta page est ne sauvegarde pas ta valeur.
tu peux utiliser un ViewState. Je pense à un truc un peu comme ca (verifier que ca compile bien mais c'est pour le principe):

lors de l'initialisation:
this.IdCiv = Convert.ToInt32(hfIdCiv.Value);
ViewState["idCiv"] = this.IdCiv;

Dans ton page_load:
this.IdCiv = (ViewState["idCiv"] != null) ? (int)ViewState["idCiv"] : 0;
Messages postés
118
Date d'inscription
lundi 16 février 2009
Statut
Membre
Dernière intervention
6 décembre 2010
1
this.IdCiv = (ViewState["idCiv"] != null) ? (int)ViewState["idCiv"] : 0;

est équivalent à:

if(ViewState["idCiv"] != null)
  this.IdCiv = (int)ViewState["idCiv"];
else
  this.IdCiv = 0;

Donc en gros, si il y a un "Viewstate" alors ta variable this.IdCiv prend la valeur contenue dans le viewstate, sinon elle prend la valeur 0.

Le viewstate te permet simplement de sauvegarder une valeur (de n'importe quel type de base (int, string...) ou perso (une classe personnelle ou n'importe quoi)).
Ainsi tu vas pouvoir passer cette valeur de page en page. Le Viewstate est "traduit" en html par un champ .
Comme tu l'as dis regarde sur le net, il y a de très bon articles expliquant son fonctionnement exact.

Bonne continuation!
Messages postés
95
Date d'inscription
lundi 11 février 2008
Statut
Membre
Dernière intervention
8 juin 2009
1
  protected void ImgBtnAjout_Click(object sender, ImageClickEventArgs e)
        {
            // connexion au SGBDR
            string ConnectionString = settings.ConnectionString;
            SqlConnection cnn = new SqlConnection(ConnectionString);
           
            if (this.idCiv.ToString() != "") // ici mon idCiv vaut 0, alors que dans mon autre méthode il valait l'id de la civilité sélectionnée
            {
                // Requête SQL permettant de mettre à jour le libellé de la civilité
                SqlCommand cmd = new SqlCommand("UPDATE personne_civilite SET perci_libelle=@libelleCiv WHERE id_personne_civilite=@idCiv", cnn);
                cmd.Parameters.Add("@idCiv", SqlDbType.Int);
                cmd.Parameters["@idCiv"].Value = this.idCiv;
                cmd.Parameters.Add("@libelleCiv", SqlDbType.VarChar);
                cmd.Parameters["@libelleCiv"].Value = this.txtBoxAjout.Text;

                // Ouverture de la connexion
                cnn.Open();
                // Exécution de la requête
                cmd.ExecuteNonQuery();
                // Fermeture de la connexion
                cnn.Close();
            }
            // Sinon on crée une nouvelle civilité
            else
            {
                // Requête SQL permettant l'ajout d'une civilité
                SqlCommand cmd = new SqlCommand("INSERT INTO personne_civilite(perci_libelle) VALUES(@civilite)", cnn);
                cmd.Parameters.Add("@civilite", SqlDbType.VarChar);
                cmd.Parameters["@civilite"].Value = this.txtBoxAjout.Text;

                //Ouverture de la connection et exécution de la commande
                cnn.Open();

                // Exécution de la requête
                cmd.ExecuteNonQuery();

                // Fermeture de la connexion
                cnn.Close();
                // Actualise la GridView
                this.GridViewCiv.DataBind();
            }
Messages postés
40
Date d'inscription
mercredi 31 janvier 2007
Statut
Membre
Dernière intervention
23 février 2009

Euh truc très basique est-ce que tu as bien vérifier l'enchaînement ? Qu'il appel pas ImgBtnAjout_Click avant GridViewCiv_RowCommand ?
Car ça m'est déjà arrivé malgré l'ordre logiques je sais pas pourquoi mais çà peut être ça.
Messages postés
95
Date d'inscription
lundi 11 février 2008
Statut
Membre
Dernière intervention
8 juin 2009
1
Non mais en faite je remarque que vu que je fais 2 actions avec un clic, sa "recahrge" ma page et je perds ma valeur. Mais je vois pas comment faire.
Messages postés
40
Date d'inscription
mercredi 31 janvier 2007
Statut
Membre
Dernière intervention
23 février 2009

Tu fait quoi dans le page_load ou init ? 

Est-ce que tu utilise un update panel ?
Messages postés
95
Date d'inscription
lundi 11 février 2008
Statut
Membre
Dernière intervention
8 juin 2009
1
Non je ne fait rien dans mon page_load
Messages postés
95
Date d'inscription
lundi 11 février 2008
Statut
Membre
Dernière intervention
8 juin 2009
1
Merci RougailSaucisse, ça fonctionne parfaitement maintenant.
Mais peux tu m'expliquer la ligne du page_load ? J'aime bien comprendre ce que je fais.
Et aussi qu'est-ce que c'est qu'un viewState (pour ça je vais regarder sur Internet ). Merci encore et merci Seb_P de m'avoir aidé aussi .
Messages postés
95
Date d'inscription
lundi 11 février 2008
Statut
Membre
Dernière intervention
8 juin 2009
1
Merci bien.

J'avais vu en algo les if en une ligne mais jamais en C#