Récupération d'une variable issue d'une autre methode [Résolu]

Messages postés
86
Date d'inscription
samedi 31 janvier 2009
Dernière intervention
26 mai 2010
- - Dernière réponse : coccolata
Messages postés
86
Date d'inscription
samedi 31 janvier 2009
Dernière intervention
26 mai 2010
- 19 mars 2009 à 12:57
bonsoir,
comment je peux récuperer le contenu d'une variable utilisée dans une autre methode??
j'ai essayé  par exp bool ref maVariable=false; lors de la declaration
j'ai essayé de mettre la variable desiree comme valeur retournée et je la recupere avec maVariable=nomclasse.nomMethode();
mais ça ne marche pas
Afficher la suite 

Votre réponse

11 réponses

Meilleure réponse
Messages postés
118
Date d'inscription
lundi 16 février 2009
Dernière intervention
6 décembre 2010
3
Merci
si tu as cela dans le code ta page cela devrait marcher (enfin faut corriger le touve en trouve et ton premier cast en bool est pas necessaire mm deconseillé.
Si ta structure de page ressemble a ceci ca devrait marcher:
public partial class _Default : System.Web.UI.Page
{
public bool trouve
{
    get
    {
        bool text = (ViewState["trouve"] != null) ? (bool)ViewState["trouve"] : false;
        return text;
    }
    set
    {
        ViewState["trouve"] = value;
    }
}

//pour le test
//j'ai un bouton qui realise un postback donc premiere fois il m'affiche faux, apres un postback il m'affiche vrai
protected void Page_Load(object sender, EventArgs e)
{
    if (trouve)
        Response.Write("vrai");
    else
    {
        Response.Write("faux");
        trouve = true;
    }
}
...
}

Corrige deja le touve en trouve bien que je pense que tu l'ai deja fait mais bon ^^

EDIT: je viens de voir ton autre post, et bien sur tu peux stocker dans la session mais cela n'est peut-etre pas necessaire. Il faut voir quelle est le "scope" dont tu as besoin. Ici si tu as juste besoin de passer une info d'un postback a l'autre le viewstate ira très bien. Si par contre tu souhaites garder une info toute au long de la session et que tu comptes la reutiliser a plus endroits/reprises alors la oui tu utiliseras l'objet Session.

Donc pour résumer:

La Session te permet de stocker des informations pour une durée determinée et pour un utilisateur donnée tant qu'il interagit avec l'application web.
Le Viewstate se contente de garder l'info d'un postback à l'autre

Dire « Merci » 3

Quelques mots de remerciements seront grandement appréciés. Ajouter un commentaire

Codes Sources a aidé 98 internautes ce mois-ci

Commenter la réponse de RougailSaucisse
Messages postés
86
Date d'inscription
samedi 31 janvier 2009
Dernière intervention
26 mai 2010
0
Merci
voici un bout de code:
 protected void CalendarI_SelectionChanged(object sender, EventArgs e)
(.......................)
if (dateValide)
        {


            // test de la date : existe ou non dans la table de pointage


            while (i < ds.Tables[0].Rows.Count && !trouve)
            {
                if (Convert.ToDateTime(ds.Tables[0].Rows[i].ItemArray[0]).ToShortDateString() == CalendarI.SelectedDate.ToShortDateString())
                { trouve = true; } // la date selectionnée existe dans la table pointages
                i++;
            }
        }


        if (trouve)
        {
            ClientScript.RegisterStartupScript(typeof(Page), "alert", "<script language=JavaScript>alert('" + (dateExistante) + "');</script>");
        }


l'autre methode
protected void btnvaliderI_Click(object sender, EventArgs e)
(............)
if (!trouve)
        {  insertEffectue = db.Insert(" INSERT INTO deletePointages  VALUES(" + mat + "," + firstName + "," + lastName + "," + txtpointageI.Text + "," + txtmotifI.Text + defaut + CalendarI.SelectedDate.ToShortDateString() + ")"); }




la question est comment récuperer "trouve" dans la 2methode
Commenter la réponse de coccolata
Messages postés
118
Date d'inscription
lundi 16 février 2009
Dernière intervention
6 décembre 2010
0
Merci
il faut que tu sauves ta variable d'une page a l'autre, car SelectionChanged et button_click provoque un postback et par conséquent tu perds l'état de tes variables.
Stockes donc ta variable "trouve" dans un ViewState par exemple.

private bool trouve = (ViewState["trouve"] != null) ? (bool)ViewState["trouve"] : false;

puis n'oublie pas de sauver dans le viewstate a chaque fois que ta variable 'trouve' change d'etat:
trouve = true;
ViewState["trouve"] =  trouve;
Commenter la réponse de RougailSaucisse
Messages postés
86
Date d'inscription
samedi 31 janvier 2009
Dernière intervention
26 mai 2010
0
Merci
merci RougailSaucisse pour ta réponse, j'étais  vraiment bloquée...
mais en fait le blocage persiste encore
l'emploi du ViewSate m'a généré une erreur :
 Error 1 Une référence d'objet est requise pour la propriété, la méthode ou le champ non statique 'System.Web.UI.Control.ViewState.get' C:\Documents and Settings\user\Mes documents\Visual Studio 2005\WebSites\CorrectionPointage\Insertion.aspx.cs 17 28 C:\...\CorrectionPointage\

pourtant j'utlise




using




System.Web.UI;



using




System.Web.UI.WebControls;
 
quelle est la référence manquante?
peux tu m'expliquer d'avantage qu'est ce qu'un ViewState???

thaaaaaaaaaaaaaaaaaaaaaanks
Commenter la réponse de coccolata
Messages postés
118
Date d'inscription
lundi 16 février 2009
Dernière intervention
6 décembre 2010
0
Merci
hummm comment et ou emploi tu le viewstate qui te genère cette erreur?
La comme ca j'avoue que je ne vois pas bien. a premiere vue j'aurai pensé que tu utilisais cela dans une classe n'implementant pas System.Web.UI.Page mais l'erreur semble provenir d'un code behind d'une de tes pages donc ca devrait pas etre ca. La deuxieme chose à laquelle j'aurai pensé c'est que tu fais appel a ViewState dans une méthode static de ta page (et du fais qu'une methode static ne peut appeler une methode d'instance tu pourrais avoir cette erreur).

enfin peu importe, si tu pouvais indiquer la fonction/le contexte dans laquelle tu fais appel a ViewState et qui te renvoie cette erreur on verra bien.
sinon pour le viewstate je n'ai pas de lien précis, mais le net est inondé d'infos a ce sujet (fais un tour sur http://www.msdn.com, ou http://asp.net/learn) je suis sur qu'il y a aura des trucs a ce sujet.
Commenter la réponse de RougailSaucisse
Messages postés
86
Date d'inscription
samedi 31 janvier 2009
Dernière intervention
26 mai 2010
0
Merci
bonjour,
j'ai fait un petit  tour sur le net apropos du ViewState, j'ai noté que l'emploi de ce controle est toujours lié a gridview..dropdownlist...qui n'est le cas pour moi
je pense qu'il est destiné de stocker des variables coté client d'un gridview dropdownlist...mais pas une variable quelconque en code behind...
je ferai d'autre tentatives...
Commenter la réponse de coccolata
Messages postés
118
Date d'inscription
lundi 16 février 2009
Dernière intervention
6 décembre 2010
0
Merci
bonjour,

si si tu peux stocker ce que tu veux dans un viewstate ;)

Dans les exemples que tu as du voir il est utilisé pour garder l'etat des variables, comportement par défaut, mais tu peux de la mm manière stocket n'importe quel type de variable dans le viewstate. Par exemple pour les tri sur certains controles de données, on peut stocker l'index courant (PageIndex) dans le viewstate et ce n'est pourtant bien qu'un int qu'on stocke.
donc de la mm manière si tu as besoin de stocker un autre type pour quelconque raison tu peux le faire. Le tout dans ton cas etait de verifier si tu n'appelait ton viewstate dans une methode static.
Commenter la réponse de RougailSaucisse
Messages postés
86
Date d'inscription
samedi 31 janvier 2009
Dernière intervention
26 mai 2010
0
Merci
rebonjour j'ai essayé d'employer une methode pour gerer ce viewstate

public
bool trouve{

get{

bool text = ((
bool)ViewState[
"trouve"]!=
null)?(
bool)ViewState[
"touve"]:
false;

return text;

}

set{

ViewState[

"trouve"] =
value;}

}

mais en vain!!!!
Commenter la réponse de coccolata
Messages postés
86
Date d'inscription
samedi 31 janvier 2009
Dernière intervention
26 mai 2010
0
Merci
j'ai une suggestion je sais qu'elle est bête mais comme meme je vais la signaler
je peux utiliser des variables de session?? ça fonctionne seulement entre les pages??
apparamment oui
Commenter la réponse de coccolata
Messages postés
86
Date d'inscription
samedi 31 janvier 2009
Dernière intervention
26 mai 2010
0
Merci
je pense que je vais pas m'ensortir de ce probleme ou plutot de ce viewstate!! je vous explique
c'est vrai mnt que ma variable trouve est sauvegardée mais mnt c'est le prob à l'envers!!
dans le weboform insertion je dois d'abord selectionne une date d'un calendar non figurante dans la liste de controle c'est pour cette raison je fais je ce test "trouve" pour se rassurer que la date selectionnee est bien inexistante dans ma liste de pointage
bref..quand je selectionne une date existente..pas de prob!ça fonctionne tres bien..et j'ai une message d'avertissement pour l'utilisateur mais quand je selectionne une deuxieme fois une date..bien correcte...je viewstate a deja sauvegardé trouve a true!!! donc j'ai la meme generation du message d'avertissement alors que ma date est valide!
je voulais dire que tantot je veux conserer ma variable trouve et tantot je veux la reinitialiser à false
pour renouveller le test
Commenter la réponse de coccolata
Messages postés
86
Date d'inscription
samedi 31 janvier 2009
Dernière intervention
26 mai 2010
0
Merci
salut! probleme résolu
comme meme c'est pas la meilleur solution  mais ça m'arrange
c'est simple, chaque fois que j'affiche un message d'avertissement je mets trouve à false, comme ça dans le prochain test lors de la reselection de la date trouve sera egale a la valeur initiale false
comme ça:

if (trouve){

trouve =

false;ViewState[

"trouve"] = trouve;ClientScript.RegisterStartupScript(

typeof(
Page),
"alert",
"<script language=JavaScript>alert('" + (dateExistante) +
"');</script>");}

Merci pour ton  aide
Commenter la réponse de coccolata

Vous n'êtes pas encore membre ?

inscrivez-vous, c'est gratuit et ça prend moins d'une minute !

Les membres obtiennent plus de réponses que les utilisateurs anonymes.

Le fait d'être membre vous permet d'avoir un suivi détaillé de vos demandes et codes sources.

Le fait d'être membre vous permet d'avoir des options supplémentaires.