[c#][1.1] XML et datagrid

Signaler
Messages postés
74
Date d'inscription
samedi 10 janvier 2004
Statut
Membre
Dernière intervention
19 septembre 2006
-
Messages postés
74
Date d'inscription
samedi 10 janvier 2004
Statut
Membre
Dernière intervention
19 septembre 2006
-
Bonjour tout le monde,


Je dispose d'un fichier xml comme ceci:




<?xml version= "1.0" standalone="yes"?><regions>
   <region idRegion="0" nomRegion="Région 0">
      <serveur ipServeur="XX.XX.XX.XX">
         01
         <type>Consolidation</type>
         <nomServeur>Serveur_00_01</nomServeur>
      </serveur>
   </region>
   <region idRegion ="1" nomRegion= "Région 1">
      <serveur ipServeur="XX.XX.XX.XX">
         01
         <type>BDD</type>
         <nomServeur>Serveur_01_01</nomServeur>
      </serveur>
      <serveur ipServeur ="XX.XX.XX.XX">
         03
         <type>IIS</type>
         <nomServeur>Serveur_01_03</nomServeur>
       </serveur>
   </region>
</regions>




Je souhaiterai alors afficher dans un dataGrid les informations concernant uniquement les serveurs (c'est à dire une colone pour l'ipServeur, une autre pour l'idServeur, une pour leur type et une quatrième pour leur nom) appartenant à une région dont l'idRegion est stockée dans une variable. Le problème est que je ne sait pas trop comment alimenter mon dataSet afin de ne récupérer que ces noeuds là sachant que après je souhaiterai pouvoir faire les modifier, supprimer...


Merci pour votre aide

6 réponses

Messages postés
4936
Date d'inscription
lundi 17 février 2003
Statut
Membre
Dernière intervention
14 février 2014
38
il suffit de charger tout ton fichier XML dans une datatable...

ensuite tu peux "alimenter" ton DataGrid à partir d'une vue (DataView) ou un tableau de lignes (DataRow[]) de celle-ci.

DataRow[] rows = datatable.select("idRegion=1");

monDataGrid.DataSource = rows;

Sébastien FERRAND (
blog)
Consultant Indépendant
[Microsoft MVP Visual C#]
Messages postés
74
Date d'inscription
samedi 10 janvier 2004
Statut
Membre
Dernière intervention
19 septembre 2006

Salut sebmafate,
je te remerci de te soucier de mon problème :-D

Il me semblait bien qu'il me fallait effectuer une procédure comme celle ci pour répondre à ma question. L'ennui c'est que je m'y perd un peu entre dataSet, dataView dataRow etc !!
Comment dois je m'y prendre pour charger tout mon fichier xml dans une dataTable car jusqu'ici je le chargeais juste dans un dataSet:

DataSet ds =

new DataSet();
ds.ReadXml(Server.MapPath("monFichier.xml"));

De plus je ne comprend pas très bien cette ligne là:
DataRow[] rows = datatable.select("idRegion=1"); == >Qu'aura t-il exactement dans DataRow?? Les informations concernant chaque serveur de la région 1 ??

Encore merci de ton soutient

 
Messages postés
4936
Date d'inscription
lundi 17 février 2003
Statut
Membre
Dernière intervention
14 février 2014
38
en fait quand tu fais :
DataSet ds =

new DataSet();
ds.ReadXml(Server.MapPath("monFichier.xml"));

il te crée une DataTable Regions dans ton DataSet.

et donc, quand tu fais :
DataRow[] rows = ds.Table["Regions"].Select("idRegion=1");

il mets dans rows toutes les lignes de la région 1.

Sébastien FERRAND (
blog)
Consultant Indépendant
[Microsoft MVP Visual C#]
Messages postés
74
Date d'inscription
samedi 10 janvier 2004
Statut
Membre
Dernière intervention
19 septembre 2006

D'accord je comprend mieux maintenant :-)

J'ai donc essayé ce que tu m'as dit:

DataSet ds =

new DataSet();
ds.ReadXml(Server.MapPath("Regions.xml"));
DataRow[] rows = ds.Tables["region"].Select("idRegion=1");
dataGridServeurs.DataSource = rows;
dataGridServeurs.DataBind();

J'ai essayé avec un dataGridServeurs dont les colonnes sont crées automatiquement au moment de l'excécution.
Celui ci affiche alors deux colonnes et une seule ligne:

RowError                  |                     HasErrors
                                   |                         False

J'ai donc essayé en décochant la propriété générant automatiquement les colonnes. J'ai ajouter une colonnes connexe avec comme champs de données ipServeur.
Mais au moment de l'exécution j'ai une erreur: "Aucun champ ou propriété 'ipServeur' n'a été trouvé dans la source de données sélectionnée"...
D'après moi il s'agirai du dataRow qui n'est pas correct???
Voyez vous d'ou cela peut il venir??

Encore un très grand merci pour votre aide
Messages postés
74
Date d'inscription
samedi 10 janvier 2004
Statut
Membre
Dernière intervention
19 septembre 2006

un petit up sil vous plait ;-D
Messages postés
74
Date d'inscription
samedi 10 janvier 2004
Statut
Membre
Dernière intervention
19 septembre 2006

Finalement j'ai  eu recourt à une "astuce" pour résoudre mon problème. J'ai ajouté un attribut à chaque serveur dans mon fichier xml que j'ai appelé idRegion:


<?xmlversion= "1.0"standalone="yes"?>
<regions>
   <regionidRegion="0"nomRegion="Region 0">
      <serveuridRegion="0"ipServeur="XX.XX.XX.XX">
         01
         <type>Consolidation</type>
         <nomServeur>Serveur_00_01</nomServeur>
      </serveur>
   </region>
   <regionidRegion ="1"nomRegion= "Region 1">
      <serveuridRegion="1"ipServeur="XX.XX.XX.XX">
         01
         <type>BDD</type>
         <nomServeur>Serveur_01_01</nomServeur>
      </serveur>
      <serveuridRegion ="1"ipServeur= "XX.XX.XX.XX">
         03
         <type>IIS</type>
         <nomServeur>Serveur_01_03</nomServeur>
      </serveur>
   </region>
</regions>


Pour recupérer mes serveurs appartenant à une certaine région il m'a désormais suffit de faire:


DataSet ds = new DataSet();
ds.ReadXml(Server.MapPath("Regions.xml"));
DataView dv = new DataView();
dv.Table = ds.Tables["serveur"];
// Je crée mon filtre pour ne récupérer que les serveurs qui m'interresse
dv.RowFilter = "idRegion=" + Session["idRegion"].ToString();
dataGridServeurs.DataSource = dv;
dataGridServeurs.DataBind();


Voilà cette méthode fonctionne à merveille si ce n'etait que j'aurai bien aimé trouver la solution sans avoir besoin de modifier mon fichier xml de base, donc si quelqu'un à une idée ;-)