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 :

[C#/Binding] Comment puis-je mieux faire ?


Sujet :

Windows Presentation Foundation

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre averti
    Profil pro
    Inscrit en
    Août 2003
    Messages
    22
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Août 2003
    Messages : 22
    Par défaut [C#/Binding] Comment puis-je mieux faire ?
    Bonjour à tous !

    Je souhaite développer un logiciel en WPF en utilisant aussi toutes les nouvelles subtilités du .Net Framework 3.0 et 3.5.

    Je vais avoir une base de données. Initialement, j'avais pensé à un fichier Access. Puis je me suis ravisé à utiliser un fichier XML et Linq to Xml associé au Binding.

    Voici un exemple du fichier xml :
    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
    <?xml version="1.0" encoding="utf-8"?>
    <especes>
      <data>
        <n_enr.>1 </n_enr.>
        <fam>Acanthaceae</fam>
        <gen>Hygrophilia</gen>
        <esp>Corymbosa</esp>
        <nom>Grand hygrophile</nom>
        <orig>Asie du Sud.</orig>
        <type>2 </type>
        <dif>1 </dif>
        <mil>4 </mil>
        <taimax>30 </taimax>
        <zone>0 </zone>
        <tmin>22 </tmin>
        <tmax>28 </tmax>
        <dgh>20 </dgh>
        <phmin>7 </phmin>
        <phmax>8 </phmax>
        <maint>Solitaire ou en groupe...</maint>
        <soc>3 </soc>
        <nour>3 </nour>
        <repro>2 </repro>
        <des>Tige dressée et brunatre...</des>
        <laq>50 </laq>
        <lum>2 </lum>
        <bra>1 </bra>
        <photo></photo>
      </data></especes>
    L'idée étant pour moi de sélectionner dans 3 listbox les familles, les genres et espèces dans le but d'afficher les informations contenues dans le fichier.

    J'ai donc procédé à des requêtes Linq To SQL pour obtenir les informations. En voici un exemple :
    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
     
            private void lstGen_SelectionChanged(object sender, SelectionChangedEventArgs e)
            {
                XDocument dataDocument = InitializeDataSource("Data/BIB.xml");
     
     
                System.Xml.XmlElement oSelectedElement = lstGen.SelectedItem as System.Xml.XmlElement;
                if (lstGen.SelectedItem != null)
                {
                    var query = (from c in dataDocument.Descendants("data")
                                 where ((string)c.Element("gen").Value.ToLower()).Contains(lstGen.SelectedItem.ToString().ToLower())
                                 select (string)c.Element("esp").Value).Distinct();
     
                    var queryDistinct = Enumerable.Distinct(query);
     
                    lstEsp.ItemsSource = queryDistinct;
                    //lstDetails.ItemsSource = queryDistinct;
                }
                else lstEsp.ItemsSource = null;
            }
    A la base, j'avais utilsé une classe EspeceInfo, qui me permettait de typer les informations à afficher. J'avais trouvé un post hyper pratique permettant de binder directement le datasource du listbox avec le résultat de la requête. Malheureusement, j'ai été incapable de faire du Distinct sur des collections. Je devais faire un Comparer, mais je n'y suis pas parvenu (voir dans le fichier EspeceInfo.cs).

    Toujours est-il que j'ai contourné le problème et je ne trouve pas la solution propre.

    Pour afficher le détail des données contenues dans le XML, j'ai créé une listBox avec un datatemplate qui reprend les différents champs. Je pense que l'on peut faire plus propre.

    Auriez-vous quelques pistes ?

    Pour vous aider, vous pouvez télécharger la solution complète là :http://membres.lycos.fr/boujouman/MyReef_dev.com.rar

    Merci pour votre aide

  2. #2
    Membre Expert
    Profil pro
    Inscrit en
    Juillet 2008
    Messages
    1 562
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juillet 2008
    Messages : 1 562
    Par défaut
    salut regarde cet exemple
    je t'avais repondu amplement mais ie s'est lamentablement plante
    alors je te conseil ce qui est du filtage de rajouter
    dans les resource de ta page
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    <CollectionViewSource Source="{StaticResource Logs2}" x:Key="LogsFilter" Filter="LogsFilter"/>


    et la methode
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    privatevoid LogsFilter(object sender, FilterEventArgs e)
    {
       LogInformation li = e.Item asLogInformation;
       e.Accepted = ((LogInfoCollection.SelectedLevel & li.Level) != 0);
    }

  3. #3
    Membre averti
    Profil pro
    Inscrit en
    Août 2003
    Messages
    22
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Août 2003
    Messages : 22
    Par défaut
    Merci je vais regarder.

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

Discussions similaires

  1. [MySQL] Comment puis-je faire l'inverse de cette requette
    Par pierrot10 dans le forum PHP & Base de données
    Réponses: 4
    Dernier message: 06/06/2007, 13h05
  2. Comment puis-je faire cela?
    Par pacha2602 dans le forum Flash
    Réponses: 4
    Dernier message: 01/05/2007, 08h19
  3. Réponses: 2
    Dernier message: 20/01/2007, 11h19
  4. Comment puis je faire pour que'une page soir rechargees....
    Par pierrot10 dans le forum Général JavaScript
    Réponses: 2
    Dernier message: 23/12/2005, 10h46
  5. Comment puis je faire cette effet...
    Par wikers dans le forum OpenGL
    Réponses: 5
    Dernier message: 12/06/2004, 20h40

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