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 :

[C#]Création automatique de boutons dans un datatable [Débutant]


Sujet :

ASP.NET

  1. #1
    Membre averti
    Profil pro
    Inscrit en
    Décembre 2011
    Messages
    33
    Détails du profil
    Informations personnelles :
    Localisation : Belgique

    Informations forums :
    Inscription : Décembre 2011
    Messages : 33
    Par défaut [C#]Création automatique de boutons dans un datatable
    Bonjour,

    Je créé une DataTable et dedans j'y ajoute des données contenus dans ma BD grâce à une boucle, je voudrais crée à chaque nouvelle ligne un bouton. Ensuite je convertis le DataTable en DataGrid.

    Le problème c'est que au lieu de m'afficher le bouton j'ai un texte d'affiché :
    System.Web.UI.WebControls.Button

    Voici mon 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
    DataTable dt = new DataTable();
    dt.Columns.Add(new DataColumn("Login",typeof(string)));
    dt.Columns.Add(new DataColumn("Consulter",typeof(string)));
     
    foreach(SearchResult verif in searcher.FindAll())
    {
     DirectoryEntry DirEntry = verif.GetDirectoryEntry();
     DataRow row1 = dt.NewRow();
     row1["Login"] = DirEntry.Properties["SAMAccountName"].Value;
     Button btn = new Button();
     btn.Text = "Click";
     btn.ID = (string)  DirEntry.Properties["SAMAccountName"].Value;
     btn.OnClientClick = "modifRechBtn_Click()";
     row1["Consulter"] = btn;
     dt.Rows.Add(row1);
     
    }
    DataView dv = new DataView(dt);
    DataGrid1.DataSource = dv;
    DataGrid1.DataBind();

  2. #2
    Modérateur

    Homme Profil pro
    Chef de projet NTIC
    Inscrit en
    Avril 2007
    Messages
    1 996
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 41
    Localisation : France, Ille et Vilaine (Bretagne)

    Informations professionnelles :
    Activité : Chef de projet NTIC
    Secteur : Service public

    Informations forums :
    Inscription : Avril 2007
    Messages : 1 996
    Par défaut
    Bonjour,

    tu procèdes à l'envers et commet une grosse erreur quand tu dis
    Ensuite je convertis le DataTable en DataGrid.
    Ton DataTable est une source de données que tu utiliseras pour peupler un contrôle de présentation, le DataGrid via ce qu'on appelle le binding.

    Ce n'est pas à ton DataTable de contenir un bouton mais à ton DataGrid.
    Au passage, le DataGrid est dépassé, utilise plutôt une GridView.

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    <asp:GridView ID="GridView1"  runat="server" AutoGenerateColumns="False"  >
           <Columns>
                    <asp:TemplateField>
                      <ItemTemplate>
                          <asp:Label runat="server" ID="Label1"><%# DataBinder.Eval(Container.DataItem, "Login") %></asp:Label> 
                          <asp:Button ID="Button1" runat="server" Text="Consulter" OnClientClick="javascript:modifRechBtn_Click();" />
                      </ItemTemplate>
                    </asp:TemplateField>
            </Columns>
    </asp:GridView>
    et pour le binding :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    DataView dv = new DataView(dt);
    GridView1.DataSource = dv;
    GridView1.DataBind();

  3. #3
    Membre averti
    Profil pro
    Inscrit en
    Décembre 2011
    Messages
    33
    Détails du profil
    Informations personnelles :
    Localisation : Belgique

    Informations forums :
    Inscription : Décembre 2011
    Messages : 33
    Par défaut
    Tout d'abord, merci de votre réponse.
    Je m'étais rabattu sur le DataGrid car je n'y connais rien et à force de farfouiller sur le web je me suis perdu de solution en solution ..

    J'ai bien recopié votre code. Les boutons sont ok.
    Mais je n'ai pas d'intitulé de colonne (j'ai ajouté un HeaderTemplate mais l'affiche n'est pas vraiment agréable, j'aimerais séparer chaques informations dans une case (comme un tableau, car j'ai plusieurs informations qui s'affiche (nom, prenom, département,..)) est-ce possible ?

    merci

    PS : J'aimerais récupérer la valeur du "Login" lorsque l'on click sur le bouton. Pour cela, il faudrait que j'associe l'id du bouton au "Login" et transmettre l'id à ma fonction modifRechBtn_Click pour qu'elle le récupère ?

  4. #4
    Modérateur

    Homme Profil pro
    Chef de projet NTIC
    Inscrit en
    Avril 2007
    Messages
    1 996
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 41
    Localisation : France, Ille et Vilaine (Bretagne)

    Informations professionnelles :
    Activité : Chef de projet NTIC
    Secteur : Service public

    Informations forums :
    Inscription : Avril 2007
    Messages : 1 996
    Par défaut
    Quelques recherches sur le net t'auraient orientées...

    Dans ce cas, il faut définir plusieurs Templates :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    <asp:GridView ID="GridView1"  runat="server" AutoGenerateColumns="False"  >
           <Columns>
                    <asp:TemplateField>
                      <ItemTemplate>
                          <asp:Label runat="server" ID="Label1"><%# DataBinder.Eval(Container.DataItem, "Login") %></asp:Label>
                      </ItemTemplate>
                    </asp:TemplateField> 
                    <asp:TemplateField>
                      <ItemTemplate>
                          <asp:Button ID="Button1" runat="server" Text="Consulter" OnClientClick="javascript:modifRechBtn_Click(<%# DataBinder.Eval(Container.DataItem, "Login") %>);" />
                      </ItemTemplate>
                    </asp:TemplateField>
            </Columns>
    </asp:GridView>
    En ce qui concerne votre demande sur le login, que fais la fonction modifRechBtn_Click() ?
    Pourquoi passer par du Javascript ?
    Une solution envisageable est dans le code ci-dessus (à adapter si besoin). Il faudra de toute façon que la définition de la fonction js prenne en paramètre une chaine de caractères (le login).

    Enfin, un petit conseil : ne recopie pas le code. Essaye de le comprendre et de te documenter

  5. #5
    Membre averti
    Profil pro
    Inscrit en
    Décembre 2011
    Messages
    33
    Détails du profil
    Informations personnelles :
    Localisation : Belgique

    Informations forums :
    Inscription : Décembre 2011
    Messages : 33
    Par défaut
    J'avais fait des recherches mais j'y ai trouvé tellement de solutions différentes que je me suis complétement perdu, je viens de commencer ASP.NET il y a 2 semaines donc je ne suis pas vraiment habitué!
    Je ne répond que maintenant car c'était le w-e et je n'étais plus au bureau.

    Ma fonction modifRechBtn_Click est une fonction qui va rechercher dans l'Active Directory toutes les informations contenus dans le compte ayant le login transmis pour afficher toutes les informations sous forme de formulaire et permettre d'effectuer des modifications. (Le code que vous m'avez montré me permet de faire un affiche lorsque la recherche nous donnent plusieurs Nom, prénom, département, descriptions .. communs à des comptes)

    En tout cas merci beaucoup pour votre aide.

  6. #6
    Membre averti
    Profil pro
    Inscrit en
    Décembre 2011
    Messages
    33
    Détails du profil
    Informations personnelles :
    Localisation : Belgique

    Informations forums :
    Inscription : Décembre 2011
    Messages : 33
    Par défaut
    J'essaye de faire passer la valeur du Login dans le onclick mais ça ne fonctionne pas.. J'effectue des recherches mais je ne trouve pas !

  7. #7
    Modérateur

    Homme Profil pro
    Chef de projet NTIC
    Inscrit en
    Avril 2007
    Messages
    1 996
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 41
    Localisation : France, Ille et Vilaine (Bretagne)

    Informations professionnelles :
    Activité : Chef de projet NTIC
    Secteur : Service public

    Informations forums :
    Inscription : Avril 2007
    Messages : 1 996
    Par défaut
    Qu'est-ce qui ne fonctionne pas ?

    Tu n'as pas répondu à ma question précédente : pourquoi passes-tu par du javascript ? A priori, ce que tu veux faire ressemble plutôt à un traitement déclenché côté serveur. Si c'est le cas, onClick est plus adapté que onClientClick

  8. #8
    Membre averti
    Profil pro
    Inscrit en
    Décembre 2011
    Messages
    33
    Détails du profil
    Informations personnelles :
    Localisation : Belgique

    Informations forums :
    Inscription : Décembre 2011
    Messages : 33
    Par défaut
    Je passe par onclick ^^

    Dans mon gridview il y a une liste des comptes des clients qui affichent (Login,Nom,Prénom, Companie, Département, Description + un bouton valider propre à chaque ligne).
    Lorsque l'on click sur l'un des boutons valider, je souhaite récupérer le login, pour l'utiliser dans ma fonction modifRechBtn_Click et afficher plus d'informations relatives aux comptes pour pouvoir les modifier.
    Merci beaucoup !

    Edit : Et bien je n'ai pas trouvé d'autres solutions pour cela, si vous en avez une autre que le javascript je suis disposé à l'utiliser !!!

    Edit 2 : Ce que je voudrais savoir c'est comment dans ma fonction modifRechBtn_Click je peu récupérer le contenu de mon Label .. Ca serait vraiment sympa ! Je n'y arrive pas du tout

    Ou si il existe une autre mannière je suis prenneur !

  9. #9
    Modérateur

    Homme Profil pro
    Chef de projet NTIC
    Inscrit en
    Avril 2007
    Messages
    1 996
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 41
    Localisation : France, Ille et Vilaine (Bretagne)

    Informations professionnelles :
    Activité : Chef de projet NTIC
    Secteur : Service public

    Informations forums :
    Inscription : Avril 2007
    Messages : 1 996
    Par défaut
    Tu n'as pas dû chercher beaucoup...

    Tu as déjà quasi tout dans ce que je t'ai donné...
    Dans l'ordre il faut :
    - t'abonner à l'évènement OnRowCommand de ton gridview
    - ajouter un CommandName "modifier" à ton Button dans l'ItemTemplate (cf. mon post précédent)
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    CommandName = "modifier"
    - ajouter un CommandArgument à ce même Button
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    CommandArgument = <%# DataBinder.Eval(Container.DataItem, "Login") %>
    Au clic sur le bouton, tu passeras dans l'event OnRowCommand de ta GridView. Tu pourras tester si le CommandName est bien "modifier" et tu auras alors le login dans le CommandArgument.
    Il ne te restera plus qu'à y faire le traitement que tu fais actuellement dans modifRechBtn

  10. #10
    Membre averti
    Profil pro
    Inscrit en
    Décembre 2011
    Messages
    33
    Détails du profil
    Informations personnelles :
    Localisation : Belgique

    Informations forums :
    Inscription : Décembre 2011
    Messages : 33
    Par défaut
    Désolé.. Merci pour tout je vais essayer de tout réaliser sans erreur

    Edit tout marche !!!!

    J'ai du changer le OnClick en OnCommand et rajouter des ' entre les <%

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

Discussions similaires

  1. [AC-2003] Création automatique de bouton dans un formulaire
    Par spider0410 dans le forum IHM
    Réponses: 1
    Dernier message: 19/06/2013, 10h16
  2. [VBA-E] Création d'un bouton dans "Worksheet Menu Bar"
    Par damsmut dans le forum Macros et VBA Excel
    Réponses: 2
    Dernier message: 14/03/2007, 08h25
  3. création automatique de bouton "supprimer"
    Par houla! dans le forum ASP
    Réponses: 4
    Dernier message: 20/09/2006, 09h23
  4. Réponses: 6
    Dernier message: 12/06/2006, 20h03
  5. Insérer automatiquement des boutons dans des cellules excel
    Par Oaurelius dans le forum Macros et VBA Excel
    Réponses: 3
    Dernier message: 04/11/2005, 18h38

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