2010-10-26 7 views
2

Bonjour, J'essaie d'utiliser DataGridView pour la première fois et avec LINQ.LINQ to XML et DataGridView

Voici ce que j'essaie de faire: Je veux l'utiliser (bien qu'il ne dispose pas du DataGridView) pour lire et afficher le contenu d'un fichier XML (ce bit fonctionne sous le code ci-dessous) mais je vouloir avoir un bouton ajouter une ligne sur le formulaire ou dans le DataGridView qui prend le contenu de trois zones de texte et et remplit le contenu de trois colonnes de la nouvelle ligne. La nouvelle ligne doit être ajoutée aux données existantes.

Ensuite, je voudrais ajouter un bouton Supprimer pour supprimer la ligne actuellement sélectionnée. Enfin, je veux un bouton de sauvegarde qui exporte le contenu de DataGridView vers un fichier XML en écrasant/mettant à jour le fichier XML existant. Donc, je me suis contenté d'ajouter les données supplémentaires! mais comme je n'ai pas la moindre idée quant à la suppression ou la sauvegarde, je pensais que je demanderais tout en une fois !!

Donc, c'est le code que je dois lire le fichier xml:

XDocument xmlDoc = XDocument.Load(@"queues.xml"); 
var q = from c in xmlDoc.Root.Descendants("Queue") 
     select new 
     { 
      QueueNumber = c.Element("Number").Value, 
      QueueName = c.Element("Name").Value, 
      QueuePCC = c.Element("QueueTag").Value 
     }; 

dataGridView1.DataSource = q.ToList(); 

document XML:

<?xml version="1.0" encoding="utf-8" ?> 
<Queues> 
    <Queue> 
    <Number> 
     001 
    </Number> 
    <Name> 
     mytest 
    </Name> 
    <QueueTag> 
     xyz 
    </QueueTag> 
    </Queue> 
    <Queue> 
    <Number> 
     002 
    </Number> 
    <Name> 
     Adi2 
    </Name> 
    <QueueTag> 
     ABCD 
    </QueueTag> 
    </Queue> 
</Queues> 

ok j'ai changé mon code à ceci:

XDocument xmlDoc = XDocument.Load(@"queues.xml"); 
var q = from c in xmlDoc.Root.Descendants("Queue") 
     select new Queue 
     { 
      Number = c.Element("Number").Value, 
      Name = c.Element("Name").Value, 
      QueueTag= c.Element("QueueTag").Value 
     }; 

var queryAsList = new BindingList<Queue>(q.ToList()); 

bindingSource1.DataSource = queryAsList; 
dataGridView1.DataSource = bindingSource1; 

Cela me permet d'ajouter et de supprimer des lignes et des données du dataGridView :)

Mais je ne trouve toujours aucun moyen d'écrire les données en XML, soit à partir de dataGridView ou de la bindingSource1 :(

Toute aide s'il vous plaît? le bindingSource1.count change chaque fois que je fais une modification aux données donc je pense que je suis proche!

Répondre

1

Peut-être que vous pouvez essayer de travailler avec le xmlDoc enregistré dans la session (ainsi préservé avec les postbacks) ... Ajouter les trois éléments (à partir des zones de texte) au XmlDoc ... Et relier le gridview au xmlDoc à chaque publication A la fin, vous pouvez faire xmlDoc.save().

Pour supprimer des lignes, vous pouvez utiliser l'événement GridView, dataGridView1_RowDeleted, pour modifier le xmlDoc (pour supprimer le nœud par rapport à la ligne sélectionnée).

Quelque chose comme:

protected void ButtonLoadGridView_Click(object sender, EventArgs e) 
{ 
    XDocument xmlDoc = XDocument.Load(@"f:\queues.xml"); 
    var q = from c in xmlDoc.Root.Descendants("Queue") 
      select new 
      { 
       QueueNumber = c.Element("Number").Value, 
       QueueName = c.Element("Name").Value, 
       QueuePCC = c.Element("QueueTag").Value 
      }; 
    dataGridView1.DataSource = q.ToList(); 
    Session.Add("xmlDoc",xmlDoc);   
} 

public void dataGridView1_RowDeleting(Object sender, GridViewDeleteEventArgs e) 
{ 
    // get some node information: 

    int rowIndex = e.RowIndex;    
    string someNodeInfo = dataGridView1.Rows[rowIndex].Cells[0].Text;    

    // then edit xml : 
    XmlDocument xmlDoc = (XmlDocument) Session["xmlDoc"]; 
    xmlDoc.ChildNodes.Item(rowIndex).RemoveAll(); 
    Session.Add("xmlDoc", xmlDoc); 
} 


protected void ButtonSave_Click(object sender, EventArgs e) 
{ 
    XmlDocument xmlDoc = (XmlDocument)Session["xmlDoc"]; 
    xmlDoc.Save(@"f:\queues2.xml"); 
}