Cacher des parties de mon repeater .

Skunkz Messages postés 4 Date d'inscription vendredi 24 septembre 2010 Statut Membre Dernière intervention 11 octobre 2010 - 24 sept. 2010 à 08:58
jesusonline Messages postés 6814 Date d'inscription dimanche 15 décembre 2002 Statut Membre Dernière intervention 13 octobre 2010 - 26 sept. 2010 à 13:48
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

Netlink Messages postés 139 Date d'inscription mercredi 2 avril 2003 Statut Membre Dernière intervention 12 juillet 2011
24 sept. 2010 à 10:28
Bonjour,

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

Matt - Consultant .NET
0
Skunkz Messages postés 4 Date d'inscription vendredi 24 septembre 2010 Statut Membre Dernière intervention 11 octobre 2010
24 sept. 2010 à 10:43
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é.
0
Netlink Messages postés 139 Date d'inscription mercredi 2 avril 2003 Statut Membre Dernière intervention 12 juillet 2011
24 sept. 2010 à 12:33
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
0
cs_fonio Messages postés 56 Date d'inscription lundi 26 novembre 2007 Statut Membre Dernière intervention 15 février 2013 1
24 sept. 2010 à 22:12
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é !
0

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

Posez votre question
jesusonline Messages postés 6814 Date d'inscription dimanche 15 décembre 2002 Statut Membre Dernière intervention 13 octobre 2010 29
26 sept. 2010 à 13:48
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
0
Rejoignez-nous