IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

ASP.NET Discussion :

Remplissage "manuel" d'un GridView


Sujet :

ASP.NET

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre averti
    Homme Profil pro
    Développeur .NET
    Inscrit en
    Juin 2011
    Messages
    9
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Yvelines (Île de France)

    Informations professionnelles :
    Activité : Développeur .NET
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Juin 2011
    Messages : 9
    Par défaut Remplissage "manuel" d'un GridView
    Bonjour,

    Je fais une extraction sur un flux transformé en Xml et je souhaite présenter le résultat sous forme de GridView. (Impossible de placer mon XML dans un DataSet)
    La table HTML simple n'étant pas adaptée vu que j'ai une colonne de selection (type TextBox).

    Je suppose que l'utilisation du TemplateField est inévitable mais je n'arrive pas à trouver la solution pour lui passer mes paramètres. Est-il possible de lui passer un tableau[] ? Une TabelCell ?
    Comment ?

    Msdn m'a lâché, merci de m'aider

  2. #2
    Modérateur
    Avatar de DotNetMatt
    Homme Profil pro
    CTO
    Inscrit en
    Février 2010
    Messages
    3 611
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 37
    Localisation : Etats-Unis

    Informations professionnelles :
    Activité : CTO
    Secteur : Finance

    Informations forums :
    Inscription : Février 2010
    Messages : 3 611
    Billets dans le blog
    3
    Par défaut
    Bonjour,

    Pour peupler un GridView, je te conseille d'utiliser des List<T>.

    Pour pouvoir y insérer le contenu de ton flux XML, tu peux le désérialiser en utilisant par exemple la classe SoapFormatter. Ou si tu préfères, tu peux créer toi-même une classe qui représente la structure de ton fichier XML, puis lire ton flux XML élément par élément.
    Ensuite, tu rajoutes chacun de tes objets (donc chaque élément désérialisé de ton flux XML) dans ta List<T>.

    Pour finir, dans ton code behind, tu peux écrire quelque chose comme ceci afin de le peupler avec ta List<T> :

    Code HTML : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    <asp:GridView ID="myGridView" runat="server">
        <Columns>
            ...
        </Columns>
    </asp:GridView>

    Code C# : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    myGridView.DataSource = myList;
    myGridView.DataBind();
    Less Is More
    Pensez à utiliser les boutons , et les balises code
    Desole pour l'absence d'accents, clavier US oblige
    Celui qui pense qu'un professionnel coute cher n'a aucune idee de ce que peut lui couter un incompetent.

  3. #3
    Modérateur

    Homme Profil pro
    Chef de projet NTIC
    Inscrit en
    Avril 2007
    Messages
    1 996
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 42
    Localisation : France, Ille et Vilaine (Bretagne)

    Informations professionnelles :
    Activité : Chef de projet NTIC
    Secteur : Service public

    Informations forums :
    Inscription : Avril 2007
    Messages : 1 996
    Par défaut
    Une solution "simple" (entendre pas forcément super performante si la quantité de données à traiter est importante) consiste à instancier un nouveau XMLDataSource, à lui passer ton XML et à utiliser cette source de données comme DataSource de ta GridView.
    Tout ça peut se faire par code behind.

    Une petite question : pour quelle raison ne peux tu pas stocker ton XML dans un DataSet ?
    Même si cette solution n'est pas recommandable, je ne comprends pas ce qui t'en empêche.

  4. #4
    Membre averti
    Homme Profil pro
    Développeur .NET
    Inscrit en
    Juin 2011
    Messages
    9
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Yvelines (Île de France)

    Informations professionnelles :
    Activité : Développeur .NET
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Juin 2011
    Messages : 9
    Par défaut
    Merci pour vos réponses rapides, je suis en train de tester la solution de Matt07.

    En ce qui concerne le Dataset, mon fichier XML est assez désordonné, des répétitions de nœuds avec un nombre de nœuds enfants quasiment tout le temps différents et d'une longueur absolument terrifiante.

    Je ne sais pas si un Dataset serait bien approprié dans ce cas, mais je suis ouvert à toutes propositions...

  5. #5
    Membre averti
    Homme Profil pro
    Développeur .NET
    Inscrit en
    Juin 2011
    Messages
    9
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Yvelines (Île de France)

    Informations professionnelles :
    Activité : Développeur .NET
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Juin 2011
    Messages : 9
    Par défaut
    Finalement trouvé.

    Mon XML étant relatif à des personnes, j'ai exploré mon XML avec LINQ to XML, avec des boucles permettant facilement d'ignorer des noeuds ou de forcer une valeur null sur un noeud inexistant.

    J'ai ensuite créé un objet Person que j'ai rempli grâce à LINQ.

    Pour finalement apprendre qu'on pouvait parfaitement bien binder un gridView avec une liste d'objets objet, chose que j'ignorais...

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
     public List<Person> GetList()
        {
            //LINQ TO XML
     
            XmlDocument xmldoc = new XmlDocument();
            xmldoc.LoadXml(strXML);
     
            XElement elt = XElement.Parse(strXML);
     
            //Creation d'une liste de personnes
     
            List<Person> listPerson = new List<Person>();
     
            // Requete parcourant les differants noeuds "person"
            IEnumerable<XElement> listePersonnes = from i in elt.Descendants("person")
                                         select i;
     
            // ET recup de tous les noeuds enfants...
     
            foreach (XElement i in listePersonnes)
            {
     
                // Récupération de l'Id
                if (id != null)
                {
                    unePersonne.Id = id.Value;
                }
     
                // Récupération du prénom
                if (firstName != null)
                {
                    unePersonne.Prenom = firstName.Value;
                }
     
                // Récupération du nom de famille
                if (lastName != null)
                {
                    unePersonne.Nom = lastName.Value;
                }
     
                //ETC...
     
                listPerson.Add(unePersonne);
     
     
            }
            return listPerson;
        }
    Si ca peut aider...

    Enjoy !

+ Répondre à la discussion
Cette discussion est résolue.

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo