Accéder à un UserControl dans le Header d'un Repeater

[Résolu]
Signaler
Messages postés
30
Date d'inscription
mardi 30 mai 2006
Statut
Membre
Dernière intervention
13 mars 2009
-
Messages postés
6063
Date d'inscription
dimanche 13 avril 2003
Statut
Modérateur
Dernière intervention
15 juillet 2011
-
Tout d'abord, bonjour !

Je travail sur un site web en ASP.NET 2.0 C#.

J'ai un usercontrol qui se trouve dans le header d'un repeater.

J'aimerais savoir, comment je récupère mon usercontrol du header pour y charger des valeurs ?

(Sachant que mon usercontrol est une Datalist toute simple)

Merci par avance.

7 réponses

Messages postés
6063
Date d'inscription
dimanche 13 avril 2003
Statut
Modérateur
Dernière intervention
15 juillet 2011
36
Voici la réponse, elle est bien sûr à factoriser (c'est un exemple de test la suite du début du post) et tu peux faire une boucle si tu n'es pas sur que le header est à la position 0
de plus il faut faire un test de nullité si le Label1 de repeater est null

Label1 est dans le repeater en header
et
Label2 est dans la page comme button1

 protected void Button1_Click(object sender, EventArgs e)
{
       if ((Repeater1.Controls[0] as RepeaterItem).ItemType == ListItemType.Header)
        {
             Label2.Text = ((Repeater1.Controls[0] as RepeaterItem).FindControl("Label1") as Label).Text;
     }
}

Apres à toi d'adapter avec tes composants.
Messages postés
6063
Date d'inscription
dimanche 13 avril 2003
Statut
Modérateur
Dernière intervention
15 juillet 2011
36
Salut

Voici un exemple de recuperation a adapter pour ton cas

Bon courage, j'ai pas fais de vrai databinding pour l'itemtemplate

=============================================

Dans la page aspx

        
    <HeaderTemplate>
        

    </HeaderTemplate>
   
       
   
   
===================================================
Dans apx.cs

protected void Page_Load(object sender, EventArgs e)
    {

        List<String> t = new List<string>();
        t.Add("toto");
        t.Add("titi");
        t.Add("tata");
        Repeater1.DataSource = t;
        Repeater1.DataBind();

   
    }

    protected void Repeater1_ItemDataBound(object sender, RepeaterItemEventArgs e)
    {
        if (e.Item.ItemType == ListItemType.Header)
        {
            Label l = e.Item.FindControl("Label1") as Label;
            l.Text = "modifié";
        }
    }
Messages postés
30
Date d'inscription
mardi 30 mai 2006
Statut
Membre
Dernière intervention
13 mars 2009

Merci pour le coup de main je vais essayer comme çà.

Je posterais le résultat d'ici ce midi.
Messages postés
30
Date d'inscription
mardi 30 mai 2006
Statut
Membre
Dernière intervention
13 mars 2009

Bon j'arrive à accéder à mon usercontrol dans mon header dans l'évènement OnDataBound.

Ne serait-il pas possible d'y accédér dans un évènement "normal" (simple clique d'une ddl) ?
Messages postés
30
Date d'inscription
mardi 30 mai 2006
Statut
Membre
Dernière intervention
13 mars 2009

En debug, quand je regarde les "controls" de mon repeater, au niveau 0 c'est bien mon header donc

j'ai adapté à mon contexte :

id = ((UserControls_actifs_bdvi_header_loge)(rptLoge.Controls[0] as RepeaterItem).FindControl("ucHeader")).IdProg.ToString();

La variable id vaut "" donc en clair j'ai l'impression que je n'arrive pas à récupérer mon User control...

Une idée ?

Merci d'avance
Messages postés
30
Date d'inscription
mardi 30 mai 2006
Statut
Membre
Dernière intervention
13 mars 2009

Problème résolu merci beaucoup. La solution à mon problème  :

MonUserControl header
header = (MonUserControl )(MonRepeater.Controls[0] as RepeaterItem).FindControl("ucHeader");

Voilà après on peut manipuler à souhait la variable header qui correspond à votre UserControl.

Ps : dans mon exemple, le userControl est "personnalisé" : ce n'est pas un textbox, label etc...
Messages postés
6063
Date d'inscription
dimanche 13 avril 2003
Statut
Modérateur
Dernière intervention
15 juillet 2011
36
Si tu veux
id = ((UserControls_actifs_bdvi_header_loge)(rptLoge.Controls[0] as RepeaterItem).FindControl("ucHeader") as MonUserControl ).IdProg.ToString();

Il manquait le cast ;-)

Les user controls c'est un peu comme un control c'est pour accéler mes dev qu j'ai mis un label

That's all, l'essentiel c'est de comprendre le principe ;-)