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 :

Accéder aux données en mémoire d'un XmlDataProvider, depuis le code VB.net


Sujet :

Windows Presentation Foundation

  1. #1
    Membre du Club
    Profil pro
    Inscrit en
    Mai 2006
    Messages
    158
    Détails du profil
    Informations personnelles :
    Localisation : Belgique

    Informations forums :
    Inscription : Mai 2006
    Messages : 158
    Points : 41
    Points
    41
    Par défaut Accéder aux données en mémoire d'un XmlDataProvider, depuis le code VB.net
    Dans le cas d'un fichier XML "bindé" à des éléments de l'interface (WPF)

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    Dim systemdata As XmlDataProvider = New XmlDataProvider()
    Private Sub MainWindow_Loaded(sender As Object, e As System.Windows.RoutedEventArgs) Handles Me.Loaded
            systemdata.Source = New Uri("fichier.xml")
            systemdata.XPath = "Base"
            Grid1.DataContext = systemdata
    End Sub
    Comment puis-je faire, svp, pour accéder à ces données (chargées en mémoire par le XmlDataProvider)...à partir du code VB.net?

  2. #2
    Membre confirmé Avatar de koyot3
    Inscrit en
    Avril 2007
    Messages
    693
    Détails du profil
    Informations forums :
    Inscription : Avril 2007
    Messages : 693
    Points : 610
    Points
    610
    Par défaut
    Bonjour,

    Tu peux y accéder via le Data de ton XmlProvider :

    Code c# : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
     
    foreach (XmlElement node in (IEnumerable)systemdata .Data)
    {
     
    }

    C'est du c# mais je connais pas trop le VB.Net

    @+

  3. #3
    Membre du Club
    Profil pro
    Inscrit en
    Mai 2006
    Messages
    158
    Détails du profil
    Informations personnelles :
    Localisation : Belgique

    Informations forums :
    Inscription : Mai 2006
    Messages : 158
    Points : 41
    Points
    41
    Par défaut
    Tout d'abord, merci pour ta réponse!
    Je dois manquer quelque chose, car je viens de réaliser l'exemple suivant...et cela ne fonctionne pas:

    Le fichier XML:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    <Books>
    	<Book ID="1" Name="ABC" />
    	<Book ID="2" Name="DEF" />
    	<Book ID="3" Name="XYZ" />
    </Books>
    Le code XAML:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    <Window x:Class="MainWindow"
        xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
        xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml" 
        Title="MainWindow" Height="350" Width="525">
        <Grid Name="Grid1">
        <ComboBox ItemsSource="{Binding XPath=Book/@Name}" IsSynchronizedWithCurrentItem="True" Height="34" HorizontalAlignment="Left" Margin="38,56,0,0" Name="ComboBox1" VerticalAlignment="Top" Width="208" />
      </Grid>
    </Window>
    Le code VB:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    Imports System.Xml
    Class MainWindow
        Dim systemdata As XmlDataProvider = New XmlDataProvider()
        Private Sub MainWindow_Loaded(sender As Object, e As System.Windows.RoutedEventArgs) Handles Me.Loaded
            systemdata.Source = New Uri("book.xml")
            systemdata.XPath = "Books"
            Grid1.DataContext = systemdata
            '
            For Each nom As XmlNode In systemdata.Data.GetElementsByTagName("Book")
                MessageBox.Show(nom.Attributes("ID").Value)
            Next
            '
        End Sub
    End Class
    Le binding se déroule bien, je vois que mon combobox est bien lié...mais impossible d'accéder aux données dans la boucle!!

    (A first chance exception of type 'System.NullReferenceException' occurred in Microsoft.VisualBasic.dll)

  4. #4
    Membre confirmé Avatar de koyot3
    Inscrit en
    Avril 2007
    Messages
    693
    Détails du profil
    Informations forums :
    Inscription : Avril 2007
    Messages : 693
    Points : 610
    Points
    610
    Par défaut
    Bonjour,

    Code c# : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    foreach (XmlElement books in xmlDataProvider.Data as IEnumerable)
    {
    	foreach (XmlNode book in books.GetElementsByTagName("Book"))
    	{
    		Console.WriteLine(book.Attributes["ID"].Value);
    	}        
    }

    Bon là c'est brut de pommes, faudrait vérifier si les variables sont pas nulles, ...

    @+

  5. #5
    Membre du Club
    Profil pro
    Inscrit en
    Mai 2006
    Messages
    158
    Détails du profil
    Informations personnelles :
    Localisation : Belgique

    Informations forums :
    Inscription : Mai 2006
    Messages : 158
    Points : 41
    Points
    41
    Par défaut
    Voila donc ce qui a marché pour moi:

    Donc, pour pouvoir, à partir d'un même fichier, faire du binding (XmlDataProvider) et pouvoir y toucher par le code aussi (XmlDocument), voila la démarche:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    Public Shared Xmldoc As XmlDocument = New XmlDocument() 'Initialiser un nouveau XmlDocument
    Public Shared Xmlprov As XmlDataProvider = New XmlDataProvider() 'Faire de même pour un XmlDataProvider
    Sub xmlInit() 'Au chargement
            Xmldoc.Load("Systems.xml") 'Charger le XmlDocument avec un fichier .xml
            Xmlprov.Document = Xmldoc 'Dire ensuite au XmlDataProvider que son document sera..le XmlDocument
            Xmlprov.XPath = "Emulators" 'Spécifier au XmlDataProvider le XPath de départ
            Grid1.DataContext= Xmlprov 'Eventuellement indiquer à quel niveau se fera le binding (ici, au niveau d'une grille)
    End Sub
    Au niveau XAML, voici un exemple d'utilisation:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    <ListBox ItemsSource="{Binding XPath=System}" IsSynchronizedWithCurrentItem="True" /> 'Ce listbox afficherait donc les éléments repris sous le tag "System" (en partant du tag "Emulator" comme spécifié avant)
    Au niveau VB, voici un exemple d'utilisation:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    Dim nodeSystem as XmlNodeList = Xmldoc.SelectNodes("Emulators/System") 'nodeSystem, va contenir l'ensemble des nodes compris dans Emulators > System.

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

Discussions similaires

  1. [VB.NET] Accéder aux données de Form2 dans Form1
    Par BigBEdwards dans le forum Windows Forms
    Réponses: 4
    Dernier message: 02/10/2006, 16h07
  2. [C#] Comment accéder aux données d'une Form ?
    Par cjacquel dans le forum Windows Forms
    Réponses: 5
    Dernier message: 28/07/2006, 11h55
  3. Problème pour accéder aux données ASP.net côté client
    Par mappy dans le forum Général JavaScript
    Réponses: 2
    Dernier message: 26/07/2006, 15h10
  4. Relation ! schéma ! comment accèder aux données ?
    Par julien.63 dans le forum PostgreSQL
    Réponses: 1
    Dernier message: 20/06/2006, 21h14
  5. Accéder aux données d'un sous formulaire
    Par jkembo dans le forum Access
    Réponses: 6
    Dernier message: 28/04/2006, 16h38

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