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 :

Remplissage d'une listbox via une requete SQL


Sujet :

ASP.NET

  1. #1
    Membre éclairé
    Profil pro
    Inscrit en
    Juillet 2011
    Messages
    202
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juillet 2011
    Messages : 202
    Par défaut Remplissage d'une listbox via une requete SQL
    Bonjour , j'essaye de remplir une listbox à partir du résultat d'une reqûete SQL.
    Je n'y arrive pas: voilà ce que j'ai :

    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
        public class DataAccess
        {
            public static DataTable executeQuery(string req) // Requête SQL
            {
                SqlConnection oSQLConn = new SqlConnection();
                oSQLConn.ConnectionString = "Data Source=172.17.0.20;Initial Catalog=intranet;Persist Security Info=True;User ID=xxx;Password=xxx";
                SqlCommand cmd = new SqlCommand();
     
                cmd.CommandText = req;
                cmd.Connection = oSQLConn;
                oSQLConn.Open();
     
                DataTable dt = new DataTable();
                SqlDataReader dr = cmd.ExecuteReader();
                dt.Load(dr);
                oSQLConn.Close();
                return dt;
            }
        }
    et dans la page qui contient la listbox:

    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
        public partial class MyProfile : System.Web.UI.Page
        {
            protected void Page_Load(object sender, EventArgs e)
            {
     
                string req = " SELECT nomUtilisateur from Utilisateur";
                DataTable dt = new DataTable();
                dt = DataAccess.executeQuery(req);
                foreach ( DataRow dr in dt.Rows)
                {
                    ListBox1.Controls.Add(dr);
                }
     
            }
     
     
        }
    j'ai ces erreurs :
    Erreur 21 La méthode surchargée correspondant le mieux à 'System.Web.UI.ControlCollection.Add(System.Web.UI.Control)' possède des arguments non valides C:\Users\a.\Documents\Visual Studio 2010\Projects\WebApplication2\WebApplication2\MyProfile.aspx.cs 21 17 WebApplication2

    Erreur 22 Argument 1*: impossible de convertir de 'System.Data.DataRow' en 'System.Web.UI.Control' C:\Users\a.Documents\Visual Studio 2010\Projects\WebApplication2\WebApplication2\MyProfile.aspx.cs 21 39 WebApplication2
    Si quelqu'un peut m'aider
    Merci d'avance à vous

  2. #2
    Rédacteur/Modérateur


    Homme Profil pro
    Développeur .NET
    Inscrit en
    Février 2004
    Messages
    19 875
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 44
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Développeur .NET
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Février 2004
    Messages : 19 875
    Par défaut
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    ListBox1.Controls.Add(dr);
    Tu essaies d'ajouter un DataRow à une collection de contrôles... la méthode Add prend en paramètre un contrôle, pas un DataRow.

    De toutes façons tu te compliques la vie, ce sera plus simple en utilisant le data binding :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
                string req = " SELECT nomUtilisateur from Utilisateur";
                DataTable dt = DataAccess.executeQuery(req);
                ListBox1.DataSource = dt;
                ListBox1.DataTextField = "nomUtilisateur";
                ListBox1.DataValueField = "nomUtilisateur";
                ListBox1.DataBind();

  3. #3
    Membre éclairé
    Profil pro
    Inscrit en
    Juillet 2011
    Messages
    202
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juillet 2011
    Messages : 202
    Par défaut
    Merci ça marche très bien j'ai compris l'erreur

  4. #4
    Membre éclairé
    Profil pro
    Inscrit en
    Juillet 2011
    Messages
    202
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juillet 2011
    Messages : 202
    Par défaut
    Une autre petite question est ce que tu sais comment on fait pour autoriser la multisélection des noms? pour que je puisse quand je clique sur un bouton sauvegarder tout ceux qui sont sélectionnés après !
    thx

  5. #5
    Rédacteur/Modérateur


    Homme Profil pro
    Développeur .NET
    Inscrit en
    Février 2004
    Messages
    19 875
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 44
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Développeur .NET
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Février 2004
    Messages : 19 875
    Par défaut
    il faut mettre la propriété SelectionMode à Multiple

  6. #6
    Membre éclairé
    Profil pro
    Inscrit en
    Juillet 2011
    Messages
    202
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juillet 2011
    Messages : 202
    Par défaut
    Oui j'ai trouvé mais là je cherchais depuis tout à l'heure comment remplir une liste de participants:

    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
    namespace WebApplication2
    {
        public class RDV
        {
     
            public string objet;
            public string debut;
            public string fin;
            public List<Participant> Participants;
            public string heure;
            public string type;
            public string description;
            public string lieu;
     
        }
            public class Participant
        {
            public string nom;
            public string prenom;
            public string age;
        }
    }
    à partir de tout les noms sélectionnés dans la listbox

    en gros j'ai ça pour la création de l'objet RDV:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
            protected void BtnCreateRDV_Click(object sender, EventArgs e)
            {
                RDV rdv = new RDV();
                rdv.objet = txtObjetRDV.Text;
                rdv.debut = datepicker.Text;
                rdv.fin = datepicker2.Text;
     
                DataAccess.InsertRDV(rdv);
            }
    et je sais pas comment faire pour remplir la liste de participants...
    J'espère que tu vois ce que je veux dire
    thx!!

  7. #7
    Membre expérimenté
    Profil pro
    Inscrit en
    Septembre 2007
    Messages
    282
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Septembre 2007
    Messages : 282
    Par défaut
    Tu peux simplement, sur ton postback, parcourir la liste des Items de ta liste, vérifier pour chacun d'eux la valeur de la propriété IsSelected, et l'ajouter à ta liste de participant via un mécanisme de ton choix en récupérant la valeur de la propriété Value de tes Items.

    Pense que MaListe.Items[0].Value te retournera ce que tu as mis comme valeur, du coup, si tu n'a mis que le nom, ou la concaténation nom/prénom, il te faudra récupérer l'age par un autre moyen.

    Tu as cependant différentes solutions :
    - Tu mets Prénom + " " + Nom en Text et quelque chose comme Prénom|Nom|Age en Value, et tu parse cette chaine lors de ton postback (mais c'est très moche :p)
    - Tu stock tes utilisateurs ailleurs, avec un identifiant unique, et tu mets l'ID en value, comme ça lors du postback, tu récupère les informations des utilisateurs en fonction de leur ID.

  8. #8
    Membre éclairé
    Profil pro
    Inscrit en
    Juillet 2011
    Messages
    202
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juillet 2011
    Messages : 202
    Par défaut
    Merci pour ta réponse, je vois un peu ce que tu veux dire...
    Cependant je me heurte à un problème dès le début ...

    En faisant un foreach pour parcourir ma listbox dans le but de voir ceux qui sont "IsSelected"

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
        foreach (Participant tmpparticipant in ListBox1.Rows)
                {
     
                }
    Erreur 21 L'instruction foreach ne peut pas fonctionner sur des variables de type 'int', car 'int' ne contient pas de définition public pour 'GetEnumerator' C:\Users\XX\Documents\Visual Studio 2010\Projects\WebApplication2\WebApplication2\MyProfile.aspx.cs 37 13 WebApplication2

  9. #9
    Membre éclairé
    Profil pro
    Inscrit en
    Juillet 2011
    Messages
    202
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juillet 2011
    Messages : 202
    Par défaut
    J'ai essayé de chercher et j'ai trouvé une piste peut être : sauf que j'ai une erreur au moment d'ajout dans la liste (Participants.Add(ListBox1.Items[i])


    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
           protected void BtnCreateRDV_Click(object sender, EventArgs e)
            {
                RDV rdv = new RDV();
                rdv.objet = txtObjetRDV.Text;
                rdv.debut = datepicker.Text;
                rdv.fin = datepicker2.Text;
     
                Participant participant = new Participant();
                participant.nom = ListBox1.SelectedItem.ToString();
     
                for (int i = 0; i < ListBox1.Rows; i++)
                {
                    if (ListBox1.Items[i].Selected == true) 
                    {
                        List<Participant> Participants = new List<Participant>();
                        Participants.Add(ListBox1.Items[i]);
     
                    }
                }
     
     
     
     
     
                DataAccess.InsertRDV(rdv);
            }
    Erreur 21 La méthode surchargée correspondant le mieux à 'System.Collections.Generic.List<WebApplication2.Participant>.Add(WebApplication2.Participant)' possède des arguments non valides C:\Users\a.XXX\Documents\Visual Studio 2010\Projects\WebApplication2\WebApplication2\MyProfile.aspx.cs 42 21 WebApplication2


    Erreur 22 Argument 1*: impossible de convertir de 'System.Web.UI.WebControls.ListItem' en 'WebApplication2.Participant' C:\Users\a.XXX\Documents\Visual Studio 2010\Projects\WebApplication2\WebApplication2\MyProfile.aspx.cs 42 38 WebApplication2

  10. #10
    Membre expérimenté
    Profil pro
    Inscrit en
    Septembre 2007
    Messages
    282
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Septembre 2007
    Messages : 282
    Par défaut
    Bonjour,

    il faut comprendre une chose pour comprendre ton erreur : ta liste ne contient pas des Participants, elle contient des noms. Si on regarde ton code, on voit que tu veux transformer implicitement les éléments de la liste (des ListItem) en Participant, et évidemment, le compilateur ne sait pas le faire, alors il te jette.

    Solution => il faut créer une instance de Participant et lui affecter la valeur pour le nom (par contre, comme je l'avais dit, tu perds les informations de prénom et d'age).

    Deuxième chose importante, il faut que tu revois la notion de portée des variables : dans ton code, tu fais une boucle sur les items de ta ListBox, et pour CHAQUE itération, tu instancie une liste nommée Participants, et tu ajoutes un élément à celle-ci. Le problème c'est que non seulement ta liste ne sert à rien (tu ne l'utilise pas en relation avec ton object RDV), mais en plus, elle n'existe que pour l'itération en cours. Il faut créer cette liste AVANT de commencer ta boucle, puis lui ajouter les éléments désirés.

    Un code (non compilé, juste pour l'exemple) plus correct serait :
    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
     
    RDV rdv = new RDV();
    // ...
     
    // On instancie la liste des participants pour ce rendez-vous
    rdv.Participants = new List<Participant>();
     
    // On parcours tous les éléments de la liste des participants
    foreach (ListItem item in ListBox1.Items)
    {
        // Si l'élément est sélectionné, alors on ajoute le participant à notre liste
        if (item.Selected)
        {
            // Le nom du participant est la valeur de l'élément
            Participant participant = new Participant();
            participant.Nom = item.Value;
            rdv.Participants.Add(participant);
        }
    }

    Je te conseil aussi vivement de consulter la documentation MSDN des classes que tu utilises, elle contient en général des exemples qui devraient te permettre de mieux comprendre comment les utiliser. Voici celle des ListBox web : http://msdn.microsoft.com/fr-fr/libr...s.listbox.aspx

Discussions similaires

  1. Réponses: 1
    Dernier message: 25/01/2010, 15h50
  2. Réponses: 0
    Dernier message: 31/10/2009, 09h59
  3. Comment remplir une listBox via une collection
    Par loic20h28 dans le forum Windows Forms
    Réponses: 8
    Dernier message: 20/11/2008, 14h49
  4. Réponses: 2
    Dernier message: 17/04/2007, 17h14
  5. comment charger une listbox via une requete access
    Par sanfour_walhan dans le forum VB 6 et antérieur
    Réponses: 4
    Dernier message: 27/12/2006, 07h44

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