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 :

XML file importé dans ListView, sur lequel travaillé ?


Sujet :

Windows Presentation Foundation

  1. #1
    Membre confirmé
    Homme Profil pro
    Développeur .NET
    Inscrit en
    Octobre 2002
    Messages
    177
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 40
    Localisation : Suisse

    Informations professionnelles :
    Activité : Développeur .NET
    Secteur : High Tech - Opérateur de télécommunications

    Informations forums :
    Inscription : Octobre 2002
    Messages : 177
    Par défaut XML file importé dans ListView, sur lequel travaillé ?
    Bonjour,

    j'ai un fichier XML que je bind dans un ListView par la méthode suivante :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    <Window.Resources>
            <!--put in Resources-->
            <XmlDataProvider x:Key="myDataXML" XPath="cycling/track"/>
        </Window.Resources>
    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
    Grid>
            <!--if XMLDataProvider is inside <...Resources> so, use ItemsSource='{Binding Source={StaticResource xml}}'-->
            <ListView x:Name="listView" ItemsSource='{Binding Source={StaticResource myDataXML}}' IsSynchronizedWithCurrentItem="True" IsMouseCaptureWithinChanged="listView_IsMouseCaptureWithinChanged">
                <ListView.View>
                    <GridView>
                        <GridViewColumn Width="150">
                            <GridViewColumnHeader Content="Order1"/>
                            <GridViewColumn.CellTemplate>
                                <DataTemplate>
                                    <Grid>
                                        <TextBox Text="{Binding XPath=order1}"/>
                                    </Grid>
                                </DataTemplate>
                            </GridViewColumn.CellTemplate>
                        </GridViewColumn>
    les données s'affichent dans ma listView selon mes désirs.

    j'ai également coder le bouton ajouter et save qui m'ajoute une ligne dans mon listview puis fais la sauvegarde dans mon 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
    private void buttonAdd_Click(object sender, RoutedEventArgs e)
            {
                XmlDataProvider xdp = FindResource(xdpName) as XmlDataProvider;
                XmlDocument doc = xdp.Document;
     
                //creation of an attribute/branch <cycling>
                XmlElement addTrack = doc.CreateElement(cyclingBranch);
                //creation of an attribute/branch <track>
                addTrack = doc.CreateElement(trackBranch);
                /*creation of the attribute/branch 
                <track>
                    <order1></order1>
                </track> 
                */
                XmlElement newAttribute = addTrack.AppendChild(doc.CreateElement(order1Branch)) as XmlElement;
                newAttribute.AppendChild(doc.CreateTextNode(" "));
     
                newAttribute = addTrack.AppendChild(doc.CreateElement(order2Branch)) as XmlElement;
                newAttribute.AppendChild(doc.CreateTextNode(" "));
     
     
                doc.DocumentElement.AppendChild(addTrack);
     
            }
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    private void buttonSave_Click(object sender, RoutedEventArgs e)
            {
                XmlDataProvider xdp = FindResource(xdpName) as XmlDataProvider;
                XmlDocument doc = xdp.Document;
                doc.Save(filePath);
     
            }
    Je suis en train de regarder pour le bouton Delete et Insert et une question me pose problème.

    Comme je dois récupérer l'index de la ligne à supprimer ou celle avant l'insert d'une nouvelle ligne. Dois-je travailler directement sur les éléments de la listView, en clair, travailler sur un simple tableau, ou dois-je travailler avec les outils XML dans le code-behind (XMLDocument, XMLDataProvider, ...)

    cette question est assez fondamentale et je ne sais pas trop à quoi m'en tenir...

    Merci d'avance.

  2. #2
    Membre émérite
    Avatar de FRED.G
    Profil pro
    Inscrit en
    Novembre 2002
    Messages
    1 032
    Détails du profil
    Informations personnelles :
    Âge : 45
    Localisation : France

    Informations forums :
    Inscription : Novembre 2002
    Messages : 1 032
    Par défaut
    Salut,

    finalement tu poses la même question dans tes trois sujets, donc on est toujours tenté de ta faire la même réponse :

    - faire du Binding bi-directionnel entre ta source xml (encapsulée ici dans un xmlDataProvider) et ton ItemsControl, si bien que lorsque tu modifies ta source (plus exactement sa représentation en mémoire), ton ItemsControl se met à jour automatiquement.

    - pour faire du Binding bi-directionnel, utilises la syntaxe Linq to XML et travaille sur les objets Linq to XML en mémoire (Xdocument, XElement, XAttribute, etc.)

    EDIT : Bon, bi-directionnel c'est pas le bon mot car le contrôle ne permet pas de mettre à jour la source, donc c'est du binding unidirectionnel mais avec notification automatique des changements de la source vers le ItemsControl. J'espère que désormais toute confusion est évitée.

  3. #3
    Membre confirmé
    Homme Profil pro
    Développeur .NET
    Inscrit en
    Octobre 2002
    Messages
    177
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 40
    Localisation : Suisse

    Informations professionnelles :
    Activité : Développeur .NET
    Secteur : High Tech - Opérateur de télécommunications

    Informations forums :
    Inscription : Octobre 2002
    Messages : 177
    Par défaut
    ouais effectivement je suis pas au clair avec tout ca...

    merci pour les infos.

    Je profite du post pour poser 1 nouvelle question, toujours en rapport avec ce Bind.

    J'ai comme source mon fichier XML que je bind avec un XMLDataProvider en XAML et code behind. J'affiche mes éléments de mon XML dans une listView.

    Maintenant j'arrive à ajouter, modifier, supprimer les données de la listview et reporter ca directement sur mon fichier XML.

    Par contre, j'ai une ComboBox dans ma listView et je ne sais pas trop comment m'y prendre pour pouvoir afficher les ItemsSource.

    1. Dans mon fichier XML, j'ai 1 attribut <mon_contenu>F</mon_contenu> qui ne contient qu'un char.

    2. J'ai plusieurs valeurs possibles pour ma Combo ex. F, B, C, D

    3. J'arrive bien entendu à Binder ma combobox sur mon fichier XML et affiché la bonne valeur.

    4. maintenant, et c'est là que ca se corse. Je dois (selon moi) créer une ObservableCollection et créer toutes mes valeurs possibles pour ma combo en code behind.

    J'arrive à faire cela et à les afficher dans ma COmbo, mais par contre je n'arrive plus dans le même temps, à reprendre ma valeur de mon XML (donc la vraie valeur du row)

    En résumé, mon problème est le suivant : est-il possible d'afficher dans le combo un ItemSelected provenant d'une certaine source (XMLDataProvider) puis les ItemsSource depuis une autre source (ObjectDataProvider) ???

    J'espère m'être bien fait comprendre .

    Voici une partie de mon code pour mieux me faire saisir.

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
      ObjectDataProvider odp = new ObjectDataProvider();
     
            private ObservableCollection<string> libelleProduit = null;
     
            public ObservableCollection<string> LibelleProduit
            {
                get { return libelleProduit; }
                set { libelleProduit = value; }
            }
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
      libelleProduit = new ObservableCollection<string>();
                libelleProduit.Add("produit1");
                libelleProduit.Add("peroeji2");
    odp = (ObjectDataProvider)this.FindResource("odpProduit");
                if (odp != null)
                {
                    odp.ObjectInstance = LibelleProduit;
                }

    XAML : Resources
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    Window.Resources>
            <!--put in Resources-->
            <XmlDataProvider x:Key="myDataXML" XPath="cycling/track"/>
     
            <ObjectDataProvider x:Key="odpProduit"/>
     
        </Window.Resources>
    XML : déclaration listView
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
       <ListView x:Name="listView" ItemsSource='{Binding Source={StaticResource myDataXML}}'



    ComboBox: (ne marche pas mais syntaxe selon mon idée d'avoir 2 sources différentes
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    SelectedItem="{Binding Source={StaticResource myDataXML XPath=type, Mode=TwoWay}"
                                                    ItemsSource="{Binding Source={StaticResource odpProduit}}"
    Merci d'avance pour vos infos

  4. #4
    Membre confirmé
    Homme Profil pro
    Développeur .NET
    Inscrit en
    Octobre 2002
    Messages
    177
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 40
    Localisation : Suisse

    Informations professionnelles :
    Activité : Développeur .NET
    Secteur : High Tech - Opérateur de télécommunications

    Informations forums :
    Inscription : Octobre 2002
    Messages : 177
    Par défaut
    Personne ?

Discussions similaires

  1. XML Files insert dans une table
    Par Nyny93 dans le forum Administration
    Réponses: 0
    Dernier message: 26/09/2007, 17h26
  2. Réponses: 1
    Dernier message: 16/11/2006, 13h33
  3. SQL sur FlasFiler et import dans ACCESS
    Par Belgar dans le forum Requêtes et SQL.
    Réponses: 2
    Dernier message: 03/11/2005, 12h19
  4. [Strategie][Java][XML] Import dans une base de données
    Par nad dans le forum XML/XSL et SOAP
    Réponses: 2
    Dernier message: 23/09/2002, 11h12

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