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

Résolu
Fo0Zie Messages postés 95 Date d'inscription lundi 11 février 2008 Statut Membre Dernière intervention 8 juin 2009 - 23 févr. 2009 à 09:01
Fo0Zie Messages postés 95 Date d'inscription lundi 11 février 2008 Statut Membre Dernière intervention 8 juin 2009 - 24 févr. 2009 à 10:30
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

cs_Seb_P Messages postés 40 Date d'inscription mercredi 31 janvier 2007 Statut Membre Dernière intervention 23 février 2009
23 févr. 2009 à 10:52
as -tu bien vérifié que tu ne re-instancie pas ta variable entre temps ?
3
Fo0Zie Messages postés 95 Date d'inscription lundi 11 février 2008 Statut Membre Dernière intervention 8 juin 2009 1
23 févr. 2009 à 11:46
Oui j'ai vérifier
3
cs_Seb_P Messages postés 40 Date d'inscription mercredi 31 janvier 2007 Statut Membre Dernière intervention 23 février 2009
23 févr. 2009 à 11:50
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 ?
3
RougailSaucisse Messages postés 118 Date d'inscription lundi 16 février 2009 Statut Membre Dernière intervention 6 décembre 2010 1
23 févr. 2009 à 20:56
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;
3

Vous n’avez pas trouvé la réponse que vous recherchez ?

Posez votre question
RougailSaucisse Messages postés 118 Date d'inscription lundi 16 février 2009 Statut Membre Dernière intervention 6 décembre 2010 1
24 févr. 2009 à 09:52
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!
3
Fo0Zie Messages postés 95 Date d'inscription lundi 11 février 2008 Statut Membre Dernière intervention 8 juin 2009 1
23 févr. 2009 à 13:48
  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();
            }
0
cs_Seb_P Messages postés 40 Date d'inscription mercredi 31 janvier 2007 Statut Membre Dernière intervention 23 février 2009
23 févr. 2009 à 14:08
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.
0
Fo0Zie Messages postés 95 Date d'inscription lundi 11 février 2008 Statut Membre Dernière intervention 8 juin 2009 1
23 févr. 2009 à 14:58
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.
0
cs_Seb_P Messages postés 40 Date d'inscription mercredi 31 janvier 2007 Statut Membre Dernière intervention 23 février 2009
23 févr. 2009 à 15:04
Tu fait quoi dans le page_load ou init ? 

Est-ce que tu utilise un update panel ?
0
Fo0Zie Messages postés 95 Date d'inscription lundi 11 février 2008 Statut Membre Dernière intervention 8 juin 2009 1
23 févr. 2009 à 15:25
Non je ne fait rien dans mon page_load
0
Fo0Zie Messages postés 95 Date d'inscription lundi 11 février 2008 Statut Membre Dernière intervention 8 juin 2009 1
24 févr. 2009 à 08:57
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 .
0
Fo0Zie Messages postés 95 Date d'inscription lundi 11 février 2008 Statut Membre Dernière intervention 8 juin 2009 1
24 févr. 2009 à 10:30
Merci bien.

J'avais vu en algo les if en une ligne mais jamais en C#
0
Rejoignez-nous