2009-03-02 8 views
1

Quelle est la meilleure façon de lire Xml de soit un XmlDocument ou une chaîne dans un DataGrid?lecture Xml dans un DataGrid en C#

Le format XML doit-il être dans un format particulier?

Dois-je utiliser un DataSet d'intermédiaire?

Je travaille sur un client qui consomme du Xml envoyé depuis un serveur en cours de développement par l'un de mes collègues, je peux lui demander de changer le format du XML pour qu'il corresponde à ce qu'un DataGrid requiert.

Répondre

0

Nous avons une réponse partielle pour obtenir les données dans un ensemble de données, mais il lit dans un ensemble de tables avec des liens relationnels.

 DataSet ds = new DataSet(); 
     XmlTextReader xmlreader = new XmlTextReader(xmlSource, XmlNodeType.Document, null); 
     ds.ReadXml(xmlreader); 
+0

Vous ne voulez pas (tous) les tables ou les liens? –

+0

Je voudrais joindre les tables dans une seule table ... –

2

Cela dépend de la version de .NET que vous utilisez. Si vous pouvez utiliser Linq2Xml alors c'est facile. Créez simplement un XDocument et sélectionnez les nœuds enfants sous la forme d'une liste d'un type anonyme.

Si vous ne pouvez pas utiliser Linq2Xml alors vous avez quelques autres options. Utiliser un DataSet est un, cela peut bien fonctionner, mais cela dépend du XML que vous recevez. Une autre option consiste à créer une classe qui décrit l'entité que vous lirez à partir du fichier XML et qui parcourra manuellement les noeuds xml. Une troisième option consisterait à utiliser la sérialisation Xml et à désérialiser le xml dans une liste d'objets. Cela peut fonctionner aussi longtemps que vous avez des classes qui sont configurées pour cela.

L'option la plus simple sera soit pour créer un XDocument ou pour créer un DataSet comme vous le suggérez.

2

Il est évident que votre XML doit être valide :)

Après cela, définir un ensemble de données, définir une grille de données. Utilisez la méthode readXML sur l'ensemble de données pour remplir l'ensemble de données avec votre XML, terminez avec un DataBind et vous êtes prêt à partir.

DataSet myDataSet = new DataSet(); 
myDataSet .ReadXml(myXMLString); 
myDataGrid.DataSource = myDataSet ; 
myDataGrid.DataBind(); 
+0

DataSet.ReadXML prend un nom de fichier comme un argument Xml chaîne ... –

+0

est-il une version parseXML? – Will

+0

Non, mais voir mon autre réponse qui utilise un lecteur XmlText. –

0

Vous pouvez simplement utiliser l'objet XmlDatasource comme source de données de la grille. Cela vous permet de définir le fichier et le XPath, afin de choisir le XML qui est la source de vos données. Vous pouvez ensuite utiliser la fonction <% # XPath = "blah"%> pour écrire vos données explicitement, si vous le souhaitez.