Forum |  HardWare.fr | News | Articles | PC | S'identifier | S'inscrire | Shop Recherche
3029 connectés 

  FORUM HardWare.fr
  Programmation
  C#/.NET managed

  [asp][1.1] XML et datagrid

 


 Mot :   Pseudo :  
 
Bas de page
Auteur Sujet :

[asp][1.1] XML et datagrid

n°1429129
supalou
Posté le 22-08-2006 à 10:16:18  profilanswer
 

Bonjour tout le monde,
 
Je dispose d'un fichier xml comme ceci:
 
 

Code :
  1. <?xml version="1.0" standalone="yes"?><regions>
  2.    <region idRegion="0" nomRegion="Région 0">
  3.       <serveur ipServeur="XX.XX.XX.XX">
  4.          <idServeur>01</idServeur>
  5.          <type>Consolidation</type>
  6.          <nomServeur>Serveur_00_01</nomServeur>
  7.       </serveur>
  8.    </region>
  9.    <region idRegion="1" nomRegion="Région 1">
  10.       <serveur ipServeur="XX.XX.XX.XX">
  11.          <idServeur>01</idServeur>
  12.          <type>BDD</type>
  13.          <nomServeur>Serveur_01_01</nomServeur>
  14.       </serveur>
  15.       <serveur ipServeur="XX.XX.XX.XX">
  16.          <idServeur>03</idServeur>
  17.          <type>IIS</type>
  18.          <nomServeur>Serveur_01_03</nomServeur>
  19.        </serveur>
  20.    </region>
  21. </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

mood
Publicité
Posté le 22-08-2006 à 10:16:18  profilanswer
 

n°1429208
_Mose_
Lonesome coder
Posté le 22-08-2006 à 11:48:52  profilanswer
 

Le plus simple :
* tu charges tout ton XML dans un DataSet (ReadXml)
* tu caches les lignes que tu ne veux pas montrer :)   (En overridant OnItemDataBound dans ta custom DataGrid)

n°1429219
supalou
Posté le 22-08-2006 à 11:59:51  profilanswer
 

Salut _Mose_ ! !
 
Merci a toi pour cette idée qui m'a l'air très très bonne :-D
J'avais pas du tout pensé a cette soluce!!
 
Donc charger mon XML dans un dataSet ca pas de soucy je sais faire:
DataSet ds = new DataSet();
ds.ReadXml(Server.MapPath("monFichier.xml" ));
 
Ensuite afficher le dataSet dans le dataGrid je sais faire aussi:
dataGridServeurs.DataSource = ds.Tables["serveur"];
dataGridServeurs.DataBind();
Donc à ce stage on constate que mon dataGridServeur contient l'ensemble de tous les serveurs et non pas ceux correspondant uniquement à une région dont je connais l'idRegion.
 
Ma question est comment faire pour masquer les lignes en trop???
En gros jai pas compris ca ==> "En overridant OnItemDataBound dans ta custom DataGrid"
 
Merci de bien vouloir eclaircir ce point

n°1429233
_Mose_
Lonesome coder
Posté le 22-08-2006 à 12:14:47  profilanswer
 

En fait, tu as deux choix :
1 - Le mieux niveau perfs, (m'enfin si tu as moins de 1000 régions, tu le sentiras pas), c'est de dériver DataGrid pour faire la tienne propre :
* Tu créés une classe MyDataGrid
* Tu surcharges la méthode OnItemDataBound (tape 'override' dans VS.Net, et choisi la méthode dans la liste)
 
2 - Deuxième solution : tu garde le DataGrid de base, et tu t'abonnes à l'évènement 'ItemDataBound'
 
Bon.. une fois que tu as fais ça, dans les deux cas tu as une méthode :
-> qui est appelée à chaque DataRow qui est 'bindé' dans ta grille.
-> qui te fourni un DataGridItemEventArgs , avec une propriété Item très utile  :D  
Je te laisse chercher un peu pour la suite...

n°1429441
supalou
Posté le 22-08-2006 à 15:16:08  profilanswer
 

En fait ca m'a l'air un peu compliqué comme méthode vu mon niveau...
Je me suis donc renseigné et apparement il serai possible de charger tout mon fichier xml dans un dataSet puis de faire un filtre sur celui ci afin de ne conserver que les noeuds qui m'interesserai. J'ai donc essayé  
DataSet ds = new DataSet();
ds.ReadXml(Server.MapPath("monFichier.xml" ));
DataRow[] rows = ds.Tables["region"].Select("idRegion=1" );
dataGridServeurs.DataSource = rows;
dataGridServeurs.DataBind();
Mais ceci me renvoi un dataGrid avec uniquement deux colonnes et une ligne:
RowError                  |                     HasErrors
                              |                         False
Quelqu'un pourrait-il m'aider??
 
 
 

n°1429800
supalou
Posté le 23-08-2006 à 10:15:39  profilanswer
 

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:
 

Code :
  1. <?xmlversion="1.0"standalone="yes"?>
  2. <regions>
  3.    <regionidRegion="0"nomRegion="Region 0">
  4.       <serveuridRegion="0"ipServeur="XX.XX.XX.XX">
  5.          <idServeur>01</idServeur>
  6.          <type>Consolidation</type>
  7.          <nomServeur>Serveur_00_01</nomServeur>
  8.       </serveur>
  9.    </region>
  10.    <regionidRegion="1"nomRegion="Region 1">
  11.       <serveuridRegion="1"ipServeur="XX.XX.XX.XX">
  12.          <idServeur>01</idServeur>
  13.          <type>BDD</type>
  14.          <nomServeur>Serveur_01_01</nomServeur>
  15.       </serveur>
  16.       <serveuridRegion="1"ipServeur="XX.XX.XX.XX">
  17.          <idServeur>03</idServeur>
  18.          <type>IIS</type>
  19.          <nomServeur>Serveur_01_03</nomServeur>
  20.       </serveur>
  21.    </region>
  22. </regions>


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

Code :
  1. DataSet ds = new DataSet();
  2. ds.ReadXml(Server.MapPath("Regions.xml" ));
  3. DataView dv = new DataView();
  4. dv.Table = ds.Tables["serveur"];
  5. // Je crée mon filtre pour ne récupérer que les serveurs qui m'interresse
  6. dv.RowFilter = "idRegion=" + Session["idRegion"].ToString();
  7. dataGridServeurs.DataSource = dv;
  8. 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 ;-)


Message édité par supalou le 23-08-2006 à 10:16:54

Aller à :
Ajouter une réponse
  FORUM HardWare.fr
  Programmation
  C#/.NET managed

  [asp][1.1] XML et datagrid

 

Sujets relatifs
[XML] lire un fichier xmlRécupérer l'Index d'une ligne de DataGrid
Je suis perdu pour utiliser un flux XMLDétection d'une clické dans une datagrid
déspécialisation de caractères en XMLFormulaire Perl/CGI générant du XML
Quel parseur XML pour une utilisation dans du C++datagrid à partir d'une table dont on ne connait pas les champs
Comment remplir un DataGrid à partir d'un fichier XML en VB.Net ??Manipulation de fichier XML complexe et DataGrid
Plus de sujets relatifs à : [asp][1.1] XML et datagrid


Copyright © 1997-2022 Hardware.fr SARL (Signaler un contenu illicite / Données personnelles) / Groupe LDLC / Shop HFR