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

Windows Presentation Foundation Discussion :

DataBinding dans une ListBox


Sujet :

Windows Presentation Foundation

  1. #1
    Membre actif Avatar de SKone
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Mai 2004
    Messages
    333
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 36
    Localisation : Canada

    Informations professionnelles :
    Activité : Ingénieur développement logiciels
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Mai 2004
    Messages : 333
    Points : 250
    Points
    250
    Par défaut DataBinding dans une ListBox
    Bonsoir,
    Je code en WPF et je me connect à une BDD MySQL tous fonctionne pas de problème mais lorsque je Bind une simple ListBox à une colonne de ma base de donnée j'ai chaque ligne de ma ListBox qui contiennent chacun des caractères du premier élément de la colonne

    La première ligne de ma bdd j'ai "Voiture Noir"

    et dans ma ListBox j'ai
    V
    o
    i
    t
    u
    r
    e

    N
    o
    i
    r

    Voilà Merci pour votre aide future

  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 : 42
    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
    Points : 39 749
    Points
    39 749
    Par défaut
    Je suppose que tu as fait un truc du genre :
    Code XML : Sélectionner tout - Visualiser dans une fenêtre à part
    <ListBox ItemsSource="{Binding laColonne}">
    ?

    Dans ce cas c'est normal... Si le binding renvoie une String, elle est traitée comme une collection de caractères

    Il faut mettre comme ItemsSource la liste des objets de la BDD, et indiquer dans le DisplayMemberPath la colonne à afficher :
    Code XML : Sélectionner tout - Visualiser dans une fenêtre à part
    <ListBox ItemsSource="{Binding laListe}" DisplayMemberPath="laColonne">

  3. #3
    Membre actif Avatar de SKone
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Mai 2004
    Messages
    333
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 36
    Localisation : Canada

    Informations professionnelles :
    Activité : Ingénieur développement logiciels
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Mai 2004
    Messages : 333
    Points : 250
    Points
    250
    Par défaut
    Merci cela fonctionne
    Voilà mes sources si cela pourrait servir à quelqu'un.
    Pour me connecté à base je fais (Après avoir télécharger et installer MySQL Connector) :
    Code C# : 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
                try
                {
                    DataTable contentsTable = new DataTable();
     
                    //Set the connection String
                    String connString = "server=127.0.0.1;uid=root;pwd=;database=Fovea;";
     
                    //Set the query
                    String query = "SELECT * FROM Type";
     
                    // Fill the Set with the data
                    Connection = new MySqlConnection(connString);
                    //Passing the query and connection String
                    MySqlDataAdapter da = new MySqlDataAdapter(query, Connection);
                    da.Fill(contentsTable);
     
                    // Set the Data Context
                    DataContext = contentsTable;
                }
                catch (MySqlException Ex)
                {
                    MessageBox.Show("Erreur SQL :\n" + Ex.Message, "Erreur");
                }

    Et pour mon xaml je fais :
    Code XML : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    <ComboBox Grid.Column="1" x:Name="ProdType" ItemsSource="{ Binding }" DisplayMemberPath="Nom" />
    Comme je l'avais mis dans le DataContext il y avait rien a mettre dans le Bind de l'item source.

    Par contre j'ai une autre question j'ai 3 ComboBox :
    Type Produit, Marque, Libelle Produit
    Et je voudrais qu'en fonction de ce qui est checked faire un filtre des données :
    Par exemple si type produit = console dans ma comboxBox Marque je ne verrais plus Apple, Toshiba, ... et dans Libelle je ne verrais plus Archos 405, iPhone, ... et si je selectionne dans Marque Sony après avoir séléctionné Console dans Type j'aurais dans Libellé PlayStation, PlayStation 2, PlayStation3, PSP, PSP Lite.
    Dans ma BDD c'est représenté par des cléfs étrangères dans mes tables.
    Merci

  4. #4
    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 : 42
    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
    Points : 39 749
    Points
    39 749
    Par défaut
    Je vois 2 options...
    - soit tu passes par une DataView qui filtre ta DataTable avec la propriété RowFilter (dans ce cas tu utilises la DataView comme DataContext)
    - soit tu gères l'évènement laListBox.Items.Filter pour afficher ou non tel ou tel élément

  5. #5
    Membre actif Avatar de SKone
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Mai 2004
    Messages
    333
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 36
    Localisation : Canada

    Informations professionnelles :
    Activité : Ingénieur développement logiciels
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Mai 2004
    Messages : 333
    Points : 250
    Points
    250
    Par défaut
    J'ai essayé les 2 méthodes :
    avec une "plus grosse" requête j'ai SELECT 3 colonnes (typeProduit, Marque, Produit) que je voudrais ajouté dans monDataView.
    * Je récupère les données de ma requête sur des DataTable dataTable0, dataTable1, dataTable2 contiennent mes 3 colonnes mais le Binding ne fonction pas dessus puisque le dataContext ne peut contenir qu'une seul DataTable. J'ai essayé de Merge les 3 DataTable dans une seul mais lorsque je Bind j'ai dans ma première ComboBox TypeProduit il y a autant de ligne vide après les données qu'il y a de marque et produit. Et dans la seconde Marque il y a autant de ligne vide avant mes données qu'il y a de type de produit et autant de ligne vide après qu'il y a de produit.
    * Et la seconde méthode ne fonctionne pas puisque pour remplir mon DataView je fait :
    Code C# : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    monDataView.Table.Colums.Add(dataTable0);
    monDataView.Table.Colums.Add(dataTable1);
    monDataView.Table.Colums.Add(dataTable2);
     
    DataContext = monDataView.Table
    Et là j'ai une exception xamlParseException.

    Merci de ton aide

  6. #6
    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 : 42
    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
    Points : 39 749
    Points
    39 749
    Par défaut
    J'ai rien compris...
    Ton code n'a pas de sens, tu ajoutes des DataTables à la liste des colonnes

  7. #7
    Membre actif Avatar de SKone
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Mai 2004
    Messages
    333
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 36
    Localisation : Canada

    Informations professionnelles :
    Activité : Ingénieur développement logiciels
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Mai 2004
    Messages : 333
    Points : 250
    Points
    250
    Par défaut
    Donc comment devrait-je faire pour pour ajouter les données issus de mes requêtes (dataTable0, dataTable1 et dataTable2) à un dataView. Ou Binder mes dataTablei ?

  8. #8
    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 : 42
    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
    Points : 39 749
    Points
    39 749
    Par défaut
    Tu ne peux pas ajouter des tables à une DataView. Une DataView est une vue des données d'une seule table.
    Par contre tu peux mettre des relations entre les DataTables, avec des colonnes calculées (Expression) qui renvoie les données des tables liées

  9. #9
    Membre actif Avatar de SKone
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Mai 2004
    Messages
    333
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 36
    Localisation : Canada

    Informations professionnelles :
    Activité : Ingénieur développement logiciels
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Mai 2004
    Messages : 333
    Points : 250
    Points
    250
    Par défaut
    Est ce que je peux abuser de ta patience en te demandant comment faire cela ?
    C'est que c'est la première fois que j'utilise concrètement WPF et des BDD en C#.
    Merci

  10. #10
    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 : 42
    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
    Points : 39 749
    Points
    39 749
    Par défaut
    Ca n'a rien de spécifique à WPF, tu peux utiliser les mêmes principes en Windows Forms ou ASP.NET...

    Pour créer des relations, le plus simple est de le faire avec le designer. C'est le même principe que quand tu fais des clés étrangères dans une base de données.
    Par exemple, si tu as 2 tables :
    - Commande(id_commande, date_commande, nom_client)
    - CommandeArticle(id_commande, id_article, quantité)
    Tu peux faire une relation (appelée par exemple Commande_CommandeArticle) entre les 2 selon le champ id_commande

    Dans la table Commande, tu peux ajouter une colonne NombreArticles, avec comme expression : "SUM(Child(Commande_CommandeArticle).quantité)"

    Ou alors, si tu veux avoir la date de la commande au niveau des articles, tu peux faire expression = "Parent(Commande_CommandeArticle).date_commande"

  11. #11
    Membre actif Avatar de SKone
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Mai 2004
    Messages
    333
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 36
    Localisation : Canada

    Informations professionnelles :
    Activité : Ingénieur développement logiciels
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Mai 2004
    Messages : 333
    Points : 250
    Points
    250
    Par défaut
    Merci
    Et encore une dernière question avant de finir ce post comment filtrer des Items ?
    Par exemple supprimer tous les items dont la longeur est < 5 où dont les noms appartiennent à une liste...
    Merci encore

  12. #12
    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 : 42
    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
    Points : 39 749
    Points
    39 749
    Par défaut
    tu fais une DataView avec un RowFilter du genre "LEN(nom_client) >= 5" ou "id_commande in (1,2,3)"

  13. #13
    Membre actif Avatar de SKone
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Mai 2004
    Messages
    333
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 36
    Localisation : Canada

    Informations professionnelles :
    Activité : Ingénieur développement logiciels
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Mai 2004
    Messages : 333
    Points : 250
    Points
    250
    Par défaut
    Merci je vais arrêter de te déranger pour mes autres questions je vais ouvrir un autre post.

  14. #14
    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 : 42
    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
    Points : 39 749
    Points
    39 749
    Par défaut
    N'oublie pas le tag

  15. #15
    Membre actif Avatar de SKone
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Mai 2004
    Messages
    333
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 36
    Localisation : Canada

    Informations professionnelles :
    Activité : Ingénieur développement logiciels
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Mai 2004
    Messages : 333
    Points : 250
    Points
    250
    Par défaut
    Voilà solved

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

Discussions similaires

  1. recherche dans une listbox
    Par micknic dans le forum Balisage (X)HTML et validation W3C
    Réponses: 4
    Dernier message: 23/02/2005, 21h39
  2. Clique droit dans une ListBox
    Par LoicH dans le forum C++Builder
    Réponses: 5
    Dernier message: 07/02/2005, 22h50
  3. [debutant] supprimer elements dans une listbox
    Par F.F. dans le forum C++Builder
    Réponses: 8
    Dernier message: 02/07/2004, 11h38
  4. [WIN32]tabulation dans une listbox
    Par stoluup dans le forum MFC
    Réponses: 2
    Dernier message: 09/06/2004, 10h11
  5. Icône a coté du texte dans une ListBox
    Par joce3000 dans le forum C++Builder
    Réponses: 6
    Dernier message: 05/12/2003, 02h25

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