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 :

[FW 1.1] FindControl sur DataGrid


Sujet :

ASP.NET

  1. #1
    En attente de confirmation mail
    Inscrit en
    Août 2007
    Messages
    174
    Détails du profil
    Informations forums :
    Inscription : Août 2007
    Messages : 174
    Points : 133
    Points
    133
    Par défaut [FW 1.1] FindControl sur DataGrid


    j'ai besoin d'un popup de confirmation sur une action delete sur mon datagrid.

    j'ai suivi la FAQ pour creer le code.

    Seulement, lorsque j'ajoute l'attribut au bouton, ca plante car il ne trouve pas le boutons

    Voila le front 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
    <input id="ConfirmDelete" type="hidden" runat="server">
    .
    .
    .
    .
    <Columns>
    	<asp:BoundColumn Visible="False" DataField="ID" ReadOnly="True"></asp:BoundColumn>
    	<asp:TemplateColumn>
    		<ItemTemplate>
    			<asp:ImageButton runat="server" ImageUrl="..\..\..\images\manage.png" CommandName="Manage" CausesValidation="false"
    				AlternateText="Details" id="manageButton"></asp:ImageButton>
    		</ItemTemplate>
    	</asp:TemplateColumn>
    	<asp:TemplateColumn>
    		<ItemTemplate>
    			<asp:ImageButton runat="server" ImageUrl="..\..\..\images\delete.gif" CommandName="Delete" CausesValidation="false"
    				AlternateText="Delete" ID="deleteButton"></asp:ImageButton>
    		</ItemTemplate>
                             </asp:TemplateColumn>
    le javascript

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    <script language="javascript">
    function confirmSubmit()
    {  
       var msg = "Are you sure to delete this activity ?"; 
       if (confirm(msg)) 
       { 
          document.formulaire.ConfirmDelete.value="oui"; 
       } 
    } 
    </script>
    et le 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
     
    		private void Page_Load(object sender, System.EventArgs e)
    		{
    			if (!IsPostBack)
    				LoadData();
    			if ((ImageButton)this.XamuCustomDataGrid1.FindControl("deleteButton") != null)
    				((ImageButton)this.XamuCustomDataGrid1.FindControl("deleteButton")).Attributes.Add("onClick","return confirmSubmit();");
    		}
     
    		private void XamuCustomDataGrid1_DeleteCommand(object source, DataGridCommandEventArgs e)
    		{
    			if (((HtmlInputHidden)this.FindControl("ConfirmDelete")).Value == "oui")
    			{
    				CvrActivity cvrAct = new CvrActivity();
    				cvrAct = instance.GetActivityById(long.Parse(e.Item.Cells[0].Text));
    				instance.DeleteActivityWithChild(cvrAct);
    				LoadData();
    			}
    		}
    J ai essaye en mettant le onClick directement dans <asp:ImageButton> mais j ai une erreur de compilation.
    Et dans ce cas, rien ne se passe (ImageButton)this.XamuCustomDataGrid1.FindControl("deleteButton") reste tjrs null ?!?

    ou est mon erreur ?

  2. #2
    Membre expert
    Avatar de Pongten
    Homme Profil pro
    IT Analyst & Software Developer
    Inscrit en
    Juin 2002
    Messages
    1 173
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 43
    Localisation : Belgique

    Informations professionnelles :
    Activité : IT Analyst & Software Developer
    Secteur : Communication - Médias

    Informations forums :
    Inscription : Juin 2002
    Messages : 1 173
    Points : 3 543
    Points
    3 543
    Par défaut
    En fait, la méthode "FindControl" ne fonctionne pas de façon récursive. A savoir, elle ne trouvera le contrôle que si c'est un enfant direct du contrôle sur lequel on applique la méthode.

    S'il s'agit d'un "petit-enfant", il ne sera pas trouvé. Tu peux solutionner ce problème en te créant ta propre méthode FindControl qui agisse récursivement, ou alors mettre le javascript directement dans le bouton.

    Dans le second cas (le plus simple pour moi), il faut ajouter le javascript à l'attribut OnClientClick du ImageButton, et pas OnClick, car il s'agit d'un contrôle Asp et donc, l'attribut OnClick attend une méthode côté serveur !
    Si ton problème a une solution, rien ne sert de t'inquiéter..
    Si il n'en a pas, t'inquiéter ne sert à rien


  3. #3
    Rédacteur
    Avatar de lutecefalco
    Profil pro
    zadzdzddzdzd
    Inscrit en
    Juillet 2005
    Messages
    5 052
    Détails du profil
    Informations personnelles :
    Âge : 44
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : zadzdzddzdzd

    Informations forums :
    Inscription : Juillet 2005
    Messages : 5 052
    Points : 8 734
    Points
    8 734
    Par défaut
    Faut mettre ton code dans l'évévement OnRowDataBound afin de le faire pour chaque ligne

  4. #4
    En attente de confirmation mail
    Inscrit en
    Août 2007
    Messages
    174
    Détails du profil
    Informations forums :
    Inscription : Août 2007
    Messages : 174
    Points : 133
    Points
    133
    Par défaut
    Ca ne marches pas ?!?

    J ai bien mis le OnClientClick (meme s il est pas reconnu par VS2003 ?) dans le bouton

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    <asp:TemplateColumn>
    	<ItemTemplate>
    		<asp:ImageButton runat="server" ImageUrl="..\..\..\images\delete.gif" OnClientClick="return confirmSubmit();" CommandName="Delete" CausesValidation="false"
    			AlternateText="Delete" ID="deleteButton"></asp:ImageButton>
    	</ItemTemplate>
    </asp:TemplateColumn>
    mais toujours pas de popup

    EDIT : je viens de voir que le OnClientClick est pour le framework 2.0, donc c est normal que ca ne marche pas sur ma solution.
    Comment faire en 1.1 ?

  5. #5
    Rédacteur
    Avatar de lutecefalco
    Profil pro
    zadzdzddzdzd
    Inscrit en
    Juillet 2005
    Messages
    5 052
    Détails du profil
    Informations personnelles :
    Âge : 44
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : zadzdzddzdzd

    Informations forums :
    Inscription : Juillet 2005
    Messages : 5 052
    Points : 8 734
    Points
    8 734
    Par défaut
    Comme je l'ai dit

  6. #6
    En attente de confirmation mail
    Inscrit en
    Août 2007
    Messages
    174
    Détails du profil
    Informations forums :
    Inscription : Août 2007
    Messages : 174
    Points : 133
    Points
    133
    Par défaut
    Citation Envoyé par lutecefalco Voir le message
    Comme je l'ai dit
    effectivement ca marches en ajoutant le onclick dans ItemDataBound

    Par contre je suis oblige de recuperer un numero de cellule

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    		private void XamuCustomDataGrid1_ItemDataBound(object sender, DataGridItemEventArgs e)
    		{
    			if (e.Item.ItemType == ListItemType.Item || e.Item.ItemType == ListItemType.AlternatingItem)
    			{
    				((ImageButton)e.Item.Cells[2].FindControl("deleteButton")).Attributes.Add("OnClick","return confirmSubmit();");
    			}
    		}
    Y a t il une astuce pour eviter cela, car on est plusieurs a travailler sur le meme code et si un autre ajoutes une colonne il faudra qu il pense a modifié la méthode

  7. #7
    Rédacteur
    Avatar de lutecefalco
    Profil pro
    zadzdzddzdzd
    Inscrit en
    Juillet 2005
    Messages
    5 052
    Détails du profil
    Informations personnelles :
    Âge : 44
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : zadzdzddzdzd

    Informations forums :
    Inscription : Juillet 2005
    Messages : 5 052
    Points : 8 734
    Points
    8 734
    Par défaut
    Moi j'utilise e.Item.FindControl("") et ça marche très bien

  8. #8
    En attente de confirmation mail
    Inscrit en
    Août 2007
    Messages
    174
    Détails du profil
    Informations forums :
    Inscription : Août 2007
    Messages : 174
    Points : 133
    Points
    133
    Par défaut
    Effectivement, pourquoi faire simple quand on peut faire compliqué

    Merci de ton aide

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

Discussions similaires

  1. [VB.NET] Problème de tri sur Datagrid/gridview multilingue
    Par crimsonPhantom dans le forum ASP.NET
    Réponses: 4
    Dernier message: 16/03/2006, 22h41
  2. [c#] tri sur datagrid
    Par lapartdombre dans le forum Windows Forms
    Réponses: 1
    Dernier message: 03/01/2006, 17h32
  3. Ou trouver de la doc sur DataGrid
    Par Terminator dans le forum VB 6 et antérieur
    Réponses: 6
    Dernier message: 12/10/2005, 19h32
  4. [C#] Evenement Click sur Datagrid
    Par Joad dans le forum ASP.NET
    Réponses: 2
    Dernier message: 30/05/2005, 13h37
  5. [VB.NET] Erreur OnMouseUp sur Datagrid
    Par daner06 dans le forum Windows Forms
    Réponses: 2
    Dernier message: 19/01/2005, 10h26

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