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 :

Bouton Dynamique Erreur


Sujet :

ASP.NET

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre averti
    Profil pro
    Inscrit en
    Février 2005
    Messages
    48
    Détails du profil
    Informations personnelles :
    Localisation : Suisse

    Informations forums :
    Inscription : Février 2005
    Messages : 48
    Par défaut Bouton Dynamique Erreur
    Bonjour,

    Je fait un projet .NET ASP C#, et j'essaie d'afficher un tableau contenant des enregistrements venant d'une BD. Sur chaque ligne de ce tableau j'ai un bouton (ou une image c'est égal) permettant de supprimer dans la BD l'enregistrement sélectionné.

    J'ai donc créé un tableau simple en ASP (je veux pas de GridView), sur lequel je parcours ma méthode de retour de données, jusque la aucun problème.

    Mon problème est "comment récupérer l'ID de l'utilisateur à supprimer pour le passer à une méthode C#". J'ai donc créé un bouton dynamiquement, lui ai passé en paramètre l'iD pour pouvoir le récupérer en C#, mais j'ai une jolie erreur lors de l'affichage du site. Voici mon code ASP :

    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
     
    <%@ Page Language="C#" MasterPageFile="~/MasterPage.master" AutoEventWireup="true" CodeFile="remTechnicien.aspx.cs" Inherits="remTechnicien" Title="Page sans titre" %>
     
    <asp:Content ID="Content1" ContentPlaceHolderID="head" Runat="Server">
    </asp:Content>
    <asp:Content ID="Content2" ContentPlaceHolderID="ContentPlaceHolder1" Runat="Server">
        <form id="form1" runat="server">
        <br /><h2>Supprimer un technicien</h2><br />
     
        <table id="Liste" class="normal">
            <thead><tr><td></td><td><b>Nom d'utilisateur</b></td><td><b>Nom</b></td><td><b>Prénom</b></td></tr></thead>
        <% int i = 0; foreach (Technicien technicien in showList()) {%>
            <tr>
                <td>
                <%
                    Button Bt = new Button();
                    Bt.Text = "oui";
                    Bt.ID = Convert.ToString(i);
                    Bt.CommandName = Convert.ToString(i);
                    Bt.Click += new EventHandler(Button1_Click);
                    this.Controls.Add(Bt);
                    i++; 
                %>
                
                
                </td>
                <td><%= technicien.userName%></td>
                <td><%= technicien.name%></td>
                <td><%= technicien.prename%></td>
            </tr>
        <%  } %>
        </table>
        </form>
        </asp:Content>
    Et mon erreur :

    [InvalidOperationException: La collection a été modifiée ; l'opération d'énumération peut ne pas s'exécuter.]
    System.Web.UI.ControlCollectionEnumerator.MoveNext() +8648494
    System.Web.UI.Control.RenderChildrenInternal(HtmlTextWriter writer, ICollection children) +143........

    J'ai également essayé de créer un bouton directement en ASP, mais je n'arrive pas passer de code à l'option "CommandName", il m'affiche le code et non son interprétation :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    <asp:Button ID="Button1" runat="server" CommandArgument="test" CommandName="<%= technicien.userName %>" Text="Button" />
    J'ai essayé beaucoup de choses, je n'arrive à rien, mon but est vraiment de récupérer l'iD pour le passer à C#. Je suis preneur de toute solution, je ne sais plus trop comment faire.

    Merci pour votre aide

  2. #2
    Membre chevronné
    Inscrit en
    Octobre 2005
    Messages
    400
    Détails du profil
    Informations forums :
    Inscription : Octobre 2005
    Messages : 400
    Par défaut
    Peut-on voir la fonction showList() ?

  3. #3
    Membre averti
    Profil pro
    Inscrit en
    Février 2005
    Messages
    48
    Détails du profil
    Informations personnelles :
    Localisation : Suisse

    Informations forums :
    Inscription : Février 2005
    Messages : 48
    Par défaut
    Oui biensur, voici le code entier C# :

    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
     
    public partial class remTechnicien : System.Web.UI.Page
    {
        protected void Page_Load(object sender, EventArgs e) {
     
        }
     
        public List<Technicien> showList() {
            DataProvider dataProvider = DataProvider.getInstance();
            List<Technicien> techniciens = dataProvider.getTechniciens();
            return techniciens;
        }
     
        public void remTechniciens(int idTechnicien) {
          //Je lancerai ici le SQL pour supprimer le technicien d'après l'id en paramètre
     
        }
     
        protected void Button1_Click(object sender, EventArgs e) {
            Button btn = (Button)sender;
            string id = btn.CommandName;
            System.Windows.Forms.MessageBox.Show(id);
        }
    }
    la méthode Button1_Click() est appelée lors du clic sur le bouton présent à chaque ligne (créé dynamiquement), et la récupération de l'argument "CommandeName" est fonctionnel, cette méthode est donc ok, c'est vraiment au niveau ASP que ça croche...

    Merci pour votre aide, car la je bloque complet. Et je le redis, si vous avez une solution plus élégante je suis preneur (sauf GridView car on devrait bcp modifier notre applic)

  4. #4
    Membre chevronné
    Inscrit en
    Octobre 2005
    Messages
    400
    Détails du profil
    Informations forums :
    Inscription : Octobre 2005
    Messages : 400
    Par défaut
    Ok. ça ne semble pas venir de là.

    On dirait plutôt que l'erreur vient de :

    dans ton code.

    Lorsqu'une page contient des tags <%= %> il ne faut pas modifier directement sont arborescence de contrôles. Essaie de rajouter un placeholder autour de ton tag.

  5. #5
    Membre averti
    Profil pro
    Inscrit en
    Février 2005
    Messages
    48
    Détails du profil
    Informations personnelles :
    Localisation : Suisse

    Informations forums :
    Inscription : Février 2005
    Messages : 48
    Par défaut
    Ok j'ai rajouté le placeHolder, en effet c'était bien le add qui posait problème.. Par contre maintenant à chaque fois que j'ai une nouvelle ligne, un bouton supplémentaire est ajouté :

    ligne 1 : 1 bouton
    ligne 2 : 2 boutons
    ligne 3 : 3 boutons....

    Voici le code modifié :

    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
     
        <% foreach (Technicien technicien in showList()) {
               Button Bt; %>
            <tr>
                <td>
                <asp:PlaceHolder ID="plControl" runat="server" />
                <%
                    Bt = new Button();
                    Bt.Text = "oui";
                    Bt.ID = "test";
                    Bt.CommandName = "oui";
                    Bt.Click += new EventHandler(Button1_Click);
                    this.plControl.Controls.Add(Bt);
                %>
                </td>
                <td><%= technicien.userName%></td>
                <td><%= technicien.name%></td>
                <td><%= technicien.prename%></td>
            </tr>
        <%  } %>
    Merci d'avance

  6. #6
    Membre averti
    Profil pro
    Inscrit en
    Février 2005
    Messages
    48
    Détails du profil
    Informations personnelles :
    Localisation : Suisse

    Informations forums :
    Inscription : Février 2005
    Messages : 48
    Par défaut
    J'ai essayé de créer un placeHolder en c# directement, puisqu'en faite j'ai plusieurs boutons car c'est toujours le même placholder qui contient de plus en plus d'éléments (1 de plus à chaque tour de boucle). Voici donc mon code :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
                    PlaceHolder placeh = new PlaceHolder();
                    placeh.ID = "test";
                    Button Bt = new Button();
                    Bt.Text = Convert.ToString(i);
                    Bt.ID = Convert.ToString(i);
                    Bt.CommandName = Convert.ToString(i);
                    Bt.Click += new EventHandler(Button1_Click);
                    placeh.Controls.Add(Bt);
    Malheureusement les boutons ne s'affichent plus....
    Je ne sais vraiment plus quoi faire... Avez-vous d'autres idées pour lancer une méthode C# avec paramètre depuis ASP ?

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

Discussions similaires

  1. [XL-2000] Creation bouton dynamique Erreur pour 1 feuille
    Par Invité dans le forum Macros et VBA Excel
    Réponses: 7
    Dernier message: 27/07/2009, 16h12
  2. changer image d'un bouton dynamiquement
    Par Dnx dans le forum Général JavaScript
    Réponses: 3
    Dernier message: 28/11/2005, 13h03
  3. [VB.Net] usercontrol static et bouton dynamique
    Par krest dans le forum ASP.NET
    Réponses: 19
    Dernier message: 26/07/2005, 17h43
  4. [Forms] Bouton dynamique
    Par lafouine dans le forum Forms
    Réponses: 4
    Dernier message: 20/07/2005, 10h24
  5. Réponses: 2
    Dernier message: 20/01/2004, 14h27

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