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

C# Discussion :

C#.NET_DataGrid, Winform et XMl


Sujet :

C#

  1. #41
    Membre à l'essai
    Homme Profil pro
    Étudiant
    Inscrit en
    Mars 2015
    Messages
    46
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Yvelines (Île de France)

    Informations professionnelles :
    Activité : Étudiant
    Secteur : Aéronautique - Marine - Espace - Armement

    Informations forums :
    Inscription : Mars 2015
    Messages : 46
    Points : 13
    Points
    13
    Par défaut
    J'ai modifié les "nodes" comme tu me l'as conseillé Nexaelia et actuellement il ne me reste plus qu'une seule erreur, au niveau du "Jeton" à l'instruction start=false;
    Lorsque je la met en commentaire, cinq nouvelles erreurs apparaissent, parbleu!!

  2. #42
    Membre du Club
    Homme Profil pro
    Technicien Cyber-Sécurité
    Inscrit en
    Juillet 2015
    Messages
    38
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Hauts de Seine (Île de France)

    Informations professionnelles :
    Activité : Technicien Cyber-Sécurité
    Secteur : Aéronautique - Marine - Espace - Armement

    Informations forums :
    Inscription : Juillet 2015
    Messages : 38
    Points : 55
    Points
    55
    Par défaut C#.NET etc...
    Bonjour. Alors, avant de continuer sur la dernière erreur que tu as eu qui se transforme en 5 erreur, je vais reprendre ton message d'avant.
    Sur ton XML, ce qu'on appelle "nœud" en langage commun est simplement une ligne.
    Je pense que tu as du voir en développement ou programmation la notion de parents/enfants ...

    SI je reprends ton XML, la première erreur que je vois est simple: bien que tu ai modifié comme je t'ai demandé, le nom des nœuds enfant (de second degré pour être pus précis),
    tu as aussi mis le même nom pour le nœuds enfant (de premier degré qui est le parent des nœuds (lignes) contenant tes informations).
    Ça peut arriver, mais dans ton cas tu n'aura pas grand chose car il lira le premier bloc "Frere" et pas ce qu'il y a à l'intérieur.
    Modification:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    <?xml version="1.0" encoding="utf-8" ?>
    <Information xmlns: xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns: xsd="http://www.w3.org/2001/XMLSchema">
    <TypeFrere>
    <Frere> actif="True" nom="Bim" prenom="Pierre" age="20" </Frere>
    <Frere> actif="True" nom="Bam" prenom="Paul" age="25" </Frere>
    <Frere> actif="True" nom="Boom" prenom="Jacques" age="30" </Frere>
    </TypeFrere>
    </Information>
    -Pour les directives using c’est OK.
    -Dans le forum, essaie d'utiliser les boutons pour indenter ton code, je t'avouerai que c'est compliqué de suivre les accolades.
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    private void button1_Click(object sender, EventArgs e)
    {
    MessageBox.Show("Entrer votre nom");
    String i = "Je suis Frank";
    this.champtexte.Text = i.ToString();
    }
    Celui là essaie de le déplacer (ctrl+x) après ton form1_load historie d'avoir plus de clarté et de pouvoir suivre le déroulement des événements.

    -Tu peux supprimer ça, la seconde ligne est assez expressive:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    //xmlDoc.Load(@"C:\visual studio 2010\Projects\WindowsFormsApplication6\WindowsFormsApplication6\bin\Debug\XMLFile2.xml");
    -Ça aussi poubelle (ou alors si tu veux garder une trace de tes actions, tu peux créer une classe non applicative qui te servira de tutoriel).
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    //itemNodes = xmlDoc.SelectNodes("//Information/Frere/Second");
    //itemNodes = xmlDoc.SelectNodes("//Information/Frere/Dernier");
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    //Ce qui veut dire: on se déplace donc en principe sur le premier nœud, et dans ce premier nœud,
    //On sélectionne l'attribut du nœud, qui est le nom, et il le lit.
    //Donc arrivé à ta première ligne, tu te déplace d'un cran, le pointeur voit qu'il y a un attribut qu'il s'appelle nom="xy".
    //Le programme lit nom => xy
    Celui du dessus à simplifier par : // lecture du paramètre nom dans le nœud.

    Ceci, tu peux le garder pour toi ou le raccourcir :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    // Donc 1 ou 0 si on regarde en binaire, que tu mette : ? true : false ou l'inverse cela n'a pas d'incidence. 
    //Parcontre => =="true" veut dire que par défaut la valeur est vrai donc cochée.
    //Pour les items en caractères et numéral, pas besoin de les définir, le tableau s'en charge automatiquement.
    //En effet c'est du text et le .Net Frameworks est plutôt sympa pour ça.

    Et ça aussi:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    //actif est déjà paramétré au dessus, le reste est a paramétrer en valeur.
    //Tu peux ensuite en rajouter autant que tu veux en suivant ce schéma.
    //Le mien contient 14 colonnes avec divers types de paramétrage.
    Tu as bien créé ce bouton sur le concepteur de vue? si c'est pas le cas, tu le créé et tu coupe et colle le code qu'il y a dans
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    private void button1_Click_1(object sender, EventArgs e)
    dans la fonction privée de ton bouton quitter.

    L'erreur se trouve ici !
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    XmlNode ageNode = itemNode.Attributes["Age"];
    
    } // Enlève-moi cette accolade fermante, elle clos ta boucle prématurément donc le start n'est pas reconnu!
    
    if (actifNode != null)
    {
    Une accolade de trop ici aussi :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    start = false;
    }
    }//celle-ci
    Et il me semble que ça devrait enlever des erreurs. arrivé là ce n'est pas fini mais c'est une méthode à comprendre, c'était le plus chiant je pense.

  3. #43
    Membre à l'essai
    Homme Profil pro
    Étudiant
    Inscrit en
    Mars 2015
    Messages
    46
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Yvelines (Île de France)

    Informations professionnelles :
    Activité : Étudiant
    Secteur : Aéronautique - Marine - Espace - Armement

    Informations forums :
    Inscription : Mars 2015
    Messages : 46
    Points : 13
    Points
    13
    Par défaut
    Merci Nexaelia, je n'ai plus que trois erreurs:

    if (actifNode != null)
    {
    //bool pour les items à case-coche
    bool actif = (actifNode.Value == "true") ? true : false;
    dataGridView1.Rows.Add(actif, nomNode.Value, prenomNode.Value, ageNode.Value);
    }

    Il est écrit dans la liste des erreurs que "Le nom actifNode n'existe pas dans le contexte actuel"....

  4. #44
    Membre du Club
    Homme Profil pro
    Technicien Cyber-Sécurité
    Inscrit en
    Juillet 2015
    Messages
    38
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Hauts de Seine (Île de France)

    Informations professionnelles :
    Activité : Technicien Cyber-Sécurité
    Secteur : Aéronautique - Marine - Espace - Armement

    Informations forums :
    Inscription : Juillet 2015
    Messages : 38
    Points : 55
    Points
    55
    Par défaut C#.NET etc...
    Tu as bien noté ceci après l'accolade ouvrante du foreach?
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    XmlNode actifNode = itemNode.Attributes["actif"];
    sans changer de police d'écriture et écris de la même manière dans le xml?

    Je viens de regarder, et tu l'as pas fait, et si tu regardes dans des messages d'avant je te l'ai noté une première fois que tu l'avais oublié;

  5. #45
    Membre du Club
    Homme Profil pro
    Technicien Cyber-Sécurité
    Inscrit en
    Juillet 2015
    Messages
    38
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Hauts de Seine (Île de France)

    Informations professionnelles :
    Activité : Technicien Cyber-Sécurité
    Secteur : Aéronautique - Marine - Espace - Armement

    Informations forums :
    Inscription : Juillet 2015
    Messages : 38
    Points : 55
    Points
    55
    Par défaut C#.NET etc...
    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
    foreach (XmlNode itemNode in itemNodes)
     {
        XmlNode actifNode = itemNode.Attributes["actif"];
        XmlNode nomNode = itemNode.Attributes["nom"];
        XmlNode prenomNode = intemNode.Attributes ["prenom"];
        XmlNode ageNode = itemNode.Attributes ["age"];
        if (actifNode != null)
         {
          //bool pour les items à case-coche
           bool actif = (actifNode.Value == "true") ? true : false;
           dataGridView1.Rows.Add(actif, nomNode.Value, prenomNode.Value, ageNode.Value);}
         }
          //En passant le start à faux, ou évite un éventuel bouclage accidentel.
       start = false;
     }

  6. #46
    Membre à l'essai
    Homme Profil pro
    Étudiant
    Inscrit en
    Mars 2015
    Messages
    46
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Yvelines (Île de France)

    Informations professionnelles :
    Activité : Étudiant
    Secteur : Aéronautique - Marine - Espace - Armement

    Informations forums :
    Inscription : Mars 2015
    Messages : 46
    Points : 13
    Points
    13
    Par défaut Un Merci sans fin!
    Ah merci Nexaelia, le code se compile enfin!
    J'ai la dataGridView qui s'affiche et je peux même rentrer les informations.
    Tu m'as tant appris et je crois que je vais relire gentiment tout le code et le refaire pour le saisir.
    Je t'envoie ce bout de code...

    while(true)
    {
    const string message ="Merci";
    const string caption = "Merci";
    MessageBox.Show(message, caption, MessageBoxButton.Ok);
    }

    Normalement tu devrais pouvoir le compiler dans ton private void Form1_Load()

  7. #47
    Membre du Club
    Homme Profil pro
    Technicien Cyber-Sécurité
    Inscrit en
    Juillet 2015
    Messages
    38
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Hauts de Seine (Île de France)

    Informations professionnelles :
    Activité : Technicien Cyber-Sécurité
    Secteur : Aéronautique - Marine - Espace - Armement

    Informations forums :
    Inscription : Juillet 2015
    Messages : 38
    Points : 55
    Points
    55
    Par défaut C#.NET etc...
    Ce n'est pas fini. Il y a encore une fonction ou deux à ajouter pour que tu puisse sauvegarder en temps réel lors de la modification.
    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
    private void dataGridView1_CellValueChanged(object sender, DataGridViewCellEventArgs e)
            {
                //Actif
                if (!start)
                {
                    int iC = e.ColumnIndex; // on compte les colonnes
                    int iR = e.RowIndex;     // on compte les lignes
                    //Comme une bataille navale
                    XmlNode itemNode = itemNodes.Item(iR);
                    XmlNode nomNode = itemNode.Attributes[iC];
                    MessageBox.Show("Modification : " + dataGridView1.Rows[iR].Cells[iC].Value + ", " + iC + ", " + iR); // à tel colonne de tel ligne, une modification est apportée
                    //On compte avec le compteur à iC + "1" car on déplace le curseur de deux colonnes pour modifier la valeur voulue à partir de l'origine.
                    itemNode.Attributes[iC + 1].Value = dataGridView1.Rows[iR].Cells[iC].Value.ToString(); // l'ancienne valeur est remplacé par la nouvelle
                    xmlDoc.Save("XMLFile3.xml");  //on sauvegarde à la saisie.
                }
    Si Actif est le premier paramètre dans ton XML tu fais +1 sur le iC, si il est le second c'est +2 ainsi de suite.
    Ici on utilise un pointeur avec coordonnées. C'est un peu compliqué à déchiffrer, si tu y comprends quelque chose c'est bien, si ce n'est pas le cas, tu peux me demander.
    Mais tu verras vite qu'avec cette formule tu peux seulement modifier une colonne, or, il me semble que tu veux avoir la possibilité de modifier toutes les colonnes.
    A partir de là, tu a le code pour un "switch case" mais c’est très restrictif, donc pour te mettre sur la voie, il faut que tu fasse un bouclage.

  8. #48
    Membre du Club
    Homme Profil pro
    Technicien Cyber-Sécurité
    Inscrit en
    Juillet 2015
    Messages
    38
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Hauts de Seine (Île de France)

    Informations professionnelles :
    Activité : Technicien Cyber-Sécurité
    Secteur : Aéronautique - Marine - Espace - Armement

    Informations forums :
    Inscription : Juillet 2015
    Messages : 38
    Points : 55
    Points
    55
    Par défaut C#.NET etc...
    Précision sur la sauvegarde, ce que tu modifie est sauvegardé dans un fichier tierce, je n'ai pas vraiment la solution pour écraser le fichier de sortie sur l'ancien avec le même nom, avec la méthode XmlDocument.
    Sur une autre méthode, cela fonctionne très bien, mais certaines méthodes ont leurs propriétés spécifiques. Il doit être possible de créer un ".ini" qui à l’exécution du programme serai en mesure de remplacer l'ancien fichier par le nouveau.
    De plus bonne nouvelle, le nouveau fichier XML s'enregistre dans le \bin\debug.

    Autre chose. Si jamais tu souhaite occasionnellement déplacer le nouveau fichier vers plusieurs ou un hôte distant. Tu peux le faire sans quitter l'application etc.. et le chercher.
    Tu peux aussi ouvrir n'importe quel autre fichier XML une fois le nom configuré grâce au browser.
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    private void opensearch_Click(object sender, EventArgs e)
            {
                if (openFileDialog1.ShowDialog() == DialogResult.OK)
                {
                    System.IO.StreamReader sr = new
                    System.IO.StreamReader(openFileDialog1.FileName);
                    MessageBox.Show(" " + sr.ReadToEnd());
                    sr.Close();
                }
            }
    Cette fonction est générique, donc elle fonctionne toujours. il ne reste plus qu'a lui créer un bouton avec le même nom.
    Enfin imaginons, qu'en cours de route, tu souhaite visualiser un autre fichier XML. Tu l'as pris avec le browser et positionné dans le bon chemin. Sauf que tu est actuellement sur le premier.
    Afin de de voir le second il faut court-circuiter le bouclage de l'application avec un restart (avec le browser par exemple ou un bouton tierce):

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
       DialogResult dialogResult = MessageBox.Show("Souhaitez-vous redémarrer l'application?", "Attention", MessageBoxButtons.YesNo);
                 if (dialogResult == DialogResult.Yes)
                 Application.Restart();

  9. #49
    Membre du Club
    Homme Profil pro
    Technicien Cyber-Sécurité
    Inscrit en
    Juillet 2015
    Messages
    38
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Hauts de Seine (Île de France)

    Informations professionnelles :
    Activité : Technicien Cyber-Sécurité
    Secteur : Aéronautique - Marine - Espace - Armement

    Informations forums :
    Inscription : Juillet 2015
    Messages : 38
    Points : 55
    Points
    55
    Par défaut C#.NET etc...
    Voilà. En principe ton application est fonctionnelle. Tu peux modifier une colonne entière. C'est peu, mais ça aide pour la suite.
    Une fois que tu aura réfléchis et trouvé la solution à la boucle en XmlDocument, tu auras fini. Si tu ne trouve pas le système de bouclage
    tout de suite c'est normal, il faut se tirer un peu les cheveux.


    Si au bout de quelques jours, tu n'as toujours pas de résultats, on verra si j'ai quelque chose pour toi.
    Ou alors au pire si ça te convient (mais j'y crois pas trop) tu peux poser le

    ++

  10. #50
    Membre à l'essai
    Homme Profil pro
    Étudiant
    Inscrit en
    Mars 2015
    Messages
    46
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Yvelines (Île de France)

    Informations professionnelles :
    Activité : Étudiant
    Secteur : Aéronautique - Marine - Espace - Armement

    Informations forums :
    Inscription : Mars 2015
    Messages : 46
    Points : 13
    Points
    13
    Par défaut
    Citation Envoyé par Nexælia Voir le message
    Ce n'est pas fini. Il y a encore une fonction ou deux à ajouter pour que tu puisse sauvegarder en temps réel lors de la modification.
    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
    private void dataGridView1_CellValueChanged(object sender, DataGridViewCellEventArgs e)
            {
                //Actif
                if (!start)
                {
                    int iC = e.ColumnIndex; // on compte les colonnes
                    int iR = e.RowIndex;     // on compte les lignes
                    //Comme une bataille navale
                    XmlNode itemNode = itemNodes.Item(iR);
                    XmlNode nomNode = itemNode.Attributes[iC];
                    MessageBox.Show("Modification : " + dataGridView1.Rows[iR].Cells[iC].Value + ", " + iC + ", " + iR); // à tel colonne de tel ligne, une modification est apportée
                    //On compte avec le compteur à iC + "1" car on déplace le curseur de deux colonnes pour modifier la valeur voulue à partir de l'origine.
                    itemNode.Attributes[iC + 1].Value = dataGridView1.Rows[iR].Cells[iC].Value.ToString(); // l'ancienne valeur est remplacé par la nouvelle
                    xmlDoc.Save("XMLFile3.xml");  //on sauvegarde à la saisie.
                }
    Si Actif est le premier paramètre dans ton XML tu fais +1 sur le iC, si il est le second c'est +2 ainsi de suite.
    Ici on utilise un pointeur avec coordonnées. C'est un peu compliqué à déchiffrer, si tu y comprends quelque chose c'est bien, si ce n'est pas le cas, tu peux me demander.
    Mais tu verras vite qu'avec cette formule tu peux seulement modifier une colonne, or, il me semble que tu veux avoir la possibilité de modifier toutes les colonnes.
    A partir de là, tu a le code pour un "switch case" mais c’est très restrictif, donc pour te mettre sur la voie, il faut que tu fasse un bouclage.
    Je ne comprends pas trop, j'ai "actif" un peu partout dans mon code xml:
    Code xml : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    <?xml version="1.0" encoding="utf-8" ?>
    <Information xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:xsd="http://www.w3.org/2001/XMLSchema">
      <TypeFrere>
        <Frere> actif="True" nom="Bim" prenom="Pierre" age="20" </Frere>
        <Frere> actif="True" nom="Bam" prenom="Paul" age="25" </Frere>
        <Frere> actif="True" nom="Boom" prenom="Jacques" age="30" </Frere>
      </TypeFrere>
    </Information>

  11. #51
    Membre à l'essai
    Homme Profil pro
    Étudiant
    Inscrit en
    Mars 2015
    Messages
    46
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Yvelines (Île de France)

    Informations professionnelles :
    Activité : Étudiant
    Secteur : Aéronautique - Marine - Espace - Armement

    Informations forums :
    Inscription : Mars 2015
    Messages : 46
    Points : 13
    Points
    13
    Par défaut
    Citation Envoyé par Nexælia Voir le message
    Précision sur la sauvegarde, ce que tu modifie est sauvegardé dans un fichier tierce, je n'ai pas vraiment la solution pour écraser le fichier de sortie sur l'ancien avec le même nom, avec la méthode XmlDocument.
    Sur une autre méthode, cela fonctionne très bien, mais certaines méthodes ont leurs propriétés spécifiques. Il doit être possible de créer un ".ini" qui à l’exécution du programme serai en mesure de remplacer l'ancien fichier par le nouveau.
    De plus bonne nouvelle, le nouveau fichier XML s'enregistre dans le \bin\debug.

    Autre chose. Si jamais tu souhaite occasionnellement déplacer le nouveau fichier vers plusieurs ou un hôte distant. Tu peux le faire sans quitter l'application etc.. et le chercher.
    Tu peux aussi ouvrir n'importe quel autre fichier XML une fois le nom configuré grâce au browser.
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    private void opensearch_Click(object sender, EventArgs e)
            {
                if (openFileDialog1.ShowDialog() == DialogResult.OK)
                {
                    System.IO.StreamReader sr = new
                    System.IO.StreamReader(openFileDialog1.FileName);
                    MessageBox.Show(" " + sr.ReadToEnd());
                    sr.Close();
                }
            }
    Cette fonction est générique, donc elle fonctionne toujours. il ne reste plus qu'a lui créer un bouton avec le même nom.
    Enfin imaginons, qu'en cours de route, tu souhaite visualiser un autre fichier XML. Tu l'as pris avec le browser et positionné dans le bon chemin. Sauf que tu est actuellement sur le premier.
    Afin de de voir le second il faut court-circuiter le bouclage de l'application avec un restart (avec le browser par exemple ou un bouton tierce):

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
       DialogResult dialogResult = MessageBox.Show("Souhaitez-vous redémarrer l'application?", "Attention", MessageBoxButtons.YesNo);
                 if (dialogResult == DialogResult.Yes)
                 Application.Restart();
    Ce code, devrais je l'insérer dans le Form1_Load() ?

  12. #52
    Membre à l'essai
    Homme Profil pro
    Étudiant
    Inscrit en
    Mars 2015
    Messages
    46
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Yvelines (Île de France)

    Informations professionnelles :
    Activité : Étudiant
    Secteur : Aéronautique - Marine - Espace - Armement

    Informations forums :
    Inscription : Mars 2015
    Messages : 46
    Points : 13
    Points
    13
    Par défaut
    Le fichier tierce en question peut être un fichier texte (.txt) ou même un autre fichier xml...Ou même un Excel!

  13. #53
    Membre à l'essai
    Homme Profil pro
    Étudiant
    Inscrit en
    Mars 2015
    Messages
    46
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Yvelines (Île de France)

    Informations professionnelles :
    Activité : Étudiant
    Secteur : Aéronautique - Marine - Espace - Armement

    Informations forums :
    Inscription : Mars 2015
    Messages : 46
    Points : 13
    Points
    13
    Par défaut
    Citation Envoyé par Nexælia Voir le message
    Ce n'est pas fini. Il y a encore une fonction ou deux à ajouter pour que tu puisse sauvegarder en temps réel lors de la modification.
    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
    private void dataGridView1_CellValueChanged(object sender, DataGridViewCellEventArgs e)
            {
                //Actif
                if (!start)
                {
                    int iC = e.ColumnIndex; // on compte les colonnes
                    int iR = e.RowIndex;     // on compte les lignes
                    //Comme une bataille navale
                    XmlNode itemNode = itemNodes.Item(iR);
                    XmlNode nomNode = itemNode.Attributes[iC];
                    MessageBox.Show("Modification : " + dataGridView1.Rows[iR].Cells[iC].Value + ", " + iC + ", " + iR); // à tel colonne de tel ligne, une modification est apportée
                    //On compte avec le compteur à iC + "1" car on déplace le curseur de deux colonnes pour modifier la valeur voulue à partir de l'origine.
                    itemNode.Attributes[iC + 1].Value = dataGridView1.Rows[iR].Cells[iC].Value.ToString(); // l'ancienne valeur est remplacé par la nouvelle
                    xmlDoc.Save("XMLFile3.xml");  //on sauvegarde à la saisie.
                }
    Si Actif est le premier paramètre dans ton XML tu fais +1 sur le iC, si il est le second c'est +2 ainsi de suite.
    Ici on utilise un pointeur avec coordonnées. C'est un peu compliqué à déchiffrer, si tu y comprends quelque chose c'est bien, si ce n'est pas le cas, tu peux me demander.
    Mais tu verras vite qu'avec cette formule tu peux seulement modifier une colonne, or, il me semble que tu veux avoir la possibilité de modifier toutes les colonnes.
    A partir de là, tu a le code pour un "switch case" mais c’est très restrictif, donc pour te mettre sur la voie, il faut que tu fasse un bouclage.
    Y a t'il une différence entre :
    Code c# : Sélectionner tout - Visualiser dans une fenêtre à part
    private void dataGridView1_CellContentClick(object sender, DataGridViewCellEventArgs e)
    et
    Code c# : Sélectionner tout - Visualiser dans une fenêtre à part
    private void dataGridView1_CellValueChanged(object sender, DataGridViewCellEventArgs e)
    ?

    Chez moi c'est le premier qui est marqué dans le code, j'ai du le remplacer avec le tien et lors de la compilation, il ne se passe rien dans le dataGridView. Et même le MessageBox.Show() ne s'affiche pas...

  14. #54
    Membre du Club
    Homme Profil pro
    Technicien Cyber-Sécurité
    Inscrit en
    Juillet 2015
    Messages
    38
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Hauts de Seine (Île de France)

    Informations professionnelles :
    Activité : Technicien Cyber-Sécurité
    Secteur : Aéronautique - Marine - Espace - Armement

    Informations forums :
    Inscription : Juillet 2015
    Messages : 38
    Points : 55
    Points
    55
    Par défaut C#.NET etc...
    Avec ce que je t'ai donnée, tu pourra modifier la colonne Actif (True ou False) et sauvegarder,exemple:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    <Frere> actif="True" nom="Boom" prenom="Jacques" age="30" </Frere>
    //rang 0 ..rang 1.......rang 2.........rang 3..................rang 4.......Fin
    // =iC+0..iC+1.........iC+2............iC+3....................iC+4.........Fin
    Que tu ai 1 ou 45000 lignes il faut voir ca comme un jeu de bataille navalle.
    actif="True" devient "False" avec la sauvegarde.

    2. Nan le Form1_load est terminé après ceci:
    Le fichier tierce en question peut être un fichier texte (.txt) ou même un autre fichier xml...Ou même un Excel!
    J'aurai tendance à dire non, c'est une méthode valable uniquement pour le XML. Tu peux bouger même une montagne mais tu ne pourra ouvrir que tu XML.

  15. #55
    Membre du Club
    Homme Profil pro
    Technicien Cyber-Sécurité
    Inscrit en
    Juillet 2015
    Messages
    38
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Hauts de Seine (Île de France)

    Informations professionnelles :
    Activité : Technicien Cyber-Sécurité
    Secteur : Aéronautique - Marine - Espace - Armement

    Informations forums :
    Inscription : Juillet 2015
    Messages : 38
    Points : 55
    Points
    55
    Par défaut C#.NET etc...
    Citation Envoyé par nganguenf Voir le message
    Y a t'il une différence entre :
    Code c# : Sélectionner tout - Visualiser dans une fenêtre à part
    private void dataGridView1_CellContentClick(object sender, DataGridViewCellEventArgs e)
    et
    Code c# : Sélectionner tout - Visualiser dans une fenêtre à part
    private void dataGridView1_CellValueChanged(object sender, DataGridViewCellEventArgs e)
    ?

    Chez moi c'est le premier qui est marqué dans le code, j'ai du le remplacer avec le tien et lors de la compilation, il ne se passe rien dans le dataGridView. Et même le MessageBox.Show() ne s'affiche pas...
    Effectivement il y a une différence. Il faut copier/coller le code que je t'ai donné tel qu'il est. Cela n'a rien a voir avec "dataGridView1_CellContentClick".
    Tu ne verra rien se passer, tout se fait en mémoire.

  16. #56
    Membre à l'essai
    Homme Profil pro
    Étudiant
    Inscrit en
    Mars 2015
    Messages
    46
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Yvelines (Île de France)

    Informations professionnelles :
    Activité : Étudiant
    Secteur : Aéronautique - Marine - Espace - Armement

    Informations forums :
    Inscription : Mars 2015
    Messages : 46
    Points : 13
    Points
    13
    Par défaut
    Il ya un MessageBox.Show dans le DataGridView, donc je devrais m'attendre au moins à voir une fenêtre s'afficher non?
    Et en plus, la sauvegarde n'est pas effective. Je suis allé dans le fichier Debug et je n'ai pas vu le fichier XMLFile3.xml .

  17. #57
    Membre du Club
    Homme Profil pro
    Technicien Cyber-Sécurité
    Inscrit en
    Juillet 2015
    Messages
    38
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Hauts de Seine (Île de France)

    Informations professionnelles :
    Activité : Technicien Cyber-Sécurité
    Secteur : Aéronautique - Marine - Espace - Armement

    Informations forums :
    Inscription : Juillet 2015
    Messages : 38
    Points : 55
    Points
    55
    Par défaut C#.NET etc...
    Fais un screen du code que je t'ai donné dans ton code.

  18. #58
    Membre à l'essai
    Homme Profil pro
    Étudiant
    Inscrit en
    Mars 2015
    Messages
    46
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Yvelines (Île de France)

    Informations professionnelles :
    Activité : Étudiant
    Secteur : Aéronautique - Marine - Espace - Armement

    Informations forums :
    Inscription : Mars 2015
    Messages : 46
    Points : 13
    Points
    13
    Par défaut La modification ne marche pas...
    Voilà:
    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
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
     
    private void button1_Click_1(object sender, EventArgs e)
            {
                DialogResult dialogResult = MessageBox.Show("Êtes-vous sûr de vouloir quitter l'application?", "Attention", MessageBoxButtons.YesNo);
                if (dialogResult == DialogResult.Yes)
                Application.Exit();
            }
     
            private void dataGridView1_CellContentValueChanged(object sender, DataGridViewCellEventArgs e)
            {
                //Actif
                if (!start)
                {
                    int iC = e.ColumnIndex; // on compte les colonnes
                    int iR = e.RowIndex;     // on compte les lignes
     
                    //Comme une bataille navale
                    //<Frere> actif="True" nom="Boom" prenom="Jacques" age="30" </Frere>
                    //rang 0 ..rang 1.......rang 2.........rang 3..................rang 4.......Fin
                    // =iC+0..iC+1.........iC+2............iC+3....................iC+4.........Fin
     
                    XmlNode itemNode = itemNodes.Item(iR);
                    XmlNode nomNode = itemNode.Attributes[iC];
                    MessageBox.Show("Modification : " + dataGridView1.Rows[iR].Cells[iC].Value + ", " + iC + ", " + iR); // à tel colonne de tel ligne, une modification est apportée
                    //On compte avec le compteur à iC + "1" car on déplace le curseur de deux colonnes pour modifier la valeur voulue à partir de l'origine.
                    itemNode.Attributes[iC + 1].Value = dataGridView1.Rows[iR].Cells[iC].Value.ToString(); // l'ancienne valeur est remplacé par la nouvelle
                    xmlDoc.Save("XMLFile3.xml");  //on sauvegarde à la saisie.
                }
            }
     
            private void opensearch_Click_1(object sender, EventArgs e)
            {
                if (openFileDialog1.ShowDialog() == DialogResult.OK)
                {
                    System.IO.StreamReader sr = new
                    System.IO.StreamReader(openFileDialog1.FileName);
                    MessageBox.Show(" " + sr.ReadToEnd());
                    sr.Close();
                }
            }

    Je peux rentrer le nom, le prenom et l'age mais la modification ne s'effectue pas!

  19. #59
    Membre du Club
    Homme Profil pro
    Technicien Cyber-Sécurité
    Inscrit en
    Juillet 2015
    Messages
    38
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Hauts de Seine (Île de France)

    Informations professionnelles :
    Activité : Technicien Cyber-Sécurité
    Secteur : Aéronautique - Marine - Espace - Armement

    Informations forums :
    Inscription : Juillet 2015
    Messages : 38
    Points : 55
    Points
    55
    Par défaut C#.NET etc...
    Essaie à iC+2, peut-être un problème de comptage.

  20. #60
    Membre à l'essai
    Homme Profil pro
    Étudiant
    Inscrit en
    Mars 2015
    Messages
    46
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Yvelines (Île de France)

    Informations professionnelles :
    Activité : Étudiant
    Secteur : Aéronautique - Marine - Espace - Armement

    Informations forums :
    Inscription : Mars 2015
    Messages : 46
    Points : 13
    Points
    13
    Par défaut
    Désolé Nexaelia, mais même avec IC+2 (ou IC+3) rien ne marche comme ca devrait

+ Répondre à la discussion
Cette discussion est résolue.
Page 3 sur 4 PremièrePremière 1234 DernièreDernière

Discussions similaires

  1. charger 3 dataset d'apres Xml au demarrage pour plusieurs WinForm
    Par ol_velecta dans le forum Windows Forms
    Réponses: 0
    Dernier message: 15/10/2013, 13h13
  2. MVC Csharp XML winforms
    Par wiemwiem dans le forum MVC
    Réponses: 0
    Dernier message: 02/06/2011, 09h47
  3. [WinForm-C#]xml ou app.config ?
    Par beren.kei dans le forum Général Dotnet
    Réponses: 2
    Dernier message: 27/11/2009, 10h44
  4. [C#] [WinForms] Lecture XML
    Par stailer dans le forum Windows Forms
    Réponses: 2
    Dernier message: 05/10/2004, 14h42
  5. Débutant XML
    Par viny dans le forum XML/XSL et SOAP
    Réponses: 8
    Dernier message: 25/07/2002, 12h07

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