IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

ASP.NET Discussion :

Problème avec LinkButton / CommandArgument


Sujet :

ASP.NET

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre confirmé
    Profil pro
    Développeur Web
    Inscrit en
    Septembre 2007
    Messages
    173
    Détails du profil
    Informations personnelles :
    Localisation : France, Aube (Champagne Ardenne)

    Informations professionnelles :
    Activité : Développeur Web

    Informations forums :
    Inscription : Septembre 2007
    Messages : 173
    Par défaut Problème avec LinkButton / CommandArgument
    Bonjour,

    Dans mon code behind, j'ai une méthode que j'appel dans le Page_Load.
    Dans cette méthode jai un morceau de code qui doit me générer des LinkButton en fonction d'un nombre de page.
    Au clic (onclick), je souhaite appeler une autre méthode dans laquelle je veux récupérer l'argument (CommandArgument).

    Voici le morceau de code:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
            for (i = 1; i <= this._nbPage; i++)
            {
                LinkButton LB = new LinkButton();
                LB.ID = "HL" + i;
     
                LB.Text = i.ToString();
                LB.Style.Add("padding-right", "3px");
                //LB.Command += new CommandEventHandler(ChangeIndex_Click);
     
                LB.OnClientClick = "ChangeIndex_Click";
                LB.CommandName = "go";
                LB.CommandArgument = (i - 1).ToString();
     
                this.paginator.Controls.Add(LB);
     
            }
    Voici l'autre méthode que je veux appeler:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
        protected void ChangeIndex_Click(object sender, EventArgs e)
        {
            LinkButton senderLink = sender as LinkButton;
            int Index = int.Parse(senderLink.CommandArgument);
            this._pageIndex = Index;
     
        }
    Les LinkButton sont bien générés, mais la méthode ChangeIndex_Click n'est jamais appelée et j'ai l'impression que les arguments ne sont pas affectés.
    Je précise que je n'est aucun message d'erreur.

    Pouvez-vous m'aider SVP.

    Merci par avance.

  2. #2
    Membre Expert
    Avatar de laedit
    Homme Profil pro
    Consultant études et développement
    Inscrit en
    Décembre 2006
    Messages
    1 344
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 37
    Localisation : France, Bas Rhin (Alsace)

    Informations professionnelles :
    Activité : Consultant études et développement
    Secteur : High Tech - Multimédia et Internet

    Informations forums :
    Inscription : Décembre 2006
    Messages : 1 344
    Par défaut
    Utilise la propriété OnClick plutôt que OnClientClick.

    OnClientClick contient le nom de la méthode javascript qui sera exécutée tandis que OnClick contient le nom de la méthode du code-behind qui sera exécutée.
    Blog - Articles - Framework

    MSDN vous aide, si si, alors n'hésitez pas à y faire un tour avant de poser une question.
    Ah, et n'oubliez pas, Google peut répondre à la majorité de vos questions.

  3. #3
    Membre confirmé
    Profil pro
    Développeur Web
    Inscrit en
    Septembre 2007
    Messages
    173
    Détails du profil
    Informations personnelles :
    Localisation : France, Aube (Champagne Ardenne)

    Informations professionnelles :
    Activité : Développeur Web

    Informations forums :
    Inscription : Septembre 2007
    Messages : 173
    Par défaut
    J'ai essayé de mettre OnClick à la place, mais il semble que via mon code behind je n'est pas accès à cette méthode.

    J'obtient d'ailleurs cette erreur :
    CS0122: 'System.Web.UI.WebControls.LinkButton.OnClick(System.EventArgs)' est inaccessible en raison de son niveau de protection

  4. #4
    Membre Expert
    Avatar de laedit
    Homme Profil pro
    Consultant études et développement
    Inscrit en
    Décembre 2006
    Messages
    1 344
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 37
    Localisation : France, Bas Rhin (Alsace)

    Informations professionnelles :
    Activité : Consultant études et développement
    Secteur : High Tech - Multimédia et Internet

    Informations forums :
    Inscription : Décembre 2006
    Messages : 1 344
    Par défaut
    Effectivement, tu n'y as accès qu'à partir du côté client (page asp). Mais tu devrais y arriver en passant par l'événement Click du LinkButton.
    Blog - Articles - Framework

    MSDN vous aide, si si, alors n'hésitez pas à y faire un tour avant de poser une question.
    Ah, et n'oubliez pas, Google peut répondre à la majorité de vos questions.

  5. #5
    Membre confirmé
    Profil pro
    Développeur Web
    Inscrit en
    Septembre 2007
    Messages
    173
    Détails du profil
    Informations personnelles :
    Localisation : France, Aube (Champagne Ardenne)

    Informations professionnelles :
    Activité : Développeur Web

    Informations forums :
    Inscription : Septembre 2007
    Messages : 173
    Par défaut
    En effet, j'ai bien accès à l'événement.
    Je fais comme suit:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    LB.Click += new EventHandler(this.ChangeIndex_Click);
    Je passe bien par ma méthode et je récupère bien mon argument.
    Mais j'ai un autre problème dont je vous parlerai un peu plus tard par manque de temps.

    A+

  6. #6
    Membre confirmé
    Profil pro
    Développeur Web
    Inscrit en
    Septembre 2007
    Messages
    173
    Détails du profil
    Informations personnelles :
    Localisation : France, Aube (Champagne Ardenne)

    Informations professionnelles :
    Activité : Développeur Web

    Informations forums :
    Inscription : Septembre 2007
    Messages : 173
    Par défaut
    Bonjour,

    Comme vous l'aurez deviné, ce code à pour but de faire de la pagination.
    Plus précisément sur un contrôle asp:repeater.

    Grâce à vous, je parviens maintenant à passer mon index de page et à le récupérer.

    Mais je n'arrive pas à l'affecter à mon CurrentPageIndex de mon PagedDataSource, je ne comprend pourquoi.

    Voici le fameux code:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
        protected void doPagination()
        {
            //DataSet myItems = new DataSet();
            DataView myItems = (DataView)SqlDataSource1.Select(DataSourceSelectArguments.Empty);
     
            // Populate the repeater control with the Items DataSet
            PagedDataSource objPds = new PagedDataSource();
            objPds.DataSource = myItems;
     
            // Indicate that the data should be paged
            objPds.AllowPaging = true;
     
            // Set the number of items you wish to display per page
            objPds.PageSize = 7;
     
            this._nbPage = objPds.PageCount;
            objPds.CurrentPageIndex = this._pageIndex;
     
            Repeater1.DataSource = objPds;
            Repeater1.DataBind();
     
            int i;
     
            for (i = 1; i <= this._nbPage; i++)
            {
                LinkButton LB = new LinkButton();
                LB.ID = "HL" + i;
     
                LB.Text = i.ToString();
                LB.Style.Add("padding-right", "3px");
                LB.Click += new EventHandler(this.ChangeIndex_Click);
     
                LB.CommandName = "go";
                LB.CommandArgument = (i - 1).ToString();
     
                this.paginator.Controls.Add(LB);
     
            }
        }
    ma méthode qui récupère l'index :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
        protected void ChangeIndex_Click(object sender, EventArgs e)
        {
            LinkButton senderLink = sender as LinkButton;
            int Index = int.Parse(senderLink.CommandArgument);
            this._pageIndex = Index;
     
        }
    Et ma propriété pageIndex:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
        private int pageIndex;
     
        public int _pageIndex
        {
            get { return this.pageIndex; }
            set { this.pageIndex = value; }
        }
    Quand je rentre manuellement l'index, celui-ci est bien pris en compte.
    Ex:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    objPds.CurrentPageIndex = 1;
    La 2ème page est bien affichée.

    Je précise que la méthode doPagination() est appelée dans le Page_Load.

    Merci par avance pour votre aide.

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. Problème envoi mail avec linkbutton
    Par JCMANSION dans le forum VB.NET
    Réponses: 2
    Dernier message: 29/09/2010, 17h34
  2. VC++ Direct3D8, problème avec LPD3DXFONT et LPD3DTEXTURE8
    Par Magus (Dave) dans le forum DirectX
    Réponses: 3
    Dernier message: 03/08/2002, 11h10
  3. Problème avec le type 'Corba::Any_out'
    Par Steven dans le forum CORBA
    Réponses: 2
    Dernier message: 14/07/2002, 18h48
  4. Problème avec la mémoire virtuelle
    Par Anonymous dans le forum CORBA
    Réponses: 13
    Dernier message: 16/04/2002, 16h10

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo