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 :

Classe DataSet: compréhension


Sujet :

ASP.NET

  1. #1
    Membre éclairé
    Inscrit en
    Mai 2006
    Messages
    397
    Détails du profil
    Informations forums :
    Inscription : Mai 2006
    Messages : 397
    Par défaut Classe DataSet: compréhension
    Bonjour,

    Cherchant à charger des données depuis un fichier XML vers un GridView (et non depuis une base de donnée, comme c'est le cas très souvent), il me faut au préalable formatter les données: elles sont dans un format particulier dans le fichier XML.

    Je sais que la classe DataSet permet de stocker dans le cache des données. Ma question est comment cette classe était-elle constituée?

    Si j'ai bien compris, un DataSet contient des DataTables. Le DataTable, lui, contient des DataColumns, qui lui contient des DataRows.

    Si je suis cette logique, je dois:

    1. Créer mon DataSet
    2. Créer mes DataTables et les mettres dans mon DataSet
    3. Créer mes DataColumns pour chaque DataTables
    4. Ajouter des DataRows (logiquement il n'y a pas besoin de créer des DataRows, puisque une colonne contient de toutes facons des lignes)

    Comme j'ai quelques petits problèmes avec les DataSet, j'aimerais savoir si j'ai effectivement bien compris les DataSet et leurs structures.

    Merci bien!

    L.

  2. #2
    Membre Expert
    Homme Profil pro
    Inscrit en
    Juillet 2007
    Messages
    1 277
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Réunion

    Informations forums :
    Inscription : Juillet 2007
    Messages : 1 277
    Par défaut
    Un DataSet contient des DataTable qui contiennent des DataRow.

    Les DataColumns sont utilisées pour connaître le nom de la colonne, son type.

    Il n'est pas rare d'écrire du code sans jamais se soucier des DataColumns.

  3. #3
    Membre éclairé
    Inscrit en
    Mai 2006
    Messages
    397
    Détails du profil
    Informations forums :
    Inscription : Mai 2006
    Messages : 397
    Par défaut
    Citation Envoyé par Kaidan Voir le message
    Un DataSet contient des DataTable qui contiennent des DataRow.

    Les DataColumns sont utilisées pour connaître le nom de la colonne, son type.

    Il n'est pas rare d'écrire du code sans jamais se soucier des DataColumns.
    Ok, mais une table peut avoir plusieurs valeur (donc plusieurs colonnes). Comment tu fais alors pour connaître le nom des colonnes? Tu peux définir à un certains endroit le nom de la colonne?

    Si un ajoute des DataRow, comment tu fais pour dire que tel données va dans tel tables, si tu ne définis pas les tables?

  4. #4
    Rédacteur
    Avatar de Louis-Guillaume Morand
    Homme Profil pro
    Cloud Architect
    Inscrit en
    Mars 2003
    Messages
    10 839
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Hauts de Seine (Île de France)

    Informations professionnelles :
    Activité : Cloud Architect
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Mars 2003
    Messages : 10 839
    Par défaut
    Comment tu fais alors pour connaître le nom des colonnes?
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    monDataSet.Tables[0].Column[0]
    permet d'accéder à la première colonne sans connaitre son nom (à éviter). sinon, c'est quand tu créés ta DataTable mais selon la façon dont tu la charge, c'est pas toujours possible de définir soi-même.

    Si un ajoute des DataRow, comment tu fais pour dire que tel données va dans tel tables, si tu ne définis pas les tables?
    tu peux créer une DataRow à partir d'une DataTable.

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    DataRow row = monDataSet.Tables[0].NewRow();
    //remplissage de la DataRow
    ....
    //
    monDataSet.Tables[0].Add(row);

  5. #5
    Membre Expert
    Homme Profil pro
    Inscrit en
    Juillet 2007
    Messages
    1 277
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Réunion

    Informations forums :
    Inscription : Juillet 2007
    Messages : 1 277
    Par défaut
    On peut construire un DataRow avec un object[] (tableau d'objet).

    Le premier du tableau va dans la première colonne... le suivant dans la seconde... etc.

    Les DataColumns permettent de spécifier le ColumnName, mais on peut accèder à une valeur du DataRow soit par le nom de colonne, soit par son index.

  6. #6
    Membre éclairé
    Inscrit en
    Mai 2006
    Messages
    397
    Détails du profil
    Informations forums :
    Inscription : Mai 2006
    Messages : 397
    Par défaut
    Aaaah, très bien!

    Donc c'est facultatif d'avoir des DataColumns? On peut ajouter des DataRows, sans avoir spécifier les DataColumns, en passant par sont index (ce qui implique une gestion un peut moins intuitive de l'accès aux valeurs à mon avis )

  7. #7
    Rédacteur
    Avatar de Louis-Guillaume Morand
    Homme Profil pro
    Cloud Architect
    Inscrit en
    Mars 2003
    Messages
    10 839
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Hauts de Seine (Île de France)

    Informations professionnelles :
    Activité : Cloud Architect
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Mars 2003
    Messages : 10 839
    Par défaut
    p-e me trompe-je mais la déclaration des DataColumn est obligatoire même si tu ne les utilises pas par la suite pour accéder aux données. vu que DataTable est censé être une réprésentation mémoire d'une table, les lignes sont forcément découpées en colonne car sinon tu n'auras pas de consistence

  8. #8
    Membre éclairé
    Inscrit en
    Mai 2006
    Messages
    397
    Détails du profil
    Informations forums :
    Inscription : Mai 2006
    Messages : 397
    Par défaut
    Donc il faut faire :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
     
                DataSet[] myDataSet = new DataSet[1];
                //création de la table
                myDataSet[0].Tables.Add("test");
                //creation des colonnes
                myDataSet[0].Tables["test"].Columns.Add("colonne 1");
                myDataSet[0].Tables["test"].Columns.Add("colonne 2");
                myDataSet[0].Tables["test"].Columns.Add("colonne 3");
     
                areaLoaded[0].Tables[0].Rows.Add("Attribut1", "Attribut2", "Attribut3");
    Ce qui revient à avoir en faite :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
     
    DataSet:     myDataSet
                     -------------
    tables:       |  test         |
                     -------------
    Colonnes1: | "Attributs1" |
    Colonnes2: |  "Attributs2"|
    Colonnes3: |  "Attributs3"|
    Est-ce bien correct?

  9. #9
    Rédacteur
    Avatar de Louis-Guillaume Morand
    Homme Profil pro
    Cloud Architect
    Inscrit en
    Mars 2003
    Messages
    10 839
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Hauts de Seine (Île de France)

    Informations professionnelles :
    Activité : Cloud Architect
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Mars 2003
    Messages : 10 839
    Par défaut
    à vue de nez, oui. mais par habitude, on met les colonnes en haut

    ce qui donne une table de trois colonnes, ayant UNE ligne d'enregistrement.

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
      col1  |   col2    | col3
    ___________________________
     attr1  |   attr2   | attr3
    toi, tu sembles confondre DataRow (horizontal) et DataColumns (vertical). Te goure pas dans ta conception ou alors ta table va avoir autant de colonnes que d'enregistrements dans ton XML

  10. #10
    Membre éclairé
    Inscrit en
    Mai 2006
    Messages
    397
    Détails du profil
    Informations forums :
    Inscription : Mai 2006
    Messages : 397
    Par défaut
    C'est mes cours de modélisation qui ressortent c'est pour ça ^^

    Edit: J'ai peut etre mal représenté la table, mais en gros ce que j'ai voulus faire, c'est montrer que on peut très bien insérer des rows pour les colonnes, et ainsi avoir x lignes pour les 3 colonnes. Ce qui correspond en faite à des données pour les attributs (ce que .Net appel colonne)

  11. #11
    Membre Expert
    Homme Profil pro
    Inscrit en
    Juillet 2007
    Messages
    1 277
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Réunion

    Informations forums :
    Inscription : Juillet 2007
    Messages : 1 277
    Par défaut
    Je confirme qu'il faut ajouter les DataColumns.

  12. #12
    Membre éclairé
    Inscrit en
    Mai 2006
    Messages
    397
    Détails du profil
    Informations forums :
    Inscription : Mai 2006
    Messages : 397
    Par défaut
    Par contre, comment fait-on alors pour accéder, par exemple, à un attribut d'une colonne dans la table?

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
     
    //pour avoir l'attribut 0 de la colonne 0 (dans notre exemple "Attribut1"), ce bout de code ne marche pas
    string s = areaLoaded[0].Tables[0].Rows[0].ToString();

  13. #13
    Rédacteur
    Avatar de Louis-Guillaume Morand
    Homme Profil pro
    Cloud Architect
    Inscrit en
    Mars 2003
    Messages
    10 839
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Hauts de Seine (Île de France)

    Informations professionnelles :
    Activité : Cloud Architect
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Mars 2003
    Messages : 10 839
    Par défaut
    string s = areaLoaded[0].Tables[0].Rows[0][0].ToString();

    faut penser coordonnées comme à la bataille navale sauf que tu dis les lignes avant les colonnes


    Rows[0] = ligne 1 (mais ligne entière) donc le ToString() va te dire System.Data.DataRow.

  14. #14
    Membre éclairé
    Inscrit en
    Mai 2006
    Messages
    397
    Détails du profil
    Informations forums :
    Inscription : Mai 2006
    Messages : 397
    Par défaut
    Citation Envoyé par Louis-Guillaume Morand Voir le message
    string s = areaLoaded[0].Tables[0].Rows[0][0].ToString();

    faut penser coordonnées comme à la bataille navale sauf que tu dis les lignes avant les colonnes
    Je retiens!

    Citation Envoyé par Louis-Guillaume Morand Voir le message
    Rows[0] = ligne 1 (mais ligne entière) donc le ToString() va te dire System.Data.DataRow.
    C'est exactement ce que cela me donnait...

    Merci bien!

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

Discussions similaires

  1. Réponses: 2
    Dernier message: 01/02/2011, 18h05
  2. Classes : question de compréhension
    Par kanabzh29 dans le forum Langage
    Réponses: 6
    Dernier message: 06/11/2008, 11h26
  3. [ADO.NET 2.0] BLL / Classe Partiel DataSet Typé
    Par stephane.net dans le forum ASP.NET
    Réponses: 2
    Dernier message: 22/01/2007, 08h58
  4. Problème de compréhension d'une classe
    Par goldorax113 dans le forum Langage
    Réponses: 5
    Dernier message: 25/10/2006, 22h50
  5. Réponses: 2
    Dernier message: 31/07/2006, 06h03

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