Passer une donnée d'une ligne de GridView à un UserControl [Résolu]

Messages postés
45
Date d'inscription
lundi 29 janvier 2007
Statut
Membre
Dernière intervention
13 mars 2009
- - Dernière réponse : obitskater
Messages postés
45
Date d'inscription
lundi 29 janvier 2007
Statut
Membre
Dernière intervention
13 mars 2009
- 30 mai 2008 à 16:37
Bonjour à tous,

Voilà, dans ma page principal j'ai une GridView avec pour chaque ligne un HoverMenu Ajax.Net, dans lequel il y a des liens permettant l'ouverture de Popup, sous la forme d'un userControl, qui affiche les détails de la ligne selectionnée dans la GridView.

Mon problème est que je souhaiterais passser l'id de la ligne selectionné au UserControl, mais je bloque et je ne vois pas du tout comment faire. J'ai pensé à l'évènement OnSelectedIndexChanged de la GridView pour passer l'id en Session, et le récupérer dans le pageLoad de l'UserControl, mais j'ai une Exception "Object reference not set to an instance of an object. "

Voici ma procédure de la page principale pour mettre l'Id dans la Session:

protected void gvTab_SelectedIndexChanged(object sender, EventArgs e)
    {
        Session["RowIdStatut"]= Int32.Parse( gvTab.SelectedRow.Cells[0].ToString());
    }

Et ici, le PageLoad de mon UserControl:

protected void Page_Load(object sender, EventArgs e)
    {
        _iID = Int32.Parse(Session["RowIdStatut"].ToString());
        //C'est ici qu'il y a l'erreur, il dit que Session["RowIdStatut"] est null
            lblID.Text "id " + _iID;
    }

Si vous aviez une idée ce serait top ^^, merci d'avance!
Afficher la suite 

10 réponses

Meilleure réponse
Messages postés
45
Date d'inscription
lundi 29 janvier 2007
Statut
Membre
Dernière intervention
13 mars 2009
3
Merci
Bon désolé pour l'absence mais maintenant c'est bon je m'en suis sorti voici comment j'ai fais si quelqu'un rencontre le meme probleme:

_ dans mon userControl, j'ai une variable globale pour l'id dont je défini le getter/setter

_ dans ma page principal :

je met un register dans ma page .aspx pour le intégrer mon userControl:
<%@ Register TagPrefix= "cc1" TagName=" Nom que vous voulez donner à votre userControl " Src ="chemin de votre UserControl"%>

du cotê du code behind, je déclare une variable globale de type de mon userControl
public UC         _myUc;

et dans le pageLoad je charge mon UserControl dans ma variable globale
_myUc = (UC)     LoadControl(" chemin de votre UserControl ");

Puis dans l'événement OnClick du LinkButton qui devait ouvrir la popup contenant ce userControl, je récupère l'id de la ligne de ma gridview que je veux utiliser dans mon UserControl, je le passe à ce dernier grâce à la propriété id dans mon UC que j'avais défini plus haut. Puis finalement je charge dynamiquement mon UserControl (et je ne le met plus directement dans le code asp, car il ne fait le load du userControl directement dés le Load de la page principal et donc qu'une fois) dans mon panel, et c'est grâce à ça que je passe dans le Load du UserControl.
Au préalable il faut définir le datakey de la gridView sur la colonne que vous voulez définir comme identifiant.

protected void lbtnHistorique_Click(object sender, System.EventArgs e)
    {
        // Récupère la ligne selectionnée du GridView depuis "sender"
        LinkButton lbtn = sender as LinkButton;
        GridViewRow row = (GridViewRow)lbtn.NamingContainer;
       
        // passe à la propriété iID du userControl le dataKey (ici: id) de la ligne sélectionnée
        this._myUC.iID = Int32.Parse(myGridView.DataKeys[row.RowIndex].Value.ToString());
       
        // ajoute au Panel de la ModalPopup correspondante le userControl
        this.pnl.Controls.Add(_myUC);
       
        // affiche la modalPopup
        this.mpe.Show();
       
    }

Voilà j'espère avoir été clair, merci encore GillouXman pour ton aide

Dire « Merci » 3

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

Codes Sources 198 internautes nous ont dit merci ce mois-ci

Commenter la réponse de obitskater
Messages postés
561
Date d'inscription
mardi 4 mars 2008
Statut
Membre
Dernière intervention
10 juin 2010
0
Merci
fait un get set d une variable dans ton usercontrol

apres tu pourras faire usercontrool.nomdetavariable pour le setter

et puis dans ton usercontrol tu l appel via la variable private
Commenter la réponse de GillouXman
Messages postés
45
Date d'inscription
lundi 29 janvier 2007
Statut
Membre
Dernière intervention
13 mars 2009
0
Merci
Bonjour,

J'avais déjà essayer cette solution qui me paraît biensur plus simple, mais même en affectant un entier, je n'ai pas l'impression qu'il le passe, car j'ai toujours rien dans mon userControl.

Page principale:
protected void gvTab_SelectedIndexChanged(object sender, EventArgs e)
    {
       uc_PopupStatut.iID = 2;
    }

UserControl
 protected void Page_Load(object sender, EventArgs e)
    {
               lblID.Text "id " + _iID;
        initTha();        lblNom.Text "nom " + _tha.sName;
    }
 
public Int32 iID
    {
        get
        {
            return _iID;
        }
        set
        {
            _iID = value;
        }
    }

Peut être que ça vient du fait que je n'entre pas dans la procédure d'evenement SelectedIndexChanged, car meme en debug en  balladant mon curseur sur la GridView il ne semble jamais rentrer dedans
Commenter la réponse de obitskater
Messages postés
561
Date d'inscription
mardi 4 mars 2008
Statut
Membre
Dernière intervention
10 juin 2010
0
Merci
tu as essaye comme ca

Dim ucType As Type = myUC.GetType()

Dim ucProperty As Reflection.PropertyInfo = ucType.GetProperty("ilID")

ucProperty.SetValue(myUC, "Some Value here", Nothing)
Commenter la réponse de GillouXman
Messages postés
45
Date d'inscription
lundi 29 janvier 2007
Statut
Membre
Dernière intervention
13 mars 2009
0
Merci
Merci pour ta réponse, mais je suis un peu perdu... C'est du VB c'est ça? J'en ai jamais fait... je code en C#.
Je pense pouvoir m'en sortir mais est ce que certains types ou objets sont spécifiques à VB?
Par exemple myUC, Type, Reflection, ???

Car j'ai jamais vu de VB de ma vie...
Commenter la réponse de obitskater
Messages postés
561
Date d'inscription
mardi 4 mars 2008
Statut
Membre
Dernière intervention
10 juin 2010
0
Merci
<li>

Type
ucType = myUC.GetType();</li>
<li>    </li>
<li>    Reflection.PropertyInfo ucProperty = ucType.GetProperty("ilID");</li>
<li>    </li>
<li>    ucProperty.SetValue(myUC, "Some Value here", null);</li>
Commenter la réponse de GillouXman
Messages postés
45
Date d'inscription
lundi 29 janvier 2007
Statut
Membre
Dernière intervention
13 mars 2009
0
Merci
Ok merci bien, j'essairais ça demain car là je suis plus au boulot ;) Je te tiens au courant!

Par contre je ne vois pas trop à quoi correspond ta variable myUC.
Et ce bout de code je le met biensur dans ma page principale c'est ça? (ou dans mon uxer control :s)
Commenter la réponse de obitskater
Messages postés
561
Date d'inscription
mardi 4 mars 2008
Statut
Membre
Dernière intervention
10 juin 2010
0
Merci
myUC c'est ton user control

oui dans la page principale
Commenter la réponse de GillouXman
Messages postés
45
Date d'inscription
lundi 29 janvier 2007
Statut
Membre
Dernière intervention
13 mars 2009
0
Merci
Ok merci bien je te tiens au courant demain ;)
Commenter la réponse de obitskater
Messages postés
45
Date d'inscription
lundi 29 janvier 2007
Statut
Membre
Dernière intervention
13 mars 2009
0
Merci
Bon en fait mon probleme maintenant est que je ne sais pas dans quel évènement faire cette affectation, il faut que je la fasse absolument avant que le userControl ne s'affiche, sachant que je n'ai pas de select dans ma GridView...
Commenter la réponse de obitskater