Fo0Zie
Messages postés95Date d'inscriptionlundi 11 février 2008StatutMembreDernière intervention 8 juin 2009
-
23 févr. 2009 à 09:01
Fo0Zie
Messages postés95Date d'inscriptionlundi 11 février 2008StatutMembreDerniè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.
A voir également:
Récupération d'une variable d'une méthode à une autre
cs_Seb_P
Messages postés40Date d'inscriptionmercredi 31 janvier 2007StatutMembreDernière intervention23 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 ?
RougailSaucisse
Messages postés118Date d'inscriptionlundi 16 février 2009StatutMembreDernière intervention 6 décembre 20101 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;
Vous n’avez pas trouvé la réponse que vous recherchez ?
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.
Fo0Zie
Messages postés95Date d'inscriptionlundi 11 février 2008StatutMembreDernière intervention 8 juin 20091 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();
}
cs_Seb_P
Messages postés40Date d'inscriptionmercredi 31 janvier 2007StatutMembreDernière intervention23 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.
Fo0Zie
Messages postés95Date d'inscriptionlundi 11 février 2008StatutMembreDernière intervention 8 juin 20091 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 .