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 :

[ASP .Net 2.0] Ajout d'un attribut lors du rendering d'un contrôle serveur


Sujet :

ASP.NET

  1. #1
    Membre habitué
    Profil pro
    Inscrit en
    Novembre 2004
    Messages
    135
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Novembre 2004
    Messages : 135
    Points : 139
    Points
    139
    Par défaut [ASP .Net 2.0] Ajout d'un attribut lors du rendering d'un contrôle serveur
    Bonjour,

    Je souhaite ajouter un onclick coté client sur une ligne d'un GridView. Malheureusement, comme j'ai activé le bouton select du GridView (en le rendant invisible), lors du rendering, un onclick est généré pour faire un postback.

    Au final, un seul des deux onclick est pris en compte (je n'ai plus le postback). Existe-t-il un moyen d'ajouter du javascript à la suite ou avant celui qui est généré lors du rendering ?

    Pour plus de précision, voici mon code

    ASPX
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
     
    <asp:GridView runat="server" ID="gvListeComptes" AutoGenerateColumns="false" OnRowDataBound="gvListeComptes_RowDataBound" OnPreRender="gvListeComptes_PreRender" OnSelectedIndexChanged="gvListeComptes_SelectedIndexChanged">
       <Columns>
          <asp:CommandField ShowSelectButton="true" Visible="false" />
          <asp:TemplateField HeaderText="N&deg; compte">
             <ItemTemplate>
                <asp:Label runat="server" ID="_lblNumCompte"></asp:Label>
             </ItemTemplate>
          </asp:TemplateField>
       </Columns>
    </asp:GridView>
    Code behind
    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 gvListeComptes_RowDataBound(object sender, GridViewRowEventArgs e)
        {
            // Teste si la ligne est une ligne de donnée et si elle n'est pas vide
            if (e.Row.RowType == DataControlRowType.DataRow && e.Row.DataItem != null)
            {
               // Obtient le contrôle LinkButton de la première cellule           
               LinkButton singleClickButton = (LinkButton)e.Row.Cells[0].Controls[0];
     
               if (singleClickButton != null)
               {
                  // Obtient le javascript qui est assigné à ce LinkButton
                  string jsSingle = Page.ClientScript.GetPostBackClientHyperlink(singleClickButton, "");
                  // Ajoute ce javascript à l'attribut onclick de la ligne
                  e.Row.Attributes["onclick"] = jsSingle;
               }            
     
                // Obtient les contrôles de chaque ligne
                Label lblNumCompte = (Label)e.Row.FindControl("_lblNumCompte");
     
                MesDonnees item = (MesDonnees)e.Row.DataItem;
     
                // Remplit la ligne avec les données
                lblNumCompte.Text = item.numCompte;
            }
        }
     
        // Modification du rendu du GridView avant son envoie au client
        protected void gvListeComptes_PreRender(object sender, EventArgs e)
        {
            if (gvListeComptes.Rows.Count != 0)
            {
                foreach (GridViewRow myRow in gvListeComptes.Rows)
         	    {
        	        string rowIndex = myRow.ClientID;
     	        myRow.Attributes.Add("onClick", "ActiveRowTable('" + rowIndex + "');");
     	    }
            }
        }
    Merci d'avance pour votre aide.

    Xavier

  2. #2
    Membre expert

    Profil pro
    Inscrit en
    Septembre 2002
    Messages
    1 581
    Détails du profil
    Informations personnelles :
    Âge : 48
    Localisation : Belgique

    Informations forums :
    Inscription : Septembre 2002
    Messages : 1 581
    Points : 3 016
    Points
    3 016
    Par défaut
    Pourquoi ne pas rajouter une template column avec un bouton dedans et un onclientclick?

  3. #3
    Membre habitué
    Profil pro
    Inscrit en
    Novembre 2004
    Messages
    135
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Novembre 2004
    Messages : 135
    Points : 139
    Points
    139
    Par défaut
    Parce que je ne veux pas voir de colonne, je veux juste un comportement lors du clic sur la ligne. Il faut que ce soit transparent pour l'utilisateur.

  4. #4
    Membre expert

    Profil pro
    Inscrit en
    Septembre 2002
    Messages
    1 581
    Détails du profil
    Informations personnelles :
    Âge : 48
    Localisation : Belgique

    Informations forums :
    Inscription : Septembre 2002
    Messages : 1 581
    Points : 3 016
    Points
    3 016
    Par défaut
    Bon ben alors, tu peux toujours faire ceci:

    Petit exemple:

    Dans la partie head de ton source aspx, tu peux ajouter ceci ou bien le mettre dans un fichier .js à part que tu inclus ou encore faire registerclientscript en code behind. Bref, fais comme tu le sens

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    <script language="javascript">
        function DisplayRowNumber(RowNumber)
        {
            alert(RowNumber);
        }
        </script>
    Toujours dans ta page aspx, dans la déclaration de ton gridview, tu ajoutes ceci:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    OnRowCreated="AddClientHandler"
    Dans ton code behind, tu crées ta fonction addclienthandler

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    protected void AddClientHandler(object sender, GridViewRowEventArgs e)
        {
            e.Row.Attributes.Add("onclick", "DisplayRowNumber(" + e.Row.RowIndex + ")");
        }
    Et ceci fonctionnera

Discussions similaires

  1. [ASP.NET][C#2] Ajout d'un dropdownlist dans un gridview
    Par Mouns007 dans le forum ASP.NET
    Réponses: 20
    Dernier message: 11/05/2009, 12h32
  2. [ASP.NET C# - XML] - Ajout
    Par Medmidou dans le forum ASP.NET
    Réponses: 1
    Dernier message: 30/04/2009, 15h27
  3. Réponses: 4
    Dernier message: 08/04/2008, 09h57
  4. Réponses: 6
    Dernier message: 06/03/2008, 13h09
  5. [Asp .Net 1.1] Ajouter une ligne à un datagrid
    Par Jsh dans le forum ASP.NET
    Réponses: 3
    Dernier message: 04/03/2008, 15h48

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