Passer une donnée d'une ligne de GridView à un UserControl

Résolu
obitskater Messages postés 45 Date d'inscription lundi 29 janvier 2007 Statut Membre Dernière intervention 13 mars 2009 - 20 mai 2008 à 16:33
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!

10 réponses

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
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
3
GillouXman Messages postés 561 Date d'inscription mardi 4 mars 2008 Statut Membre Dernière intervention 10 juin 2010
20 mai 2008 à 16:41
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
0
obitskater Messages postés 45 Date d'inscription lundi 29 janvier 2007 Statut Membre Dernière intervention 13 mars 2009
20 mai 2008 à 17:04
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
0
GillouXman Messages postés 561 Date d'inscription mardi 4 mars 2008 Statut Membre Dernière intervention 10 juin 2010
20 mai 2008 à 17:20
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)
0

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

Posez votre question
obitskater Messages postés 45 Date d'inscription lundi 29 janvier 2007 Statut Membre Dernière intervention 13 mars 2009
20 mai 2008 à 19:38
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...
0
GillouXman Messages postés 561 Date d'inscription mardi 4 mars 2008 Statut Membre Dernière intervention 10 juin 2010
20 mai 2008 à 19:55
<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>
0
obitskater Messages postés 45 Date d'inscription lundi 29 janvier 2007 Statut Membre Dernière intervention 13 mars 2009
20 mai 2008 à 20:09
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)
0
GillouXman Messages postés 561 Date d'inscription mardi 4 mars 2008 Statut Membre Dernière intervention 10 juin 2010
20 mai 2008 à 20:31
myUC c'est ton user control

oui dans la page principale
0
obitskater Messages postés 45 Date d'inscription lundi 29 janvier 2007 Statut Membre Dernière intervention 13 mars 2009
20 mai 2008 à 20:51
Ok merci bien je te tiens au courant demain ;)
0
obitskater Messages postés 45 Date d'inscription lundi 29 janvier 2007 Statut Membre Dernière intervention 13 mars 2009
21 mai 2008 à 16:09
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...
0
Rejoignez-nous