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

C# Discussion :

Utilisation d'un dropdownlist et d'un bouton dans un repeater


Sujet :

C#

  1. #1
    Membre habitué Avatar de lou87
    Profil pro
    Inscrit en
    Février 2006
    Messages
    368
    Détails du profil
    Informations personnelles :
    Âge : 37
    Localisation : France

    Informations forums :
    Inscription : Février 2006
    Messages : 368
    Points : 128
    Points
    128
    Par défaut Utilisation d'un dropdownlist et d'un bouton dans un repeater
    Bonjour,

    Comme indiqué dans mon titre je cherche à utiliser un dropdownlist et un bouton qui se trouve dans mon repeater. J'ai remarqué assez rapidement qu'il ne reconnaissait ni l'un ni l'autre lorsque l'on veut les utiliser directement dans le code behind.

    Je me suis un peu renseignée et apparemment je pourrais les utiliser dans le repeater itemCommand, et findControl si j'ai bien compris....

    Cependant je n'arrive pas à le faire...

    Dans mon repeater se trouve les données d'une table de ma base de données et avec l'aide de mon dropdownlist et de mon bouton j'aimerais en modifier un élément...

    Quelqu'un pourrait-il m'aiguiller sur la bonne voie, s'il vous plaît ?
    Me mettre un exemple si c'est possible ?

    En vous remerciant.

    Bonne journée.

  2. #2
    Membre habitué Avatar de lou87
    Profil pro
    Inscrit en
    Février 2006
    Messages
    368
    Détails du profil
    Informations personnelles :
    Âge : 37
    Localisation : France

    Informations forums :
    Inscription : Février 2006
    Messages : 368
    Points : 128
    Points
    128
    Par défaut
    Personne ne peut vraiment m'aider ?

    J'ai réussi à trouver cette exemple et essayé de l'adapter à mon dropdownlist, mais sans succès pour l'instant...

    http://smartdev.wordpress.com/2009/0...of-a-repeater/

  3. #3
    Membre confirmé Avatar de Redouane
    Profil pro
    Inscrit en
    Octobre 2003
    Messages
    435
    Détails du profil
    Informations personnelles :
    Âge : 45
    Localisation : France, Paris (Île de France)

    Informations forums :
    Inscription : Octobre 2003
    Messages : 435
    Points : 569
    Points
    569
    Par défaut
    Bonjour,

    Si tu veux juste savoir comment faire, pour récupérer la valeur de ton dropDownList au sein du Repeater, lors du click sur le bouton; je pense que tu peux le faire dans le ItemCommand du ton repeater :

    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
    protected void Repeater1_ItemCommand(object source, RepeaterCommandEventArgs e)
            {
                if (e.Item.ItemType == ListItemType.Item || e.Item.ItemType == ListItemType.AlternatingItem)
                {
                    DropDownList ddl = (DropDownList)e.Item.FindControl("TonDropDownList");
     
                    // Tu récupère la valeur sélectionnée (le texte ou la valeur associée)
                    //    ddl.SelectedItem.Text
                    // ou ddl.SelectedItem.Value
                    if (ddl != null && ddl.SelectedItem != null)
                        Variable = ddl.SelectedItem.Value;
     
                    // Faire des traitements avec la variable récupérée
                    // ...............
                }
            }
    ci ce que tu veux, non ?

  4. #4
    Membre habitué Avatar de lou87
    Profil pro
    Inscrit en
    Février 2006
    Messages
    368
    Détails du profil
    Informations personnelles :
    Âge : 37
    Localisation : France

    Informations forums :
    Inscription : Février 2006
    Messages : 368
    Points : 128
    Points
    128
    Par défaut
    Bonjour Redouane !

    Je pense que c'est ça. J'essaie ça tout de suite, et je reviens vous en informer.

    Et merci pour ta réponse !


    Edit : Je pense que ça fonctionnerait.

    Cependant une fonction me fait une erreur, toujours la même fonction pour pas changer, simplement le type d'erreur n'est pas le même.

    Voici l'erreur :
    L'exception InvalidCastException n'a pas été gérée par le code utilisateur.
    Échec de la conversion de la valeur de paramètre d'un RepeaterCommandEventArgs en un Int32.
    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
    40
    41
    42
    43
    44
    45
    46
    47
    48
    49
    50
    51
    52
    53
    54
    55
    56
    57
    58
    59
    60
    61
    62
    63
    64
    65
    66
    67
    68
    69
    70
    71
    72
    protected void ListCE_ItemCommand(object source, RepeaterCommandEventArgs e)
            {
                string status;
    
                if (e.Item.ItemType == ListItemType.Item || e.Item.ItemType == ListItemType.AlternatingItem)
                {
                    DropDownList ddl = (DropDownList)e.Item.FindControl("ddl_status");
    
                    // Tu récupère la valeur sélectionnée (le texte ou la valeur associée)
                    if (ddl != null && ddl.SelectedItem != null)
                        status = ddl.SelectedItem.Text;
                    // Faire des traitements avec la variable récupérée
    
    
                    SqlConnection connexion = new SqlConnection(System.Configuration.ConfigurationManager.
                    ConnectionStrings["connectString1"].ConnectionString);
                    connexion.Open();
    
                    status = ddl.SelectedItem.Text;
    
                    //string status = Variable;
    
                    // requête Insert/Update des informations dans la table du mois en cours REPLACE autorisé avce MySql ;)
    
                    string query = "Update table SET status = @status WHERE (id_CE = @id_CE)";
    
                    //lbl_requete.Text = query;
    
                    using (SqlConnection Connection = new SqlConnection(System.Configuration.ConfigurationManager.
                    ConnectionStrings["connectString1"].ConnectionString))
                    {
    
                        SqlCommand cmdUpdate = new SqlCommand(query, Connection);
    
                        // commande SQL insertion dans table
    
                        cmdUpdate.CommandText = query;
    
    
                        // "paramètrage" des paramètres
                        cmdUpdate.Parameters.Add("@id_CE", SqlDbType.Int); // Type à remplacer par le type adéquat
                        cmdUpdate.Parameters.Add("@status", SqlDbType.VarChar,50); // Type à remplacer par le type adéquat
    
                        // récupèration des valeurs des paramètres
    
                        cmdUpdate.Parameters["@id_CE"].Value = e; // ..
                        cmdUpdate.Parameters["@status"].Value = "" + status + "";
    
    
                        // connexion
    
                        Connection.Open();
    
                        if (Connection.State == System.Data.ConnectionState.Open)
    
                        // si la connexion est ouverte
                        {
    
                            // et on fait la mise à jour
                            cmdUpdate.ExecuteNonQuery();
    
                            // on met à jour le gridview
                            ListCE.DataBind();
    
                            // fermeture connection
    
                            Connection.Close();
    
                        }
    
                    }
                }
    J'ai beau chercher si un des éléments de ma requête n'était pas dans le bon format mais il me semble que non...

    Et puis je me suis posé la question si la variable e de RepeaterCommandEventArgs n'en était pas la cause, car je l'utilise comme index par la suite pour mettre à jour les données dans ma table.

    Mais il y a là encore un petit problème car e commence à 0 et ma table à 1.

  5. #5
    Membre habitué
    Profil pro
    Inscrit en
    Février 2008
    Messages
    114
    Détails du profil
    Informations personnelles :
    Âge : 37
    Localisation : France

    Informations forums :
    Inscription : Février 2008
    Messages : 114
    Points : 140
    Points
    140
    Par défaut
    Bonsoir.

    La ligne qui pose problème semble être
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    cmdUpdate.Parameters["@id_CE"].Value = e;
    Elel devrait plutot ressembler à ça:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    cmdUpdate.Parameters["@id_CE"].Value = int.Parse(e.CommandArgument)
    En prenant comme hypothèse que la valeur de id_CE est donnée comme argument de la commande.

  6. #6
    Membre confirmé Avatar de Redouane
    Profil pro
    Inscrit en
    Octobre 2003
    Messages
    435
    Détails du profil
    Informations personnelles :
    Âge : 45
    Localisation : France, Paris (Île de France)

    Informations forums :
    Inscription : Octobre 2003
    Messages : 435
    Points : 569
    Points
    569
    Par défaut
    Bns,

    Je rejoins Ketan à ce qu'il a dit, et je te pose une question.
    Ton @id_CE est la valeur de l'élément sélectionné de ton DropDownList, l'index de la ligne ou une autre valeur ?

  7. #7
    Membre habitué Avatar de lou87
    Profil pro
    Inscrit en
    Février 2006
    Messages
    368
    Détails du profil
    Informations personnelles :
    Âge : 37
    Localisation : France

    Informations forums :
    Inscription : Février 2006
    Messages : 368
    Points : 128
    Points
    128
    Par défaut
    Bonsoir,

    Mon id_CE est l'index de ma ligne (dans ma base de données).
    La valeur sélectionnée de mon dropdownlist est la variable status.

    Pour ce qui est de la variable e, c'est le RepeaterCommandEventArgs.

    Je vous remercie pour vos réponses.

    Edit: Quand j'applique votre solution :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    int.Parse(e.CommandArgument)
    Il me met une erreur en disant :
    La méthode surchargée correspondant le mieux à 'int.Parse(string)' possède des arguments non valides

  8. #8
    Membre confirmé Avatar de Redouane
    Profil pro
    Inscrit en
    Octobre 2003
    Messages
    435
    Détails du profil
    Informations personnelles :
    Âge : 45
    Localisation : France, Paris (Île de France)

    Informations forums :
    Inscription : Octobre 2003
    Messages : 435
    Points : 569
    Points
    569
    Par défaut
    Citation Envoyé par lou87 Voir le message
    Mon id_CE est l'index de ma ligne (dans ma base de données)
    Bonjour,

    Tu veux dire un identifiant unique de la ligne que tu veux modifier dans la base de données, comme un primary key.

    Pour cela, tu utiliseras CommandArgument comme a été dit avant et pour ne pas avoir l'erreur que t'as :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    int.Parse(e.CommandArgument.ToString());
    et bien sur il faut l'appeler dans ton repeater, dans ton button tu feras :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    <asp:Button CommandArgument='<%# DataBinder.Eval(Container.DataItem, "TonIdentifiant") %>' ID="Button1" runat="server" />
    "TonIdentifiant" ici sera l'id_CE

    Bonne courage.

  9. #9
    Membre habitué Avatar de lou87
    Profil pro
    Inscrit en
    Février 2006
    Messages
    368
    Détails du profil
    Informations personnelles :
    Âge : 37
    Localisation : France

    Informations forums :
    Inscription : Février 2006
    Messages : 368
    Points : 128
    Points
    128
    Par défaut
    Merci Redouane !!!!!!!!!!!!!!!

    Et merci aussi ketan ! ^_^

    Ça fonctionne !!!!

    Je croyais que je n'en verrais jamais le bout.

    Un grand merci.

    Problème résolu.

    Bonne journée.

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

Discussions similaires

  1. [AJAX] Récupérer le clic bouton dans un Repeater
    Par Pelote2012 dans le forum jQuery
    Réponses: 7
    Dernier message: 20/02/2013, 09h40
  2. attendre un click sur bouton dans boucle repeat/until
    Par sp2308 dans le forum Débuter
    Réponses: 4
    Dernier message: 11/03/2011, 22h36
  3. Un bouton dans un Repeater
    Par zooffy dans le forum ASP.NET
    Réponses: 2
    Dernier message: 25/03/2010, 15h49
  4. Utilisation des boutons dans un formulaire
    Par jackyjoke dans le forum IHM
    Réponses: 1
    Dernier message: 28/11/2006, 14h25

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