[c#][1.1] XML et datagrid

SupaLou Messages postés 74 Date d'inscription samedi 10 janvier 2004 Statut Membre Dernière intervention 19 septembre 2006 - 22 août 2006 à 10:34
SupaLou Messages postés 74 Date d'inscription samedi 10 janvier 2004 Statut Membre Dernière intervention 19 septembre 2006 - 23 août 2006 à 10:16
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

sebmafate Messages postés 4936 Date d'inscription lundi 17 février 2003 Statut Membre Dernière intervention 14 février 2014 36
22 août 2006 à 11:15
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#]
0
SupaLou Messages postés 74 Date d'inscription samedi 10 janvier 2004 Statut Membre Dernière intervention 19 septembre 2006
22 août 2006 à 11:51
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

 
0
sebmafate Messages postés 4936 Date d'inscription lundi 17 février 2003 Statut Membre Dernière intervention 14 février 2014 36
22 août 2006 à 11:56
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#]
0
SupaLou Messages postés 74 Date d'inscription samedi 10 janvier 2004 Statut Membre Dernière intervention 19 septembre 2006
22 août 2006 à 14:13
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
0

Vous n’avez pas trouvé la réponse que vous recherchez ?

Posez votre question
SupaLou Messages postés 74 Date d'inscription samedi 10 janvier 2004 Statut Membre Dernière intervention 19 septembre 2006
22 août 2006 à 16:32
un petit up sil vous plait ;-D
0
SupaLou Messages postés 74 Date d'inscription samedi 10 janvier 2004 Statut Membre Dernière intervention 19 septembre 2006
23 août 2006 à 10:16
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 ;-)
0
Rejoignez-nous