none
Lire et MODIFIER un fichier XML RRS feed

  • Discussion générale

  • Bonjour

    Je suis sous Visual Studio 2012 en Visual Basic (le C++ serait peut étre mieux mais je connais pas).

    A l'aide d'un formulaire, dans des TextBox je voudrais afficher certains élément d'un fichier XML et pouvoir les modifier.

    Voici une partie du fichier XML :

     
    <allow_spectator_relays>False</allow_spectator_relays>
     
    <p2p_cache_size>600</p2p_cache_size>
     
    <force_ip_address></force_ip_address>
    <server_port>2352</server_port>
    <server_p2p_port>3452</server_p2p_port>
    <client_port>0</client_port>
    <bind_ip_address></bind_ip_address>
    <use_nat_upnp></use_nat_upnp>
     
    <gsp_name></gsp_name>
    <gsp_url></gsp_url>
     
    <xmlrpc_port>5002</xmlrpc_port>
    <xmlrpc_allowremote>False</xmlrpc_allowremote>

    Je voudrais pouvoir modifier les données entre les balises (le texte via des TextBox et les "true" et "False" via des cases à cocher)

    Dans le formulaire, je voudrais avoir un bouton pour aller chercher le ficher XML en question et un autre bouton pour enregistrer les modifications en le renomment.

    J'ai trois fichier XML à modifier en même temps (si possible) car certaines info à modifier son commune.

    Je sais pas si je me suis bien expliqué mais merci d'avance pour votre aide.

    Bonne journée

    • Type modifié Aurel Bera mardi 25 février 2014 12:13
    vendredi 7 février 2014 07:10

Toutes les réponses

  • Bonjour

    Je vous propose ce code :

        Dim ds As New DataSet
            ds.ReadXml("d:\Temp\test.xml")
            '    Me.BindingContext(ds, "config").Position = 0
            TextBox1.DataBindings.Clear()
            CheckBox1.DataBindings.Clear()
            TextBox1.DataBindings.Add(New Binding("Text", ds.Tables(0), "p2p_cache_size"))
            CheckBox1.DataBindings.Add(New Binding("Checked", ds.Tables(0), "allow_spectator_relays"))

    "Config"  c'est définis dans mon fichier XML:

     
    <config>
    <allow_spectator_relays>true</allow_spectator_relays>
     
    <p2p_cache_size>600</p2p_cache_size>
     
    <force_ip_address></force_ip_address>
    <server_port>2352</server_port>
    <server_p2p_port>3452</server_p2p_port>
    <client_port>0</client_port>
    <bind_ip_address></bind_ip_address>
    <use_nat_upnp></use_nat_upnp>
     
    <gsp_name></gsp_name>
    <gsp_url></gsp_url>
     
    <xmlrpc_port>5002</xmlrpc_port>
    <xmlrpc_allowremote>False</xmlrpc_allowremote>
    </config>
    Cordialement,


    Aurel BERA, MSFT
    MSDN Community Support. LE CONTENU EST FOURNI "TEL QUEL" SANS GARANTIE D'AUCUNE SORTE, EXPLICITE OU IMPLICITE.
    S'il vous plaît n'oubliez pas de "Marquer comme réponse" les réponses qui ont résolu votre problème. C'est une voie commune pour reconnaître ceux qui vous ont aidé, et rend plus facile pour les autres visiteurs de trouver plus tard la résolution.

    vendredi 7 février 2014 13:36
  • Bonjour

    Merci pour la réponse

    Je suppose que le code permet seulement de pouvoir lire les données.

    Toutefois, c'est un peut plus compliqué (pour moi en tout cas) :

    Le fichier est en fait un fichier .txt avec du code XML (je sais pas si sa change grand chose).

    Voici en dessous, le fichier complet avec, en gras, les éléments à récupérer et à modifier.

    Si cela peut aidé, le fichier permet entre autre de créer un serveur dédié pour le jeux Trackmania2

    =================================================================

     

    <?xml version="1.0" encoding="utf-8" ?>

    <dedicated>
    <authorization_levels>
    <level>
    <name>SuperAdmin</name>
    <password>SuperAdmin</password>
    </level>
    <level>
    <name>Admin</name>
    <password>Admin</password>
    </level>
    <level>
    <name>User</name>
    <password>User</password>
    </level>
    </authorization_levels>

    <masterserver_account>
    <login>Login</login>
    <password>PW</password>
    <validation_key>Key</validation_key>
    </masterserver_account>

    <server_options>
    <name>Name</name>
    <comment>Comment</comment>
    <hide_server>0</hide_server> <!-- value is 0 (always shown), 1 (always hidden), 2 (hidden from nations) -->

    <max_players>32</max_players>
    <password></password>

    <max_spectators>32</max_spectators>
    <password_spectator></password_spectator>

    <keep_player_slots>False</keep_player_slots>
    <ladder_mode>forced</ladder_mode>

    <ladder_serverlimit_min>0</ladder_serverlimit_min>
    <ladder_serverlimit_max>60000</ladder_serverlimit_max>

    <enable_p2p_upload>True</enable_p2p_upload>
    <enable_p2p_download>False</enable_p2p_download>

    <callvote_timeout>60000</callvote_timeout>
    <callvote_ratio>0.5</callvote_ratio>

    <callvote_ratios>
    <voteratio command="Ban" ratio="-1"/>
    <!-- commands can be "Ban", "Kick", "RestartMap", "NextMap", ... -->
    </callvote_ratios>

    <allow_map_download>True</allow_map_download>
    <autosave_replays>False</autosave_replays>
    <autosave_validation_replays>False</autosave_validation_replays>

    <referee_password></referee_password>
    <referee_validation_mode>0</referee_validation_mode> <!-- value is 0 (only validate top3 players),  1 (validate all players) -->

    <use_changing_validation_seed>False</use_changing_validation_seed>

    <disable_horns>False</disable_horns>
    <clientinputs_maxlatency>0</clientinputs_maxlatency>
    </server_options>

    <system_config>
    <connection_uploadrate>800</connection_uploadrate>
    <connection_downloadrate>8000</connection_downloadrate>

    <allow_spectator_relays>False</allow_spectator_relays>

    <p2p_cache_size>600</p2p_cache_size>

    <force_ip_address></force_ip_address>
    <server_port>2350</server_port>
    <server_p2p_port>3450</server_p2p_port>
    <client_port>0</client_port>
    <bind_ip_address></bind_ip_address>
    <use_nat_upnp></use_nat_upnp>

    <gsp_name></gsp_name> <!-- Game Server Provider name and info url -->
    <gsp_url></gsp_url> <!-- If you're a server hoster, you can use this to advertise your services -->

    <xmlrpc_port>5000</xmlrpc_port>
    <xmlrpc_allowremote>False</xmlrpc_allowremote> <!-- If you specify an ip adress here, it'll be the only accepted adress. this will improve security. -->

    <scriptcloud_source>nadeocloud</scriptcloud_source> <!-- Specify the cloud storage mode for Titles that use it. Can be "localdebug" or "xmlrpc" or "nadeocloud" (default). "nadeocloud" will work only if the creator of the title subscribed to the cloud service. -->


    <blacklist_url></blacklist_url>
    <guestlist_filename></guestlist_filename>
    <blacklist_filename></blacklist_filename>

    <title>SMStorm</title>

    <minimum_client_build></minimum_client_build> <!-- Only accept updated client to a specific version. ex: 2011-10-06 -->

    <disable_coherence_checks>False</disable_coherence_checks> <!-- disable internal checks to detect issues/cheats, and reject race times -->

    <use_proxy>False</use_proxy>
    <proxy_login></proxy_login>
    <proxy_password></proxy_password>
    </system_config>
    </dedicated>

    =================================================================

    Je pense que j'aurais du mettre le fichier complet dés le début pour donner toutes information.

    Merci de votre aide 

    vendredi 7 février 2014 14:43
  • Pas de problème.

    En effet vous avez plusieurs sections qui en effet passé en plusieurs tables dans le DataSet.
    Donc pour binder les éléments vous faites:

      TextBox1.DataBindings.Add(New Binding("Text", ds.Tables("nom_table"), "nom_propriete1"))
            CheckBox1
    .DataBindings.Add(New Binding("Checked", ds.Tables("nom_table"),  "nom_propriete2"))

    Et pour écrire le fichier : 
     ds.WriteXml("d:\Temp\test.xml")

    Cordialement,


    Aurel BERA, MSFT
    MSDN Community Support. LE CONTENU EST FOURNI "TEL QUEL" SANS GARANTIE D'AUCUNE SORTE, EXPLICITE OU IMPLICITE.
    S'il vous plaît n'oubliez pas de "Marquer comme réponse" les réponses qui ont résolu votre problème. C'est une voie commune pour reconnaître ceux qui vous ont aidé, et rend plus facile pour les autres visiteurs de trouver plus tard la résolution.

    vendredi 7 février 2014 14:53
  • Ok

    Merci je vais voir ça.

    Mais je vais pas avoir un problème ici : 

    <authorization_levels>
    <level>
    <name>SuperAdmin</name>
    <password>SuperAdmin</password>
    </level>
    <level>
    <name>Admin</name>
    <password>Admin</password>
    </level>
    <level>
    <name>User</name>
    <password>User</password>
    </level>
    </authorization_levels>

    Avec les "name" et "password" ??

    vendredi 7 février 2014 18:15
  • Bonjour

    Je viens de tester et aucune problème, sauf qu'ils sont en claire.

    Cordialement,


    Aurel BERA, MSFT
    MSDN Community Support. LE CONTENU EST FOURNI "TEL QUEL" SANS GARANTIE D'AUCUNE SORTE, EXPLICITE OU IMPLICITE.
    S'il vous plaît n'oubliez pas de "Marquer comme réponse" les réponses qui ont résolu votre problème. C'est une voie commune pour reconnaître ceux qui vous ont aidé, et rend plus facile pour les autres visiteurs de trouver plus tard la résolution.

    lundi 10 février 2014 09:14
  • Bonjour,

    Voila comment j'aurais fait si je devais lire un fichier XML

      Private Sub Button1_Click(sender As Object, e As EventArgs) Handles Button1.Click
    
    
            ' Dim SiunFichierXml = XDocument.Load("C:\temp\Monfichier.xml")
            ' Dim SiUnFichierTxtQuiContientXml = XDocument.Load(My.Computer.FileSystem.ReadAllText("C:\temp\Monfichier.txt"))
    
            Dim ConfigServer = <?xml version="1.0" encoding="utf-8"?>
                               <dedicated>
                                   <authorization_levels>
                                       <level>
                                           <name>SuperAdmin</name>
                                           <password>SuperAdmin</password>
                                       </level>
                                       <level>
                                           <name>Admin</name>
                                           <password>Admin</password>
                                       </level>
                                       <level>
                                           <name>User</name>
                                           <password>User</password>
                                       </level>
                                   </authorization_levels>
    
                                   <masterserver_account>
                                       <login>Login</login>
                                       <password>PW</password>
                                       <validation_key>Key</validation_key>
                                   </masterserver_account>
    
                                   <server_options>
                                       <name>Name</name>
                                       <comment>Comment</comment>
                                       <hide_server>0</hide_server>
                                       <!-- value is 0 (always shown), 1 (always hidden), 2 (hidden from nations) -->
    
                                       <max_players>32</max_players>
                                       <password></password>
    
                                       <max_spectators>32</max_spectators>
                                       <password_spectator></password_spectator>
    
                                       <keep_player_slots>False</keep_player_slots>
                                       <ladder_mode>forced</ladder_mode>
    
                                       <ladder_serverlimit_min>0</ladder_serverlimit_min>
                                       <ladder_serverlimit_max>60000</ladder_serverlimit_max>
    
                                       <enable_p2p_upload>True</enable_p2p_upload>
                                       <enable_p2p_download>False</enable_p2p_download>
    
                                       <callvote_timeout>60000</callvote_timeout>
                                       <callvote_ratio>0.5</callvote_ratio>
    
                                       <callvote_ratios>
                                           <voteratio command="Ban" ratio="-1"/>
                                           <!-- commands can be "Ban", "Kick", "RestartMap", "NextMap", ... -->
                                       </callvote_ratios>
    
                                       <allow_map_download>True</allow_map_download>
                                       <autosave_replays>False</autosave_replays>
                                       <autosave_validation_replays>False</autosave_validation_replays>
    
                                       <referee_password></referee_password>
                                       <referee_validation_mode>0</referee_validation_mode>
                                       <!-- value is 0 (only validate top3 players),  1 (validate all players) -->
    
                                       <use_changing_validation_seed>False</use_changing_validation_seed>
    
                                       <disable_horns>False</disable_horns>
                                       <clientinputs_maxlatency>0</clientinputs_maxlatency>
                                   </server_options>
    
                                   <system_config>
                                       <connection_uploadrate>800</connection_uploadrate>
                                       <connection_downloadrate>8000</connection_downloadrate>
    
                                       <allow_spectator_relays>False</allow_spectator_relays>
    
                                       <p2p_cache_size>600</p2p_cache_size>
    
                                       <force_ip_address></force_ip_address>
                                       <server_port>2350</server_port>
                                       <server_p2p_port>3450</server_p2p_port>
                                       <client_port>0</client_port>
                                       <bind_ip_address></bind_ip_address>
                                       <use_nat_upnp></use_nat_upnp>
    
                                       <gsp_name></gsp_name>
                                       <!-- Game Server Provider name and info url -->
                                       <gsp_url></gsp_url>
                                       <!-- If you're a server hoster, you can use this to advertise your services -->
    
                                       <xmlrpc_port>5000</xmlrpc_port>
                                       <xmlrpc_allowremote>False</xmlrpc_allowremote>
                                       <!-- If you specify an ip adress here, it'll be the only accepted adress. this will improve security. -->
    
                                       <scriptcloud_source>nadeocloud</scriptcloud_source>
                                       <!-- Specify the cloud storage mode for Titles that use it. Can be "localdebug" or "xmlrpc" or "nadeocloud" (default). "nadeocloud" will work only if the creator of the title subscribed to the cloud service. -->
    
    
                                       <blacklist_url></blacklist_url>
                                       <guestlist_filename></guestlist_filename>
                                       <blacklist_filename></blacklist_filename>
    
                                       <title>SMStorm</title>
    
                                       <minimum_client_build></minimum_client_build>
                                       <!-- Only accept updated client to a specific version. ex: 2011-10-06 -->
    
                                       <disable_coherence_checks>False</disable_coherence_checks>
                                       <!-- disable internal checks to detect issues/cheats, and reject race times -->
    
                                       <use_proxy>False</use_proxy>
                                       <proxy_login></proxy_login>
                                       <proxy_password></proxy_password>
                                   </system_config>
                               </dedicated>
            '
            ' Lecture des données XML
            '
            Console.WriteLine(ConfigServer...<dedicated>.<authorization_levels>.<level>.<name>.Value)
            Console.WriteLine(ConfigServer...<dedicated>.<authorization_levels>.<level>.<password>.Value)
    
            Console.WriteLine(ConfigServer...<dedicated>.<authorization_levels>.<level>(1).<name>.Value)
            Console.WriteLine(ConfigServer...<dedicated>.<authorization_levels>.<level>(1).<password>.Value)
    
            Console.WriteLine(ConfigServer...<dedicated>.<authorization_levels>.<level>(2).<name>.Value)
            Console.WriteLine(ConfigServer...<dedicated>.<authorization_levels>.<level>(2).<password>.Value)
    
            'ou
            'Dim AutorisationLevel = ConfigServer...<dedicated>.<authorization_levels>.<level>
            'Console.WriteLine(AutorisationLevel.<name>.Value)
            'Console.WriteLine(AutorisationLevel.<password>.Value)
            'ou
            'For Each level In ConfigServer...<dedicated>.<authorization_levels>.<level>
            '    Console.WriteLine(level.<name>.Value)
            '    Console.WriteLine(level.<password>.Value)
            'Next
    
            '
            ' Changement des données dans le fichier XML
            '
            ConfigServer...<dedicated>.<authorization_levels>.<level>.<name>.Value = "SuperAdmin2"
            ConfigServer...<dedicated>.<authorization_levels>.<level>.<password>.Value = "SuperAdmin2"
    
            ConfigServer...<dedicated>.<authorization_levels>.<level>(1).<name>.Value = "Admin2"
            ConfigServer...<dedicated>.<authorization_levels>.<level>(1).<password>.Value = "Admin2"
    
            ConfigServer...<dedicated>.<authorization_levels>.<level>(2).<name>.Value = "User2"
            ConfigServer...<dedicated>.<authorization_levels>.<level>(2).<password>.Value = "User2"
    
            ConfigServer.Save("C:\temp\SauvConfigServ.xml")
    

    Pour crypter le mot de passe il existe plusieurs façon de faire, mais il est toujours récupérable par un tierce personnes ...


    Cordialement,

    lundi 10 février 2014 10:03
    Auteur de réponse
  • Bonjour

    @Aurel Bera
    Je comprend pas se que tu veux dire par  : "aucune problème, sauf qu'ils sont en claire".

    @Troxsa

    Ça m'arrange pas trop d'avoir le code XML dans le code du programme car je voudrais, via mon formulaire, pourvoir lire le fichier et modifier certaines données.

    Le code d' Aurel Bera marche bien (pour la lecture en tout cas, j'ai pas tester plus) mais j'ai mon problème pour les trois premiers password.

    Petite demande en plus (si non, c'est pas marrant) :

    De plus, pour la ligne
    <title>SMStorm</title>
    Il me faudrait le faire sous forme de liste déroulante pour pouvoir choisir la version du jeux avec les items :
    - TMStadium
    - TMValley
    - TMCanyon
    - SMStorm

    J’espère avoir pas trop mal expliqué.

    Bonne journée

    A+



    • Modifié FCL31 lundi 10 février 2014 10:42
    lundi 10 février 2014 10:36
  • Maintenant j'ai compris.

    Pour modifier plusieurs noms/mot de passé on doit avoir un DataGridView et faire le DataBinding comme ça:

           DataGridView1.DataSource = ds.Tables("level")

     Pour le title vous ajoutez le ComboBox sur l'écran, dans les Items vous mettez les valeurs que vous voulez, et faites le DataBinding comme ça :

    ComboBox1.DataBindings.Add(New Binding("SelectedItem", ds.Tables(0), "title"))
    Cordialement,

    Aurel BERA, MSFT
    MSDN Community Support. LE CONTENU EST FOURNI "TEL QUEL" SANS GARANTIE D'AUCUNE SORTE, EXPLICITE OU IMPLICITE.
    S'il vous plaît n'oubliez pas de "Marquer comme réponse" les réponses qui ont résolu votre problème. C'est une voie commune pour reconnaître ceux qui vous ont aidé, et rend plus facile pour les autres visiteurs de trouver plus tard la résolution.

    lundi 10 février 2014 10:53
  • Maintenant j'ai compris.

    Pour modifier plusieurs noms/mot de passé on doit avoir un DataGridView et faire le DataBinding comme ça:

           DataGridView1.DataSource = ds.Tables("level")


    Tu peux développer un peut plus STP.

    Je comprend pas trop se qu'il faut faire.
    Je n'ai jamais utilisé de DataGridView (il faut bien une première fois).

    lundi 10 février 2014 11:13
  • Le DataGridView c'est un contrôle (vous l'ajoutez comme le TextBox, CheckBox) et permet la saisie des informations dans une table avec plusieurs colonnes et lignes.

    http://msdn.microsoft.com/fr-fr/library/system.windows.forms.datagridview(v=vs.110).aspx

    Cordialement,


    Aurel BERA, MSFT
    MSDN Community Support. LE CONTENU EST FOURNI "TEL QUEL" SANS GARANTIE D'AUCUNE SORTE, EXPLICITE OU IMPLICITE.
    S'il vous plaît n'oubliez pas de "Marquer comme réponse" les réponses qui ont résolu votre problème. C'est une voie commune pour reconnaître ceux qui vous ont aidé, et rend plus facile pour les autres visiteurs de trouver plus tard la résolution.

    lundi 10 février 2014 11:57
  • Re

    Merci beaucoup, car maintenant, j'arrive à lire le fichier comme je veux dans le formulaire.
    Pour information voici mon code :

     Private Sub Button2_Click(sender As Object, e As EventArgs) Handles Button2.Click
    
            Dim Open_File As New OpenFileDialog
    
            Open_File.Filter = "Fichier (*.txt)|*.txt|Fichier (*.xml)|*.xml"
    
            Try
                If Open_File.ShowDialog() = Windows.Forms.DialogResult.OK Then
                    Dim xmlFile As XmlReader
                    xmlFile = XmlReader.Create(Open_File.FileName, New XmlReaderSettings())
                    Dim ds As New DataSet
                    ds.ReadXml(xmlFile)
    
                    TBLoginServ.DataBindings.Add(New Binding("Text", ds.Tables("masterserver_account"), "login"))
                    TBLoginServPW.DataBindings.Add(New Binding("Text", ds.Tables("masterserver_account"), "password"))
                    TBKey.DataBindings.Add(New Binding("Text", ds.Tables("masterserver_account"), "validation_key"))
                    TBServerName.DataBindings.Add(New Binding("Text", ds.Tables("server_options"), "name"))
                    TBComment.DataBindings.Add(New Binding("Text", ds.Tables("server_options"), "comment"))
                    TBPlayerMax.DataBindings.Add(New Binding("Text", ds.Tables("server_options"), "max_players"))
                    TBSpectatorMax.DataBindings.Add(New Binding("Text", ds.Tables("server_options"), "max_spectators"))
                    'TBLPMini.DataBindings.Add(New Binding("Text", ds.Tables("server_options"), "ladder_serverlimit_min"))
                    'TBLPMaxi.DataBindings.Add(New Binding("Text", ds.Tables("server_options"), "ladder_serverlimit_max"))
                    TBUp.DataBindings.Add(New Binding("Text", ds.Tables("system_config"), "connection_uploadrate"))
                    TBDown.DataBindings.Add(New Binding("Text", ds.Tables("system_config"), "connection_downloadrate"))
                    TBServerPort.DataBindings.Add(New Binding("Text", ds.Tables("system_config"), "server_port"))
                    TBServerP2PPort.DataBindings.Add(New Binding("Text", ds.Tables("system_config"), "server_p2p_port"))
                    TBXmlrpcPort.DataBindings.Add(New Binding("Text", ds.Tables("system_config"), "xmlrpc_port"))
                    CheckBSkins.DataBindings.Add(New Binding("Checked", ds.Tables("server_options"), "enable_p2p_upload"))
                    ComboBVersion.DataBindings.Add(New Binding("SelectedItem", ds.Tables("system_config"), "title"))
                    DataGridView1.DataSource = ds.Tables("level")
    
                    TBSuperAdminPW.Text = DataGridView1.Rows(0).Cells(1).Value
                    TBAdminPW.Text = DataGridView1.Rows(1).Cells(1).Value
                    TBUserPW.Text = DataGridView1.Rows(2).Cells(1).Value
    
                End If
            Catch ex As Exception
                MsgBox(ex.Message)
            End Try
    
        End Sub

    Maintenant, je voudrais savoir comment apporter les modifs dans les textbox et autre et suite à un clic sur un bouton, les modifs soit enregistrées dans le fichier d'origine.

    Encore merci de votre aide.


    • Modifié FCL31 lundi 10 février 2014 14:51
    lundi 10 février 2014 14:47
  • Vous avez le DataSet en mémoire. Avec ce type de DataBinding qu'on a utilisée, les informations sont actualisées directement dans le DataSet.
    Maintenant vous n'avez qu'e enregistrer le DataSet avec ds.WriteXml ("nom_fichier.ext").

    TBSuperAdminPW.Text = DataGridView1.Rows(0).Cells(1).Value
                    TBAdminPW
    .Text = DataGridView1.Rows(1).Cells(1).Value
                    TBUserPW
    .Text = DataGridView1.Rows(2).Cells(1).Value

    Vous recouperez le mot de passé dans des TexBox. La saisie dans le DataGridView ne soufis pas?

    N.B. vous allez voir un petit changement de formatage de XML, mais il reste valide.

    Cordialement,

     


    Aurel BERA, MSFT
    MSDN Community Support. LE CONTENU EST FOURNI "TEL QUEL" SANS GARANTIE D'AUCUNE SORTE, EXPLICITE OU IMPLICITE.
    S'il vous plaît n'oubliez pas de "Marquer comme réponse" les réponses qui ont résolu votre problème. C'est une voie commune pour reconnaître ceux qui vous ont aidé, et rend plus facile pour les autres visiteurs de trouver plus tard la résolution.

    lundi 10 février 2014 15:07
  • Re

    Vous recouperez le mot de passé dans des TexBox. La saisie dans le DataGridView ne soufis pas?
    Pour moi, il y a pas de problème mais pour certains autres utilisateurs, c'est mieux d'avoir des TextBox (si non, il y a des grosses probabilités d'erreurs).

    Par contre, j'ai un peux de mal avec ds.WriteXml ("nom_fichier.ext")
    Le problème vient de moi je pense.
    La lecture se faisant via un bouton et la sauvegarde aussi, quand je suis sur le code du bouton de sauvegarde, 
    ds.WriteXml ("nom_fichier.ext") ne peut pas marcher comme ça.
    Je m'y prend peut-être mal.

    Un peut plus d'explications à se niveau là, me serait encore d'une grande aide.


    lundi 10 février 2014 15:24
  • Pour les mots de passé, l'ordre des lignes n'offres pas aune garantie.
    On ne doit pas se baser  sur cet ordre pour avoir les informations :
    Je vous propose ce code:

     TextBox3.Text = (ds.Tables("level").Select("name='SuperAdmin'")(0)("password")).ToString()

    Pour ds.WriteXml () sur un autre buttons vous devez définir ds comme membre de la classe.

    donc vous avez

     
    Public Class Form1
        Dim ds As DataSet
    .........................................
      Private Sub Button2_Click(sender As Object, e As EventArgs) Handles Button2.Click
             ds = New DataSet
    
            ds.ReadXml("d:\Temp\test.xml")
    ...................
    END SUB
    Private Sub Button3_Click(sender As Object, e As EventArgs) Handles Button2.Click
             ds.WriteXml("d:\Temp\test.xml")
    END SUB

    En plus, avant enregistrer vous devez mettre a jous les informations pour les mot de passe:

            ds.Tables("level").Select("name='SuperAdmin'")(0)("password") = TextBox3.Text

    Si on utilise le DataBinding la mise à jour  se fait automatique.
    Si on n’utilise pas le DataBinding on doit actualiser les informations à main.

    Cordialement,


    Aurel BERA, MSFT
    MSDN Community Support. LE CONTENU EST FOURNI "TEL QUEL" SANS GARANTIE D'AUCUNE SORTE, EXPLICITE OU IMPLICITE.
    S'il vous plaît n'oubliez pas de "Marquer comme réponse" les réponses qui ont résolu votre problème. C'est une voie commune pour reconnaître ceux qui vous ont aidé, et rend plus facile pour les autres visiteurs de trouver plus tard la résolution.

    lundi 10 février 2014 15:46
  • Merci beaucoup pour l'aide

    Donc, on n'utilise plus le DataGridView  ?

    Tout à l'air de marcher mais j'ai pas encore fini.

    Mais avec l'aide dejà apportée, je pense pouvoir pas mal avancer.

    Je reviendrais peut-etre.

    Merci beaucoup

    lundi 10 février 2014 16:42
  • Bonjour

    Si vous utilisez les TextBox pour les mots de passé on n’utilise plus le DataGridView.
    L'avantage du DataGridView c'est que, si vous voulez ajouter un autre "level" vous ne devez pas recompiler l'application.
    Avec les TextBox vous devez ajouter les TextBox et recompiler l'application.
    De l'autre cote, avec des TextBox c'est plus claire.

    Cordialement,


    Aurel BERA, MSFT
    MSDN Community Support. LE CONTENU EST FOURNI "TEL QUEL" SANS GARANTIE D'AUCUNE SORTE, EXPLICITE OU IMPLICITE.
    S'il vous plaît n'oubliez pas de "Marquer comme réponse" les réponses qui ont résolu votre problème. C'est une voie commune pour reconnaître ceux qui vous ont aidé, et rend plus facile pour les autres visiteurs de trouver plus tard la résolution.

    mardi 11 février 2014 07:40
  • Bonjour

    Merci pour les précisions.

    J'ai encore une petite question :

    Sur le fichier d'origine, les ligne suivante ne sont pas présente.
    <ladder_serverlimit_min>0</ladder_serverlimit_min>
    <ladder_serverlimit_max>60000</ladder_serverlimit_max>

    - Si elle sont présente, je voudrais que se soit signifier avec une case à cocher en "true" et un label qui mentionne "Ladder Point activés" (par exemple).
    - Ou la
     case à cocher en "False" et le label qui mentionne "Ladder Point inactivé" (par exemple) si elles ne sont présente.

    - Si l'utilisateur passe la case de "False" à "True", les lignes soit ajoutées (au bon endroit bien sur)

    - Si les ligne sont présente mais qu'il n'y a pas de valeur entre les balises, la case à cocher doit être en "False".

    Je suis pas sur que se soit très compréhensible  :(

    Encore merci pour toute votre aide.

    A+

    mardi 11 février 2014 11:25
  • Cela complique un peu les choses. La ligne  

      CheckBox2.DataBindings.Add(New Binding("Checked", ds.Tables(0), "nom_champ_inexistant"))

    vas élever une exception, car nom_champ_inexistant n'existe pas.

    Donc on doit verifier si nom_champ_inexistant existe sinon l'ajouter avec :

           If Not ds.Tables(0).Columns.Contains("ladder_serverlimit_min") Then
                ds.Tables(0).Columns.Add("ladder_serverlimit_min", Type.GetType("System.Boolean"))
            End If
    
    
            CheckBox2.DataBindings.Add(New Binding("Checked", ds.Tables(0), "ladder_serverlimit_min", True))
            If CheckBox2.Checked = True Then
                CheckBox2.Text = " Checked "
            Else
                CheckBox2.Text = " Not Checked "
            End If

    Ici on a mis le code pour afficher le bon text dans Checkbox. 
    Aussi on doit traiter l'évènement CheckedChanged du CheckBox2 pour changer le texte donc :
     Private Sub CheckBox2_CheckedChanged(sender As Object, e As EventArgs) Handles CheckBox2.CheckedChanged
            If CheckBox2.Checked = True Then
                CheckBox2.Text = " Checked "
            Else
                CheckBox2.Text = " Not Checked "
            End If
        End Sub

    Cordialement,

    Aurel BERA, MSFT
    MSDN Community Support. LE CONTENU EST FOURNI "TEL QUEL" SANS GARANTIE D'AUCUNE SORTE, EXPLICITE OU IMPLICITE.
    S'il vous plaît n'oubliez pas de "Marquer comme réponse" les réponses qui ont résolu votre problème. C'est une voie commune pour reconnaître ceux qui vous ont aidé, et rend plus facile pour les autres visiteurs de trouver plus tard la résolution.


    • Modifié Aurel Bera mardi 11 février 2014 12:26
    mardi 11 février 2014 12:26
  • Re

    J'ai le message suivant :

    Deux liaisons de la collection vont être liées à la même propriété.
    Nom du paramètre : binding

    J'ai testé :

    If Not ds.Tables(0).Columns.Contains("ladder_serverlimit_min") Then
                    CheckBox1.Checked = False
                    CheckBox1.Text = "Ladder Point absent"
                    End If
                    If ds.Tables(0).Columns.Contains("ladder_serverlimit_min") Then
                    CheckBox1.Checked = True
                    CheckBox1.Text = "Ladder Point Présent"
                    TBLPMini.DataBindings.Add(New Binding("Text", ds.Tables("server_options"), "ladder_serverlimit_min"))
                    TBLPMaxi.DataBindings.Add(New Binding("Text", ds.Tables("server_options"), "ladder_serverlimit_max"))
                    End If

    J'ai pas de message mais ça marche quand même pas.

    Mais comment faire pour ajouter les ligne si nécessaire ??

    mardi 11 février 2014 14:50
  • Le code proposé par vous c'est correcte sauf que vous devez ajouter une colonne dans le DataSet qui deviendra la ligne dans le fichier :

    If Not ds.Tables(0).Columns.Contains("ladder_serverlimit_min") Then
                ds
    .Tables(0).Columns.Add("ladder_serverlimit_min", Type.GetType("System.Boolean"))
           
    End If

    L'erreur apparais  parce ‘que  vous utilisez dataBinding deux fois pour le même contrôle et la même propriété :

      controle.DataBindings.Add(New Binding("Text", ...........

    Cordialement,


    Aurel BERA, MSFT
    MSDN Community Support. LE CONTENU EST FOURNI "TEL QUEL" SANS GARANTIE D'AUCUNE SORTE, EXPLICITE OU IMPLICITE.
    S'il vous plaît n'oubliez pas de "Marquer comme réponse" les réponses qui ont résolu votre problème. C'est une voie commune pour reconnaître ceux qui vous ont aidé, et rend plus facile pour les autres visiteurs de trouver plus tard la résolution.

    mardi 11 février 2014 15:05
  • Bonjour

    Malheureusement, j'y arrive pas.
    Etant débutant, c'est pas vraiment facile pour moi (sinon, je serais pas là).

    Je pense que je vais laisser cette partie de coté pour le moment.

    Mais j'ai encore une question.

    Dans mon formulaire, je récupérer des données des fichiers modifiées précédemment et je rajoute une TexBox dans lequel on saisi un login.

    Je ne charge pas le fichier d'origine, je veux simplement sauvegarder les données via un SaveFileDialog.

    Voici le code avec les données à modifier en gras :

    <?xml version="1.0" encoding="utf-8" ?>
    <settings>
      <xaseco2>
        <masteradmins>
          <!-- /ip:port in tmlogin only needed when joining server over LAN -->
          <!-- ipaddress can be specified to guard each login against       -->
          <!-- unauthorized use of admin commands from other IP addresses   --> 
          <tmlogin>tmlogin</tmlogin> <ipaddress></ipaddress>
    </masteradmins>

        <colors>
          <error>$f00$i</error>
          <welcome>$f00</welcome>
          <server>$ff0</server>
    [...]

        <panel_bg>PanelBGCard</panel_bg>
      </xaseco2>

      <tmserver>
        <login>SuperAdmin</login>
        <password>SuperAdmin</password>
        <ip>127.0.0.1</ip>
        <port>3000</port>
        <timeout>180</timeout>
      </tmserver>

    tmlogin est renseigné par l'utilisateur via une TextBox.
    Le password et le port sont récupérés dans des TextBox renseigné pour modifier les fichiers précédemment vu.

    je suppose qu'il faut utiliser le code suivant :

    Dim Save_ConfigXaseco As New SaveFileDialog
            Save_ConfigXaseco.Filter = "Fichier (*.xml)|*.xml"
            If Save_ConfigXaseco.ShowDialog() = Windows.Forms.DialogResult.OK Then
                dsConfig.WriteXml(Save_ConfigXaseco.FileName)
            End If
    Mais je suppose qu'il faut modifier se qui est en gras mais je sais pas quoi mettre exactement.

    Je sais que mes explication ne sont pas top mais je sais pas comment mieux expliquer.

    Bonne journée
    A+

    mercredi 12 février 2014 14:18
  • Save_ConfigXaseco.FileName retourne chemin et le nom vers le fichier sélectée.
    Donc c'est correct comme ça.

    Cordialement, 


    Aurel BERA, MSFT
    MSDN Community Support. LE CONTENU EST FOURNI "TEL QUEL" SANS GARANTIE D'AUCUNE SORTE, EXPLICITE OU IMPLICITE.
    S'il vous plaît n'oubliez pas de "Marquer comme réponse" les réponses qui ont résolu votre problème. C'est une voie commune pour reconnaître ceux qui vous ont aidé, et rend plus facile pour les autres visiteurs de trouver plus tard la résolution.

    mercredi 12 février 2014 14:30
  • Oui mais comment mètre  :

    le valeur de la TexBox1 du form à la place de la valeur du password du fichier xml
    le valeur de la TexBox2 du form à la place de la valeur du tmlogin du fichier xml
    le valeur de la TexBox3 du form à la place de la valeur du port du fichier xml

    du fichier sélectionné avec le SaveFileDialog.

    Ou alors mieux faut-il réécrire le fichier complet ??

    mercredi 12 février 2014 14:39
  • Je vois deux possibles solutions :
    1. Avoir un fichier modelé qui contient     <tmlogin>[tmlogin]</tmlogin> <ipaddress></ipaddress> ......, le lire en mémoire comme texte et remplacer [tmlogin] avec le contenu du TextBox. Et on doit faire la même chose pour tous les champs. Aussi, attention aux caractères non permis par XML.
    Ici vous avez un exemple sur comment lire le fichier modelé http://msdn.microsoft.com/en-us/library/system.io.file%28v=VS.80%29.aspx
    et ici un exemple pour remplacer le texte :
    http://msdn.microsoft.com/fr-fr/library/fk49wtc1(v=vs.110).aspx
     
    2. Ecrire avec WriteXML - on n'est pas sûr que c'est faisable, parce' que on ne peut pas contrôler le Output. Il fonctionne bien avec des DataSets simple mais, j'ai l'impression que votre c'est assez complique. On ne peut pas contrôler un nombre de choses (les commentaires, l'ordre des informations, etc. ...).

    Cordialement,


    Aurel BERA, MSFT
    MSDN Community Support. LE CONTENU EST FOURNI "TEL QUEL" SANS GARANTIE D'AUCUNE SORTE, EXPLICITE OU IMPLICITE.
    S'il vous plaît n'oubliez pas de "Marquer comme réponse" les réponses qui ont résolu votre problème. C'est une voie commune pour reconnaître ceux qui vous ont aidé, et rend plus facile pour les autres visiteurs de trouver plus tard la résolution.

    mercredi 12 février 2014 15:02
  • je sais que je suis pénible mais j'ai décidé de faire comme j'ai compris (a peut prés).

    donc j'ai fais avec le code suivant :

        Private Sub Button3_Click(sender As Object, e As EventArgs) Handles Button3.Click
            Dim Open_ConfigXaseco As New OpenFileDialog
    
            Open_ConfigXaseco.Filter = "Fichier (*.xml)|*.xml"
    
            Try
                If Open_ConfigXaseco.ShowDialog() = Windows.Forms.DialogResult.OK Then
                    Dim xmlFile As XmlReader
                    xmlFile = XmlReader.Create(Open_ConfigXaseco.FileName, New XmlReaderSettings())
    
                    dsConfig = New DataSet
                    dsConfig.ReadXml(xmlFile)
    
                    TextBox9.DataBindings.Add(New Binding("Text", dsConfig.Tables("masteradmins"), "tmlogin"))
                    TextBox10.DataBindings.Add(New Binding("Text", dsConfig.Tables("tmserver"), "port"))
                    TextBox11.DataBindings.Add(New Binding("Text", dsConfig.Tables("tmserver"), "password"))
    
    
    
                End If
            Catch ex As Exception
                MsgBox(ex.Message)
            End Try
        End Sub
    
        Private Sub Button5_Click(sender As Object, e As EventArgs) Handles Button5.Click
            Dim Save_ConfigXaseco As New SaveFileDialog
    
            Save_ConfigXaseco.Filter = "Fichier (*.xml)|*.xml"
    
    
            If Save_ConfigXaseco.ShowDialog() = Windows.Forms.DialogResult.OK Then
                dsConfig.WriteXml(Save_ConfigXaseco.FileName)
            End If
    
    
        End Sub

    Toutefois, quand je clique sur le bouton pour sauvegarder, j'ai une erreur : 

    Une exception non gérée du type 'System.IO.IOException' s'est produite dans mscorlib.dll

    Informations supplémentaires : Le processus ne peut pas accéder au fichier 'C:\Users\Florent\Documents\TrackMania Server\Xaseco\config.xml', car il est en cours d'utilisation par un autre processus.


    Je suppose que c'est parce-que je l'ouvre avant avec le bouton 3 (voir code).
    Comment résoudre ce problème ??

    mercredi 12 février 2014 16:38
  • Vous devez faire un xmlFile.Close() pour fermer le fichier avant de pouvoir le sur-écrire.

    Cordialement,


    Aurel BERA, MSFT
    MSDN Community Support. LE CONTENU EST FOURNI "TEL QUEL" SANS GARANTIE D'AUCUNE SORTE, EXPLICITE OU IMPLICITE.
    S'il vous plaît n'oubliez pas de "Marquer comme réponse" les réponses qui ont résolu votre problème. C'est une voie commune pour reconnaître ceux qui vous ont aidé, et rend plus facile pour les autres visiteurs de trouver plus tard la résolution.

    jeudi 13 février 2014 07:56
  • Merci.

    j'ai ajouté xmlFile.Close() sur le bouton d'ouverture du fichier XML juste aprés : 

    TextBox9.DataBindings.Add(New Binding("Text", dsConfig.Tables("masteradmins"), "tmlogin"))
    TextBox10.DataBindings.Add(New Binding("Text", dsConfig.Tables("tmserver"), "port"))
    TextBox11.DataBindings.Add(New Binding("Text", dsConfig.Tables("tmserver"), "password"))
    
    xmlFile.Close()
    
    Et de suite, c'est mieux.

    Toutefois, il ne me modifie pas les données des TextBox 10 et 11.

    TextBox10.DataBindings.Add(New Binding("Text", dsConfig.Tables("tmserver"), "port"))
    TextBox11.DataBindings.Add(New Binding("Text", dsConfig.Tables("tmserver"), "password"))

    Lorsque j'ouvre le fichier, les données sont bien lues mais quand je sauvegarde, elles ne sont pas modifier dans le fichier XML. Seulement les données de la TextBox 9 sont modifiées dans le XML.

    jeudi 13 février 2014 08:37
  • Toujours le format XML n'est pas clair pour moi.
    Je dirais de ne pas utiliser DataBinding dans ce ca mais plutôt faire comme dans l'exemple :
    TextBox3.Text =   ds.Tables("tmserver").Select("name='SuperAdmin'")(0)("password")
    et avant écrire, l'inverse :
      ds.Tables("tmserver").Select("name='SuperAdmin'")(0)("password")  = TextBox3.Text
    Pareil pour le port.

    Cordialement,


    Aurel BERA, MSFT
    MSDN Community Support. LE CONTENU EST FOURNI "TEL QUEL" SANS GARANTIE D'AUCUNE SORTE, EXPLICITE OU IMPLICITE.
    S'il vous plaît n'oubliez pas de "Marquer comme réponse" les réponses qui ont résolu votre problème. C'est une voie commune pour reconnaître ceux qui vous ont aidé, et rend plus facile pour les autres visiteurs de trouver plus tard la résolution.

    jeudi 13 février 2014 09:23
  • Malheureusement j'ai un message à l'ouverture :
    La référence d'objet n'est pas définie à une instance d'un objet.

    J'ai du mal faire je suppose !!

    Voici le fichier XLM complet (voir les données a modifiées en gras) :

    <?xml version="1.0" encoding="utf-8" ?>
    <settings>
      <xaseco2>
        <masteradmins>
          <!-- /ip:port in tmlogin only needed when joining server over LAN -->
          <!-- ipaddress can be specified to guard each login against       -->
          <!-- unauthorized use of admin commands from other IP addresses   --> 
          <tmlogin>LoginTM</tmlogin> <ipaddress></ipaddress>
    	</masteradmins>
    
        <colors>
          <error>$f00$i</error>
          <welcome>$f00</welcome>
          <server>$ff0</server>
          <highlite>$fff</highlite>
          <timelite>$bbb</timelite>
          <record>$0f3</record>
          <emotic>$fa0</emotic>
          <music>$d80</music>
          <message>$39f</message>
          <rank>$ff3</rank>
          <vote>$f8f</vote>
          <karma>$ff0</karma>
          <donate>$f0f</donate>
          <admin>$ff0</admin>
          <black>$000</black>
          <grey>$888</grey>
          <login>$00f</login>
          <logina>$0c0</logina>
          <nick>$f00</nick>
          <interact>$ff0$i</interact>
          <dedimsg>$28b</dedimsg>
          <dedirec>$0b3</dedirec>
        </colors>
    
        <messages>
          <!-- init messages -->
          <startup>{#server}*** XASECO2 {#highlite}v{1}{#server} running on {#highlite}{2}{#server}:{#highlite}{3}{#server} ***</startup>
          <welcome>{#welcome}Welcome {#highlite}{1}{#welcome} to {#highlite}{2}$z$s{br}{#welcome}This server uses {#highlite}XASECO2 v{3}{#welcome} to manage your records.</welcome>
          <warning>$s{#welcome}This is an administrative warning.{br}{br}$gWhatever you wrote is against our server's{br}policy. Not respecting other players, or{br}using offensive language might result in a{br}{#welcome}kick, or ban {#message}the next time.{br}{br}$gThe server administrators.</warning>
    
          <!-- record messages -->
          <record_current>{#server}>> {#message}Current record on {#highlite}{1}{#message} is {#highlite}{2}{#message} by {#highlite}{3}</record_current>
          <record_none>{#server}>> {#message}Currently no record on {#highlite}{1}{#message} ...</record_none>
          <record_error>{#server}>> {#error}Could not get records from database... No records this round!</record_error>
    
          <!-- ranking messages -->
          <ranking>{#server}>> {#message}Local Record rankings on {#highlite}{1}{#message} {2} this round:</ranking>
          <ranking_range>{#server}>> {#message}Local Record rankings on {#highlite}{1}{#message} {2} this round (range {#highlite}{3}{#message}):</ranking_range>
          <ranking_new>{#server}>> {#message}Local Record rankings on {#highlite}{1}{#message} {2} this round ({#highlite}{3}{#message} new):</ranking_new>
          <ranking_nonew>{#server}>> {#message}Local Record rankings on {#highlite}{1}{#message} {2} this round: none new so far</ranking_nonew>
          <ranking_none>{#server}>> {#message}Local Record rankings on {#highlite}{1}{#message} {2} this round: no records!</ranking_none>
    
          <!-- record misc. messages -->
          <ranking_record_new_on>{#rank}{1}{#message}.$i{#highlite}{2}{#message}[{#highlite}{3}{#message}]$i, </ranking_record_new_on>
          <ranking_record_new>{#rank}{1}{#message}.{#highlite}{2}{#message}[{#highlite}{3}{#message}], </ranking_record_new>
          <ranking_record_on>{#rank}{1}{#message}.$i{#timelite}{2}{#message}[{#timelite}{3}{#message}]$i, </ranking_record_on>
          <ranking_record>{#rank}{1}{#message}.{#timelite}{2}{#message}[{#timelite}{3}{#message}], </ranking_record>
          <ranking_record2>{#rank}{1}{#message}.{#timelite}{2}{#message}, </ranking_record2>
    
          <!-- record relation messages -->
          <first_record>{#server}> {#record}The first Local record is: </first_record>
          <last_record>{#server}> {#record}The last Local record is: </last_record>
          <diff_record>{#server}> {#record}Difference between {1}{#record} and {2}{#record} is: {#highlite}{3}</diff_record>
          <summary>{#server}> {#highlite}{1} $z$s{#record}has {#highlite}{2}{#record} Local record{3}, the top {4} being: </summary>
          <sum_entry>{#highlite}{1} {#record}rec{2} #{#rank}{3}{#record}, </sum_entry>
    
          <!-- win messages -->
          <wins>{#server}> {#record}You have already won {#highlite}{1}{#record} race{2}</wins>
          <win_new>{#server}> {#record}Congratulations, you won your {#highlite}{1}{#record}. race!</win_new>
          <win_multi>{#server}>> {#record}Congratulations, {#highlite}{1}{#record} won his/her {#highlite}{2}{#record}. race!</win_multi>
    
          <!-- muting messages -->
          <mute>{#server}> Player {#highlite}{1}$z$s{#server} is muted!</mute>
          <unmute>{#server}> Player {#highlite}{1}$z$s{#server} is unmuted!</unmute>
          <muted>{#server}> {#highlite}{1}{#error} disabled because you are on the global mute list!</muted>
    
          <!-- donate/pay messages -->
          <donation>{#donate} Donate {#highlite}{1}{#donate} planets to {#highlite}{2}$z</donation>
          <thanks_all>{#server}>> {#highlite}{1}$z$s{#donate} received a donation of {#highlite}{2}{#donate} planets from {#highlite}{3}$z$s{#donate}.  Thank You!</thanks_all>
          <thanks_you>{#server}> {#donate}You made a donation of {#highlite}{1}{#donate} planets.  Thank You!</thanks_you>
          <donate_minimum>{#server}> {#error}Minimum donation amount is {#highlite}$i {1}{#error} planets!</donate_minimum>
          <donate_help>{#server}> {#error}Use {#highlite}$i /donate &lt;number&gt;{#error} to donate planets to the server</donate_help>
          <payment>{#donate} Send {#highlite}{1}{#donate} planets to {#highlite}{2}$z</payment>
          <pay_insuff>{#server}> {#error}Insufficient server planets: {#highlite}$i {1}{#error}!</pay_insuff>
          <pay_server>{#server}> {#error}Cannot pay this server itself!</pay_server>
          <pay_confirm>{#server}> {#donate}Payment of {#highlite}{1}{#donate} planets to {#highlite}{2}{#donate} confirmed!  Remaining planets: {#highlite}{3}</pay_confirm>
          <pay_cancel>{#server}> {#donate}Payment to {#highlite}{1}{#donate} cancelled!</pay_cancel>
          <pay_help>{#server}> {#error}Use {#highlite}$i /admin pay &lt;login&gt; $m&lt;number&gt;{#error} to send server planets to a login</pay_help>
    
          <!-- playtime/map messages -->
          <playtime>{#server}> Current map {#highlite}{1}{#server} has been played for {#highlite}{2}</playtime>
          <playtime_finish>{#server}>> Current map {#highlite}{1}{#server} finished after {#highlite}{2}</playtime_finish>
          <playtime_replay> {#server}({#highlite}{1}{#server} replay{2}, total {#highlite}{3}{#server})</playtime_replay>
          <map>{#server}> Current map {#highlite}{1} {#server}by {#highlite}{2}  {#server}Author: {#highlite}{3} {#server}Gold: {#highlite}{4} {#server}Silver: {#highlite}{5} {#server}Bronze: {#highlite}{6} {#server}Cost: {#highlite}{7}</map>
          <current_map>{#server}>> Current map {#highlite}{1} {#server}by {#highlite}{2}  {#server}Author: {#highlite}{3}</current_map>
    
          <!-- rounds points messages -->
          <rpoints_named>{#server}> {1}Custom points system set to {#highlite}{2}{3}: {#highlite}{4},...</rpoints_named>
          <rpoints_nameless>{#server}> {1}Custom points system set to: {#highlite}{2},...</rpoints_nameless>
          <no_rpoints>{#server}> {1}No custom Rounds points system defined!</no_rpoints>
    
          <!-- relay messages -->
          <no_relays>{#server}> {#error}No relay servers connected</no_relays>
          <relaymaster>{#server}> This server relays master server: {#highlite}{1}{#server} ({#highlite}{2}{#server})</relaymaster>
          <notonrelay>{#server}> {#error}Command unavailable on relay server</notonrelay>
    
          <!-- uptodate messages -->
          <uptodate_ok>{#server}>> {#message}This XASECO2 version {#highlite}{1}{#message} is up to date</uptodate_ok>
          <uptodate_new>{#server}>> {#message}New XASECO2 version {#highlite}{1}{#message} available from {#highlite}{2}</uptodate_new>
    
          <!-- connection messages -->
          <banip_dialog>{#welcome}Your IP was banned from this server.$z</banip_dialog>
          <banip_error>{#welcome}Could not connect:{br}{br}Your IP was banned from this server!</banip_error>
          <client_dialog>{#welcome}Obsolete client version, please $l[http://www.tm-forum.com/viewtopic.php?p=139752#p139752]upgrade$l.$z</client_dialog>
          <client_error>{#welcome}Obsolete client version!{br}Please upgrade to the $l[http://www.tm-forum.com/viewtopic.php?p=139752#p139752]latest version$l.</client_error>
          <connect_dialog>{#welcome}Connection problem, please retry.$z</connect_dialog>
          <connect_error>{#welcome}$sThis is an administrative notice.$z{br}{br}XASECO2 encountered a very rare player connection{br}problem. Please re-join the server to correct it.{br}Apologies for the inconvenience.{br}{br}$sThe server administrators.</connect_error>
    
          <!-- idlekick messages -->
          <idlekick_play>{#server}>> IdleKick player {#highlite}{1}$z$s{#server} after {#highlite}{2}{#server} map{3}!</idlekick_play>
          <idlespec_play>{#server}>> IdleSpec player {#highlite}{1}$z$s{#server} after {#highlite}{2}{#server} map{3}</idlespec_play>
          <idlekick_spec>{#server}>> IdleKick spectator {#highlite}{1}$z$s{#server} after {#highlite}{2}{#server} map{3}!</idlekick_spec>
    
          <!-- miscellaneous messages -->
          <song>{#server}> Map {#highlite}{1} {#server}plays song: {#highlite}{2}</song>
          <mod>{#server}> Map {#highlite}{1} {#server}uses mod: {#highlite}{2} {#server}({#highlite}{3}{#server})</mod>
          <planets>{#server}> Server {#highlite}{1}$z$s {#server}owns {#highlite}{2} {#server}planets!</planets>
          <time>{#server}> {#interact}Current Server Time: {#highlite}$i {1}{#interact} on {#highlite}$i {2}</time>
          <mxrec>{#server}>> {#record}MX World Record: {#highlite}{1}{#record} by {#highlite}{2}</mxrec>
          <round>$n{#message}R{#highlite}{1}{#message}> </round>
          <no_cpsspec>{#server}> {#highlite}/cpsspec{#server} is not currently enabled on this server.</no_cpsspec>
          <no_admin>{#server}> {#error}You have to be in admin list to do that!</no_admin>
          <help_explanation>{#server}> Press the {#highlite}C{#server} key to see the whole list, and use {#highlite}/helpall{#server} for details</help_explanation>
        </messages>
    
        <welcome_msg_window>False</welcome_msg_window>
        <lock_password></lock_password>
        <log_all_chat>False</log_all_chat>
        <chatpmlog_times>True</chatpmlog_times>
        <cheater_action>0</cheater_action>
        <script_timeout>60</script_timeout>
    
        <show_min_recs>8</show_min_recs>
        <!-- 2 = full report, 1 = only map record, 0 = none -->
        <!-- add 4 to show the report in the message window -->
        <!-- instead of the main chat window                -->
        <show_recs_before>2</show_recs_before>
        <!-- 2 = full report, 1 = only top-5, 0 = none      -->
        <!-- add 4 to show the report in the message window -->
        <!-- instead of the main chat window                -->
        <show_recs_after>2</show_recs_after>
        <show_recs_range>True</show_recs_range>
        <!-- 2 = in message window, 1 = in chat, 0 = none   -->
        <show_mxrec>1</show_mxrec>
        <!-- 2 = in message window, 1 = in chat, 0 = none   -->
        <show_playtime>1</show_playtime>
        <!-- 2 = in message window, 1 = in chat, 0 = none   -->
        <show_curmap>0</show_curmap>
    
        <default_maplist>maplist.txt</default_maplist>
        <writemaplist_random>True</writemaplist_random>
        <help_explanation>False</help_explanation>
        <lists_colornicks>True</lists_colornicks>
        <lists_colormaps>True</lists_colormaps>
        <topclans_minplayers>2</topclans_minplayers>
        <global_win_multiple>50</global_win_multiple>
        <display_checkpoints>True</display_checkpoints>
        <enable_cpsspec>False</enable_cpsspec>
        <auto_enable_cps>True</auto_enable_cps>
        <auto_enable_dedicps>False</auto_enable_dedicps>
        <auto_admin_addip>True</auto_admin_addip>
        <adminops_file>adminops.xml</adminops_file>
        <bannedips_file>bannedips.xml</bannedips_file>
        <blacklist_file>blacklist.txt</blacklist_file>
        <guestlist_file>guestlist.txt</guestlist_file>
        <maphist_file>maphist.txt</maphist_file>
    
        <admin_client_version></admin_client_version>
        <player_client_version></player_client_version>
        <default_rpoints></default_rpoints>
        <afk_force_spec>True</afk_force_spec>
        <clickable_lists>True</clickable_lists>
        <show_rec_logins>True</show_rec_logins>
    
        <!-- True = in message window, False = in chat       -->
        <recs_in_window>False</recs_in_window>
        <!-- True = in message window, False = in chat       -->
        <rounds_in_window>False</rounds_in_window>
        <!-- timeout of the message window in seconds        -->
        <window_timeout>6</window_timeout>
        <!-- True = display individual stats panels for each -->
        <!-- player during the scoreboard & disable the rank -->
        <!-- chat messages, False = show only rank messages  -->
        <sb_stats_panels>True</sb_stats_panels>
    
        <!-- default windows style: Card if empty, or a       -->
        <!-- filename that should be at styles/<filename>.xml -->
        <window_style>Card</window_style>
        <!-- default panels:  empty for no panel, otherwise a -->
        <!-- filename that should be at panels/<filename>.xml -->
        <admin_panel>AdminRightCorner</admin_panel>
        <donate_panel>DonateBelowCPList</donate_panel>
        <records_panel>RecordsRightCorner</records_panel>
        <vote_panel>VoteBottomCenter</vote_panel>
        <!-- default panel background: Card if empty, or a    -->
        <!-- filename that should be at panels/<filename>.xml -->
        <panel_bg>PanelBGCard</panel_bg>
      </xaseco2>
    
      <tmserver>
        <login>SuperAdmin</login>
        <password>MotdePasse</password>
        <ip>127.0.0.1</ip>
        <port>1234</port>
        <timeout>180</timeout>
      </tmserver>
    </settings>



    • Modifié FCL31 jeudi 13 février 2014 10:04
    jeudi 13 février 2014 10:01
  • Dans ce cas vous devez utilizer

       ds.Tables("tmserver").Select("login='SuperAdmin'")(0)("password")

    Cordialement,

    Aurel BERA, MSFT
    MSDN Community Support. LE CONTENU EST FOURNI "TEL QUEL" SANS GARANTIE D'AUCUNE SORTE, EXPLICITE OU IMPLICITE.
    S'il vous plaît n'oubliez pas de "Marquer comme réponse" les réponses qui ont résolu votre problème. C'est une voie commune pour reconnaître ceux qui vous ont aidé, et rend plus facile pour les autres visiteurs de trouver plus tard la résolution.

    jeudi 13 février 2014 10:11
  • J'avais déjà essayé en mettent et j'ai le même message à l'ouverture :
    A l'ouverture : 

                    TextBox10.Text = (ds.Tables("tmserver").Select("login='SuperAdmin'")(0)("port")).ToString()
                    TextBox11.Text = (ds.Tables("tmserver").Select("login='SuperAdmin'")(0)("password")).ToString()

    Et à la sauvegarde :

            dsConfig.Tables("tmserver").Select("login='SuperAdmin'")(0)("password") = TextBox11.Text
            dsConfig.Tables("tmserver").Select("login='SuperAdmin'")(0)("port") = TextBox10.Text

    J'ai le même message !

    Entre l'ouverture et la sauvegarde, je change les données des TexBox 10 et 11

    jeudi 13 février 2014 10:17
  • A quelle ligne vous avez l'erreur?

    Cordialement,


    Aurel BERA, MSFT
    MSDN Community Support. LE CONTENU EST FOURNI "TEL QUEL" SANS GARANTIE D'AUCUNE SORTE, EXPLICITE OU IMPLICITE.
    S'il vous plaît n'oubliez pas de "Marquer comme réponse" les réponses qui ont résolu votre problème. C'est une voie commune pour reconnaître ceux qui vous ont aidé, et rend plus facile pour les autres visiteurs de trouver plus tard la résolution.

    jeudi 13 février 2014 10:18
  • J'ai juste le message sans bugage.

    J'ai le message dans un fenêtre, je fais "OK", le fenêtre se ferme et je me retrouve sur le formulaire et je peut naviguer comme je veux dans l'appli.


    jeudi 13 février 2014 10:23
  • A quelle ligne vous avez l'erreur?
    Cela indique une erreur dans un Try/Catch -  le plus probable dans l'ouverture du votre fichier. 
    Donc ne pas utiliser DataBinding pour TextBox10 et TextBox11

    Cordialement,


    Aurel BERA, MSFT
    MSDN Community Support. LE CONTENU EST FOURNI "TEL QUEL" SANS GARANTIE D'AUCUNE SORTE, EXPLICITE OU IMPLICITE.
    S'il vous plaît n'oubliez pas de "Marquer comme réponse" les réponses qui ont résolu votre problème. C'est une voie commune pour reconnaître ceux qui vous ont aidé, et rend plus facile pour les autres visiteurs de trouver plus tard la résolution.

    jeudi 13 février 2014 10:28
  • J'ai le message lors du clic sur le bouton pour ouvrir mon fichier.
    Voici le code du bouton :
        Private Sub Button3_Click(sender As Object, e As EventArgs) Handles Button3.Click
            Dim Open_ConfigXaseco As New OpenFileDialog
    
            Open_ConfigXaseco.Filter = "Fichier (*.xml)|*.xml"
    
            Try
                If Open_ConfigXaseco.ShowDialog() = Windows.Forms.DialogResult.OK Then
                    Dim xmlFile As XmlReader
                    xmlFile = XmlReader.Create(Open_ConfigXaseco.FileName, New XmlReaderSettings())
    
                    dsConfig = New DataSet
                    dsConfig.ReadXml(xmlFile)
                    
                    TextBox10.Text = (ds.Tables("tmserver").Select("login='SuperAdmin'")(0)("port")).ToString()
                    TextBox11.Text = (ds.Tables("tmserver").Select("login='SuperAdmin'")(0)("password")).ToString()
    
                    xmlFile.Close()
    
                End If
            Catch ex As Exception
                MsgBox(ex.Message)
            End Try
        End Sub

    jeudi 13 février 2014 10:31
  • Il ne trouve pas soit la table ds.Tables("tmserver") soit une ligne avec login='SuperAdmin'. Pouvez-vous  utiliser le debugger pour inspecter ds.Tables("tmserver")?

    Cordialement,


    Aurel BERA, MSFT
    MSDN Community Support. LE CONTENU EST FOURNI "TEL QUEL" SANS GARANTIE D'AUCUNE SORTE, EXPLICITE OU IMPLICITE.
    S'il vous plaît n'oubliez pas de "Marquer comme réponse" les réponses qui ont résolu votre problème. C'est une voie commune pour reconnaître ceux qui vous ont aidé, et rend plus facile pour les autres visiteurs de trouver plus tard la résolution.

    jeudi 13 février 2014 10:44
  • Désolé, c'est moi qui ai fait une erreur :
    J'ai mis ds.tables
    alors que j'aurais du mettre dsConfig.tables
    jeudi 13 février 2014 10:50
  • Vous travaillez toujours sur ce sujet ou on peut considérer le problème résolu?

    Cordialement,


    Aurel BERA, MSFT
    MSDN Community Support. LE CONTENU EST FOURNI "TEL QUEL" SANS GARANTIE D'AUCUNE SORTE, EXPLICITE OU IMPLICITE.
    S'il vous plaît n'oubliez pas de "Marquer comme réponse" les réponses qui ont résolu votre problème. C'est une voie commune pour reconnaître ceux qui vous ont aidé, et rend plus facile pour les autres visiteurs de trouver plus tard la résolution.

    jeudi 13 février 2014 12:41
  • Je suis toujours dessus.

    Même si pour le moment, tout à l'air de fonctionner, je ne le marque pas résolu tant que j'ai pas essayé le setup et l'utilisation de l'appli sur un autre PC que le miens.

    Dés que j'aurais testé et que tout est OK, je mettrais le problème résolu.

    Bonne journée
    A+

    jeudi 13 février 2014 12:46