Cacher des parties de mon repeater .

Signaler
Messages postés
4
Date d'inscription
vendredi 24 septembre 2010
Statut
Membre
Dernière intervention
11 octobre 2010
-
Messages postés
6814
Date d'inscription
dimanche 15 décembre 2002
Statut
Modérateur
Dernière intervention
13 octobre 2010
-
Bonjour.
Je vous explique mon probléme :
j'ai du coder une page qui affiche une liste d'applications , contenant des groupes , qui eux memes contiennent des fichiers.
J'ai donc choisir d'utiliser un repeater , que j'alimente via une requete sql pour afficher mes données. Voici le repeater :
  
            
                '>
 '> 
 '>

,

----

 '>

  '>
 '>
,

----

 '
Text='<%#DataBinder.Eval(Container.DataItem, "FIC_LIBELLE")%> '>
 '>
 '>

            
        

Ce que j'aimerais obtenir , c'est la possiblité , en cliquant sur le bouton "link_app" de pouvoir cacher les groupes et les fichiers contenue dans cette application.
Et j'ai l'impression qu'il est impossible de gérer un Onclick dans un repeater , donc je suis bloquer =/
J'aurais donc voulu savoir si vous aviez quelques pistes pour m'aider a régler ça.

Merci d'avance !

5 réponses

Messages postés
139
Date d'inscription
mercredi 2 avril 2003
Statut
Membre
Dernière intervention
12 juillet 2011

Bonjour,

Avez-vous regardé du côté de l'évènement ItemCommand du Repeater ?

Matt - Consultant .NET
Messages postés
4
Date d'inscription
vendredi 24 septembre 2010
Statut
Membre
Dernière intervention
11 octobre 2010

J'ai effectivement essayé quelque chose de ce coté la, mais je n'ai pas réussi a récuperer l'index des boutons sur lequels j'ai cliqué.
Messages postés
139
Date d'inscription
mercredi 2 avril 2003
Statut
Membre
Dernière intervention
12 juillet 2011

En reproduisant un exemple utilisant votre code, je n'ai effectivement pas réussi à déclencher l'évènement ItemCommand lors du click sur un ImageButton. Bizarre. Après une recherche sur Google il semble que ce ne soit pas possible.

En revanche, grâce à l'attribut OnClick du contrôle ImageButton, l'évènement lié au bouton se déclenche correctement.

Donc je pense que vous devriez regarder plutôt de ce côté-là. Vous pourrez dans tous les cas récupérer le contrôle à l'origine du click grâce au paramètre sender de la méthode qui va gérer votre évènement.


Matt - Consultant .NET
Messages postés
56
Date d'inscription
lundi 26 novembre 2007
Statut
Membre
Dernière intervention
15 février 2013

Bonjour, ce cas m'a interessé, alors voilà :




Protected Sub liste_app_ItemCreated(ByVal sender As Object, ByVal e As System.Web.UI.WebControls.RepeaterItemEventArgs) Handles liste_app.ItemCreated
  If e.Item.ItemType ListItemType.Item Or e.Item.ItemType ListItemType.AlternatingItem Then
    e.Item.ID = "Ligne_" & e.Item.ItemIndex
  End If
End Sub


Protected Sub link_grp_Click(ByVal sender As Object, ByVal e As ImageClickEventArgs)
'MsgBox(sender.uniqueID)
Dim lig As RepeaterItem = Page.FindControl(sender.uniqueID.replace("$link_grp", ""))
lig.Visible = False
End Sub



Explication :
- j'utilise l'évenement "ItemCreated" du repeater pour donner une ID à chaque ligne, incrémentée via "e.Item.ItemIndex" (de 0 à nb de lignes - 1)
- j'utilise effectivement le paramètre "sender" de la méthode "link_grp_Click" pour récupérer l'uniqueID de l'ImageButton, à partir duquel je déduis celle de la ligne en effectuant un Replace
- j'instancie cette ligne gràce à "Page.FindControl(UniqueID de la ligne)", puis ".Visible = False" et le tour est joué !
Messages postés
6814
Date d'inscription
dimanche 15 décembre 2002
Statut
Modérateur
Dernière intervention
13 octobre 2010
25
Bonjour,

l'évenement ItemCommand fonctionne avec un ImageButton. Par contre, je pense qu'il faut renseigner la propriété CommandName.

Voici un exemple de code qui fonctionne :


ASPX :

        
            <HeaderTemplate></HeaderTemplate>
            <FooterTemplate></FooterTemplate>
            
                <li>
                    <%#((Person)Container.DataItem).ToString() %>
                    " ImageUrl="~/images/foo.png" />
                </li>
            
        
        


Code Behind :

using System;
using System.Collections.Generic;
using System.Linq;
using System.Web;
using System.Web.UI;
using System.Web.UI.WebControls;

public class Person
{
    public int PersonId { get; set; }
    public String FirstName { get; set; }
    public String LastName { get; set; }

    public override string ToString()
    {
        return String.Format("{0} {1}", this.FirstName, this.LastName);
    }
}

public partial class _Default : System.Web.UI.Page
{

    protected void Page_Load(object sender, EventArgs e)
    {
        if (!Page.IsPostBack)
        {
            this.BindData();
        }
    }

    protected void rptPouet_ItemCommand(object source, RepeaterCommandEventArgs e)
    {
        this.lblTest.Text String.Format("CommandName {0} ; CommandArgument = {1}", e.CommandName, e.CommandArgument);
    }

    private void BindData()
    {

        Person[] persons = new Person[]{ 
            new Person(){ FirstName ="firstName1", LastName="lastName1", PersonId= 1}, 
            new Person(){ FirstName ="firstName2", LastName="lastName2", PersonId= 2}
        };

        this.rptPouet.DataSource = persons;
        this.rptPouet.DataBind();
    }
}


Pour cacher une partie du repeater, il y a plusieurs solutions. Au niveau de l'itemCommand, on peut faire un e.Item.FindControl("xxx").Visible=false. Ou alors rebinder le repeater et s'abonner à l'evenement ItemDataBound.

____________________________________________
Cyril - MVP ASP.net - webSite