[asp][1.1] XML et datagrid

Résolu
SupaLou Messages postés 74 Date d'inscription samedi 10 janvier 2004 Statut Membre Dernière intervention 19 septembre 2006 - 22 août 2006 à 09:40
SupaLou Messages postés 74 Date d'inscription samedi 10 janvier 2004 Statut Membre Dernière intervention 19 septembre 2006 - 30 août 2006 à 13:35
Bonjour tout le monde,

Je dispose d'un fichier xml comme ceci:

<?

xmlversion="1.0"standalone="yes"?><regions>
   <regionidRegion="0"nomRegion="Région 0">
      <serveuripServeur="XX.XX.XX.XX">
         <idServeur>01
</idServeur>
         <type>Consolidation
</type>
         <nomServeur>Serveur_00_01
</nomServeur>
      </serveur>
   </region>
   <regionidRegion="1"nomRegion="Région 1">
      <serveuripServeur="XX.XX.XX.XX">
         <idServeur>01
</idServeur>
         <type>BDD
</type>
         <nomServeur>Serveur_01_01
</nomServeur>
      </serveur>
      <serveuripServeur="XX.XX.XX.XX">
         <idServeur>03
</idServeur>
         <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

9 réponses

jesusonline Messages postés 6814 Date d'inscription dimanche 15 décembre 2002 Statut Membre Dernière intervention 13 octobre 2010 29
23 août 2006 à 14:00
dg.rowDataBound += new EventHandler(Dg_RowDataBound)

...

private void Dg_RowDataBound(Object sender, QuelquechoseEventArgs e)
{
  if (e.itemtype == itemtype.data)
  {
LinkButton    lelinkbutton =  (LinkButton)e.item.FindControl("truc");
   }
}

J'ai abandonné le datagrid depuis longtemps donc les events & co je me souviens plus de leur nom :/

regarde ici pour un exemple avec un gridview : http://www.aspfr.com/tutoriaux/DEBUG-ASP-NET-AVEC-VISUAL-STUDIO_384.aspx

<hr />Cyril - MVS - MCP
3
SupaLou Messages postés 74 Date d'inscription samedi 10 janvier 2004 Statut Membre Dernière intervention 19 septembre 2006
30 août 2006 à 13:35
Bon alors j'ai trouvé quelque chose de vraiment super simple pour régler mon probleme de validation dans mon dataGrid.
Pour supprimer la propriété causesValidation = true de mon LinkButton il suffit en fait de faire:

// Sur l'évènement creation d'item du dataGrid
private
void dataGridRegions_ItemCreated(
object sender, System.Web.UI.WebControls.DataGridItemEventArgs e)
{
   // On test si le controle crée est bien un controle de type EditItem

   if (e.Item.ItemType == ListItemType.EditItem)
   {
      // On recupère ce controle et on passe à false la propriété cause validation
      LinkButton linkbutton = (LinkButton)e.Item.Cells[0].Controls[0];
      linkbutton.CausesValidation =
false;
   }
}

Voili voilou

;-)
3
jesusonline Messages postés 6814 Date d'inscription dimanche 15 décembre 2002 Statut Membre Dernière intervention 13 octobre 2010 29
22 août 2006 à 21:07
Bonjour,

Ton XML ne peut malheureusement pas être chargé dans un dataset à cause de sa structure. Tu as 2 solutions soit tu convertis ton xml en un autre XML qui soit chargeable dans un dataset. Pour réaliser ca tu passes par une transfo xslt mais c'est assez lourd, l'autre solution est de passer par le DOM tout ce qu'il y a de plus classique en utilisant le namespace System.XML et le XMLDocument :-)

<hr />Cyril - MVS - MCP
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 à 09:06
Bonjour Jesusonline,
Merci de m'avoir répondu mais je ne comprend pas pourquoi tu me dis que mon fichier xml ne peut pas être chargé dans un dataSet à cause de sa structure car je l'ai déjà fait pour afficher toutes mes régions dans un datagrid!!??Et donc je voulais savoir si c'etait possible d'ajouter une sorte de filtre a mon dataSet pour n'afficher que les serveurs appartenant à une région dont je connais l'idRegion dans un autre dataGrid. Effectivement on peut passant par DOM et je pense savoir comment faire ceci mais ca me parraissait un peu "lourd".
J'ai donc 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">
         <idServeur>01
</idServeur>
         <type>Consolidation
</type>
         <nomServeur>Serveur_00_01
</nomServeur>
      </serveur>
   </region>
   <regionidRegion="1"nomRegion="Region 1">
      <serveuridRegion="1"ipServeur="XX.XX.XX.XX">
         <idServeur>01
</idServeur>
         <type>BDD
</type>
         <nomServeur>Serveur_01_01
</nomServeur>
      </serveur>
      <serveuridRegion="1"ipServeur="XX.XX.XX.XX">
         <idServeur>03
</idServeur>
         <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

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

Posez votre question
jesusonline Messages postés 6814 Date d'inscription dimanche 15 décembre 2002 Statut Membre Dernière intervention 13 octobre 2010 29
23 août 2006 à 09:23
Ah ? je ne savais pas que les dataset prenait les attributs comme nom de colonne :-) c'est une bonne nouvelle alors ca :p Je ne sais donc malheureusement pas comment récuperer un attribut du noeud parent :-/ Si c'est possible il doit falloir modifier la facon dont il lit le fichier mais j'avoue mon ignorance :-/

<hr />Cyril - MVS - MCP
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:11
Ravi de t'avoir appris quelque chose alors
Je crois que je vais garder ma soluce alors, mais si jamais je trouve je te tiens au courant .

J'ai également un autre petit problème et peut être pourras tu m'aider sinon je ferai un autre post...
Alors sur une page web j'ai pu créer différents "groupes" de controles de validation en mettant la propriété causesValidation = false à tous les boutons de mon formulaire. En fonction du bouton sur lequel je clic j'active les bons controles de validation et je teste en faisant:
requiredFieldValidator.Validate();
if
(requiredFieldValidator.IsValid)
{
}
Comme tu le vois je suis en 1.1 !!

Cela marche quasiment comme je le veux sauf que sur cette même page j'ai un dataGrid qui possède un mode d'édition et lorsque je valide mes modif (UpdateCommande) tous les controles validation de la page apparaissent et donc là c'est le drame car impossible de modifier mon dataGrid.
En gros je voudrai que mon dataGrid est la propriété CausesValidation à false mais elle n'existe pas je crois??
0
jesusonline Messages postés 6814 Date d'inscription dimanche 15 décembre 2002 Statut Membre Dernière intervention 13 octobre 2010 29
23 août 2006 à 10:30
Raaa Asp.net 2 avec la propriété ValidationGroup est vraiment magnifique :-)

Dans ton cas il va falloir s'abonner à l'event rowdatabound (ou truc du genre) rechercher le linkbutton du mode edition et le mettre le causesvalidation à false ici :-)

<hr />Cyril - MVS - MCP
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 à 13:18
oui comme tu dis la propriété ValidationGroup m'aurai beaucoup servi !!

Mais là tu m'as un peu perdu je dois dire. En effet je n'est pas encore acquis la notion d'abonnement à un évènement. Je comprend bien ce qu'il faut que je fasse mais je ne vois pas du tout comment le mettre en oeuvre.

Pourrais tu me donner un petit exemple sans vouloir abuser?

Je te remerci grandement
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 à 14:39
Okey merci beaucoup pour les infos et le lien, je vais regardé tout ca
0
Rejoignez-nous