2010-04-13 5 views
1

Im utilisant C# .net, application de formulaire Windows. J'ai un fichier XML qui contient deux colonnes et quelques lignes de données. maintenant je dois remplir ces données dans une vue de grille de données. Im en utilisant un bouton, quand je clique sur le bouton une boîte de dialogue ouverte apparaîtra. je dois sélectionner le nom du fichier xml et quand je clique sur ouvrir le contenu de ce fichier xml devrait arriver à la vue de la grille de données. J'ai essayé avec le code suivant:Lire le contenu d'un fichier XML dans une vue de grille de données

{ 
XmlDataDocument xmlDatadoc=new XmlDataDocument(); 
XmlDatadoc.Dataset.ReadXml(filename); 
ds=xmlDatadoc.Dataset; 
datagridview1.DataSource=ds.DefaultViewManager; 
datagridview1.Datamember="language"; 
} 

Mon fichier xml est:

<languages> 
<language> 
    <key> key1</key> 
<value>value1</value> 
</language> 

<language> 
    <key> key2</key> 
<value>value2</value> 
</language> 
</languages> 

Son beau travail, mais seulement pour "langue". J'en ai besoin pour travailler sur d'autres fichiers xml.

+1

Edité pour fixer les balises linguistiques de clôture. – MusiGenesis

Répondre

0

Celui-ci est assez simple: si vous voulez l'utiliser avec un fichier XML différent, utilisez une autre propriété Datamember, comme ceci:

datagridview1.Datamember="taxes"; // or whatever 

Si vous vous attendez à votre DataGridView en quelque sorte connaître par magie quels éléments dans votre XML à utiliser pour les lignes, vous n'avez pas de chance.

0

Bonjour i cela est par exemple, XML doit être au format correct, il est facile de corriger le code si nécessaire, c'est juste l'essentiel principale idée:

 XElement xElement = XElement.Load("file.xml"); 
     DataTable dTable = new DataTable(); 
     // keys must have unique name 
     xElement.Elements().First().Elements().ToList() 
      .ForEach(element=>dTable.Columns.Add(element.Name.ToString())); 

     xElement.Elements().ToList().ForEach((item) => 
      { 
       // fileds must place in the same order 
       // but you can correct it if you want 
       var itemToAdd = new List<string>(); 

       item.Elements().ToList().ForEach(field => itemToAdd.Add(field.Value)); 
       dTable.Rows.Add(itemToAdd.ToArray()); 
      } 
     ); 

     dataGridView1.DataSource = dTable; 
Questions connexes