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

Windows Forms Discussion :

Problème d'affichage des données d'une DataTable


Sujet :

Windows Forms

  1. #1
    Membre actif Avatar de DarkSeiryu
    Homme Profil pro
    Développeur Java
    Inscrit en
    Janvier 2009
    Messages
    425
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 35
    Localisation : France, Haute Savoie (Rhône Alpes)

    Informations professionnelles :
    Activité : Développeur Java

    Informations forums :
    Inscription : Janvier 2009
    Messages : 425
    Points : 275
    Points
    275
    Par défaut Problème d'affichage des données d'une DataTable
    Bonsoir !

    Tout est dans le titre, mais pour détailler j'ai une méthode qui me sert à faire des requêtes SQL, et qui retourne une List<string> remplie par une DataTable, elle même remplit par un DataAdapter.

    Le souci est que lorsque j'essaie d'afficher une des lignes de ma List<string> dans un Label, le seul texte présent est :
    System.Data.DataRow
    Voici le code de ma méthode SQL :
    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
    public List<string> SQLSelect_nx1(string unChamp, string uneTable)
        {
            this.fctConnectDB();
            OdbcCommand cmdSelect = new OdbcCommand();
            cmdSelect.Connection = connectionDB;
            cmdSelect.CommandText = "SELECT " + unChamp + " FROM " + uneTable + ";";
            OdbcDataAdapter my_DA = new OdbcDataAdapter(cmdSelect);
            DataTable my_DT = new DataTable();
            my_DA.Fill(my_DT);
     
            List<string> myList = new List<string>();
            for (int i = 0; i < my_DT.Rows.Count; i++)
            {
                myList.Add(my_DT.Rows[i].ToString());
            }
            this.fctDisconnectDB();
            return myList;
        }
    Le code de ma méthode qui appelle la méthode SQL :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    public string getDemonsSauvage()
        {
            List<string> listNomDemons = cs_SQL.SQLSelect_nx1("demNom", "demons");
            int i = this.fctRandom(0, listNomDemons.Count);
            string nomDemons = listNomDemons[i];
            return nomDemons;
        }
    Le code de la méthode fctRandom() :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    private int fctRandom(int nbDepart, int nbFin)
        {
            Random rdm = new Random();
            int i = rdm.Next(nbDepart, nbFin);
            return i;
        }
    Et enfin le code qui me permet d'afficher le texte dans mon label :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    lb_nom_demon.Text = cs_WD.getDemonsSauvage();
    Comment faire pour que ce soit le texte de ma table qui soit retourné ?

    Par avance, merci.

  2. #2
    Rédacteur/Modérateur


    Homme Profil pro
    Développeur .NET
    Inscrit en
    Février 2004
    Messages
    19 875
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 42
    Localisation : France, Paris (Île de France)

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

    Informations forums :
    Inscription : Février 2004
    Messages : 19 875
    Points : 39 749
    Points
    39 749
    Par défaut
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    myList.Add(my_DT.Rows[i].ToString());
    La classe DataRow ne redéfinit pas la méthode ToString, donc ToString renvoie le nom du type (c'est l'implémentation par défaut, héritée de object).

    Il faut récupérer un champ spécifique de la DataTable :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    myList.Add(my_DT.Rows[i][unChamp] as string);

  3. #3
    Membre actif Avatar de DarkSeiryu
    Homme Profil pro
    Développeur Java
    Inscrit en
    Janvier 2009
    Messages
    425
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 35
    Localisation : France, Haute Savoie (Rhône Alpes)

    Informations professionnelles :
    Activité : Développeur Java

    Informations forums :
    Inscription : Janvier 2009
    Messages : 425
    Points : 275
    Points
    275
    Par défaut
    Merci tomlev, ça marche niquel !

  4. #4
    Membre actif Avatar de DarkSeiryu
    Homme Profil pro
    Développeur Java
    Inscrit en
    Janvier 2009
    Messages
    425
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 35
    Localisation : France, Haute Savoie (Rhône Alpes)

    Informations professionnelles :
    Activité : Développeur Java

    Informations forums :
    Inscription : Janvier 2009
    Messages : 425
    Points : 275
    Points
    275
    Par défaut
    Par contre, j'ai un souci sur une autre méthode :
    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
    public List<string> SQLSelect_nxn(string uneTable)
        {
            this.fctConnectDB(); // Appelle de la méthode de connexion.
            OdbcCommand cmdSelect = new OdbcCommand(); // Instancie une nouvelle commande SQL.
            cmdSelect.Connection = connectionDB; // Indique que la commande est connectée à la DB que la connexion définit.
            cmdSelect.CommandText = "SELECT * FROM " + uneTable + ";"; // Commande SQL.
            OdbcDataAdapter my_DA = new OdbcDataAdapter(cmdSelect);
            DataTable my_DT = new DataTable();
            my_DA.Fill(my_DT);
     
            List<string> myList = new List<string>();
            for (int i = 0; i < my_DT.Rows.Count; i++)
            {
                myList.Add(my_DT.Rows[i][unChamp] as string);
            }
            this.fctDisconnectDB();
            return myList;
        }
    La seule différence est au niveau de la requête, donc comment faire pour que ma List<string> soit rempli avec le résultat de la requête ?

    Merci.

  5. #5
    Rédacteur/Modérateur


    Homme Profil pro
    Développeur .NET
    Inscrit en
    Février 2004
    Messages
    19 875
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 42
    Localisation : France, Paris (Île de France)

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

    Informations forums :
    Inscription : Février 2004
    Messages : 19 875
    Points : 39 749
    Points
    39 749
    Par défaut
    Ben ça a pas vraiment de sens... tu fais un "SELECT *", donc a priori tu récupères plusieurs champs. Qu'est-ce que tu veux mettre dans ta List<string> exactement ? Si c'est un champ en particulier, met le nom du champ à la place de unChamp

  6. #6
    Membre actif Avatar de DarkSeiryu
    Homme Profil pro
    Développeur Java
    Inscrit en
    Janvier 2009
    Messages
    425
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 35
    Localisation : France, Haute Savoie (Rhône Alpes)

    Informations professionnelles :
    Activité : Développeur Java

    Informations forums :
    Inscription : Janvier 2009
    Messages : 425
    Points : 275
    Points
    275
    Par défaut
    Non non, je veux récupérer toutes les données d'une table, et retourner une List<string> qui contient ces données.

  7. #7
    Rédacteur/Modérateur


    Homme Profil pro
    Développeur .NET
    Inscrit en
    Février 2004
    Messages
    19 875
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 42
    Localisation : France, Paris (Île de France)

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

    Informations forums :
    Inscription : Février 2004
    Messages : 19 875
    Points : 39 749
    Points
    39 749
    Par défaut
    Dans ce cas il faut que tu concatènes les champs de chaque DataRow
    Mais ça me parait pas très pratique d'avoir une chaine qui contient toutes les données de la ligne concaténées
    Tu veux en faire quoi après de cette List<string> ?

  8. #8
    Membre actif Avatar de DarkSeiryu
    Homme Profil pro
    Développeur Java
    Inscrit en
    Janvier 2009
    Messages
    425
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 35
    Localisation : France, Haute Savoie (Rhône Alpes)

    Informations professionnelles :
    Activité : Développeur Java

    Informations forums :
    Inscription : Janvier 2009
    Messages : 425
    Points : 275
    Points
    275
    Par défaut
    Pour l'instant rien de prévu, c'est juste que je prévois de faire une méthode avec ce genre de requête pour plus tard car il est fort possible qu'on ait a en utiliser pour notre site.

    Après je pense qu'on s'en servira pour afficher certaines données, telles des images par exemple.

    On fait la List<string> dans la méthode de la classe SQL, et après on tri les données dont on a besoin.

    'suis pas sur que ce soit vraiment utile mais c'est ce qui m'a été demandé de faire donc voilà.

  9. #9
    Rédacteur/Modérateur


    Homme Profil pro
    Développeur .NET
    Inscrit en
    Février 2004
    Messages
    19 875
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 42
    Localisation : France, Paris (Île de France)

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

    Informations forums :
    Inscription : Février 2004
    Messages : 19 875
    Points : 39 749
    Points
    39 749
    Par défaut
    Ben je vois pas trop l'intérêt de faire ça, autant utiliser directement la DataTable...
    Mais bon, si on t'a demandé de le faire... y a sûrement une bonne raison

  10. #10
    Membre émérite
    Profil pro
    Mangeur de gauffre
    Inscrit en
    Octobre 2007
    Messages
    4 413
    Détails du profil
    Informations personnelles :
    Localisation : Belgique

    Informations professionnelles :
    Activité : Mangeur de gauffre

    Informations forums :
    Inscription : Octobre 2007
    Messages : 4 413
    Points : 2 498
    Points
    2 498
    Par défaut
    J'avoue que c'est franchement bizarre !
    Pourquoi ne pas utiliser directement la datatable

    Ca m'interpelle d'autant plus qu'aujourd'hui meme je cherche la meilleure methode pour faire le chemin inverse : creer une datatable a partir d'une List<T>
    Parce que la datatable dispose des interface facilitant les tri les filtre le binding en dgv etc. avec Une List<T> il faut definir tout ca !

    Je ne dis pas qu'une liste est tres utile mais pour certaine manipulation la datatable peut etre tres pratique or dans ton cas elle est livrée toute chaude depuis le producteur
    « Ils ne savaient pas que c'était impossible, alors ils l'ont fait ». (Twain)

  11. #11
    Membre actif Avatar de DarkSeiryu
    Homme Profil pro
    Développeur Java
    Inscrit en
    Janvier 2009
    Messages
    425
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 35
    Localisation : France, Haute Savoie (Rhône Alpes)

    Informations professionnelles :
    Activité : Développeur Java

    Informations forums :
    Inscription : Janvier 2009
    Messages : 425
    Points : 275
    Points
    275
    Par défaut
    Oui vous avez raison, le mieux est de retourner la DataTable directement, et faire le tri une fois que j'ai effectué un appel de la méthode.

    Merci !

  12. #12
    Membre émérite
    Profil pro
    Mangeur de gauffre
    Inscrit en
    Octobre 2007
    Messages
    4 413
    Détails du profil
    Informations personnelles :
    Localisation : Belgique

    Informations professionnelles :
    Activité : Mangeur de gauffre

    Informations forums :
    Inscription : Octobre 2007
    Messages : 4 413
    Points : 2 498
    Points
    2 498
    Par défaut
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    et après on tri les données dont on a besoin
    On trie ou on Filtre ? Ce n'est pas la meme chose !!

    Ces concept on l'ai d'etre asser souvent mélangés

    Mais de toute facon avec un DataView sur ta datatable, tu trie et tu filtre tout ce que tu veux
    « Ils ne savaient pas que c'était impossible, alors ils l'ont fait ». (Twain)

  13. #13
    Membre actif Avatar de DarkSeiryu
    Homme Profil pro
    Développeur Java
    Inscrit en
    Janvier 2009
    Messages
    425
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 35
    Localisation : France, Haute Savoie (Rhône Alpes)

    Informations professionnelles :
    Activité : Développeur Java

    Informations forums :
    Inscription : Janvier 2009
    Messages : 425
    Points : 275
    Points
    275
    Par défaut
    Oui oui trier et filtrer sont différents on est bien d'accord ^^

    Dans mon cas ce sera surement un tri ^^

    Bref je verrai bien, merci encore !

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

Discussions similaires

  1. Problème d'affichage des données de la BD dans une JList
    Par hela_sfar dans le forum Composants
    Réponses: 0
    Dernier message: 15/07/2013, 15h14
  2. Réponses: 5
    Dernier message: 02/02/2009, 16h23
  3. [MySQL] Problème avec affichage des données d'une base MySQL
    Par leclone dans le forum PHP & Base de données
    Réponses: 6
    Dernier message: 27/12/2006, 12h40
  4. [MySQL] Affichage des données d'une base
    Par leloup84 dans le forum PHP & Base de données
    Réponses: 30
    Dernier message: 01/02/2006, 16h35
  5. [JTable] Problème d'affichage des données
    Par ddams dans le forum Composants
    Réponses: 2
    Dernier message: 15/09/2004, 17h07

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