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 dans un datagridview sous MySQL en c#


Sujet :

Windows Forms

  1. #1
    Membre habitué
    Profil pro
    Inscrit en
    Janvier 2009
    Messages
    323
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Janvier 2009
    Messages : 323
    Points : 128
    Points
    128
    Par défaut Problème d'affichage dans un datagridview sous MySQL en c#
    Bonjour à tous,

    Tout d'abord, merci pour toutes ces informations, ce site contient énormément de données intéressantes et pour des personnes comme moi (débutant en c#), c'est une véritable pépite.

    Venez en au fait;
    Je dois me connecter dans un serveur MySQL, récupérer le résultat de ma requète et l'afficher dans une MessageBox (par la suite, mon objectif serait de le mettre dans un datagridview, mais allons y étape par étape).

    Voici mon code :

    MySQLDriverCS.MySQLConnection conn = new MySQLDriverCS.MySQLConnection(new MySQLDriverCS.MySQLConnectionString("www.lala.com", "bdd", "login", "mdp").AsString);
    conn.Open();


    MySQLDriverCS.MySQLCommand cmd = new MySQLDriverCS.MySQLCommand("SELECT NOM_COLONNE FROM NOM_TABLE", conn);


    MySQLDriverCS.MySQLDataReader reader = cmd.ExecuteReaderEx();
    MessageBox.Show("Requête SQL done...");

    while (reader.Read())
    {
    MessageBox.Show("CIP : " + reader.ToString());

    }
    reader.Close();
    cmd.Dispose();
    Voici le résultat : un message s'affichant dans une MessageBox :
    "CIP : MySQLDriverCS.MySQLDataReader"

    Pour le moment je ne sais pas pourquoi, je continue mes recherches en esperant que quelqu'un pourra m'expliquer pourquoi ca ne fait ce que je veux (je pense que c'est tout tout bête mais pour moi, (qui a commencé le c# il y a quelques jours, c'est difficile).

  2. #2
    Membre actif
    Profil pro
    Inscrit en
    Janvier 2004
    Messages
    614
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Janvier 2004
    Messages : 614
    Points : 299
    Points
    299
    Par défaut
    salut, je n'ai pas regardé ton code, mais un post similaire a ete ouvert et traité il y a pas si longtemps.
    http://www.developpez.net/forums/d66...ntenu-dataset/
    regarde cet exemple, ca pourra peut etre t'aider

  3. #3
    Membre habitué
    Profil pro
    Inscrit en
    Janvier 2009
    Messages
    323
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Janvier 2009
    Messages : 323
    Points : 128
    Points
    128
    Par défaut
    Merci pour cette redirection de lien Skunkies, je suis en train de m'y pencher, je ne comprends pas certains ligne de code dans l'autre topic...

    Serait-il possible que tu regardes le code et m'expliquer ces lignes de code(repris sur le topic précédent) :
    MyAdapter.Fill(ds,"MyContent");
    et me dire ce qui déconne dans ce code...

    Dernière question, sur le net je trouve pas mal de personne qui transfère le résultat de la requête dans un DataSet, puis du DataSet dans le DataGridView, est-ce obligatoire ? Pourquoi ? A quoi sert-il de transferer d'une "table" à une autre ?

    Merci encore.

  4. #4
    Membre actif
    Profil pro
    Inscrit en
    Janvier 2004
    Messages
    614
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Janvier 2004
    Messages : 614
    Points : 299
    Points
    299
    Par défaut
    si tu me poses cette question
    Dernière question, sur le net je trouve pas mal de personne qui transfère le résultat de la requête dans un DataSet, puis du DataSet dans le DataGridView, est-ce obligatoire ? Pourquoi ? A quoi sert-il de transferer d'une "table" à une autre ?
    je vais me permettre de te renvoyer vers ce lien qui est la base lorsque tu dois travailler avec une base de données.
    http://dotnet.developpez.com/articles/ado2/csharp/
    l'instruction
    MyAdapter.Fill(ds,"MyContent");
    permet de mettre les lignes que ta requête ta retournée dans ton dataAdapter et de travailler desssus par la suite.

  5. #5
    Membre habitué
    Profil pro
    Inscrit en
    Janvier 2009
    Messages
    323
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Janvier 2009
    Messages : 323
    Points : 128
    Points
    128
    Par défaut
    Et bien écoutes merci pour ta patience et tes réponses explicites

    Je pense avoir déjà lu ce cours la mais je vais m'y remettre, si j'ai d'autres questions, je reviendrais dans ce topic. Si je n'ai pas de question et que mon appli marche, de mettrait le code à disposition si quelqu'un a besoin.

    Merci encore pour tes réponses.
    Redg.

  6. #6
    Membre habitué
    Profil pro
    Inscrit en
    Janvier 2009
    Messages
    323
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Janvier 2009
    Messages : 323
    Points : 128
    Points
    128
    Par défaut
    Bien!

    Après lecture du lien envoyé par skunkies, je comprends mieux, mais un trou noir subsiste : L'affichage.

    Malgré l'exemple, je n'ai pas réussi à afficher le résultat de ma requête grâce à la boucle. A savoir que je souhaite que les résultats s'affiche - pour commencer - uns à uns dans une MessageBox.

    Une idée ?

    Edit : dsl pour le double post.

    REDIT :

    MySQLDriverCS.MySQLConnection conn = new MySQLDriverCS.MySQLConnection(new MySQLDriverCS.MySQLConnectionString("www.lala.com", "bdd", "login", "mdp").AsString);
    conn.Open();
    MySQLDriverCS.MySQLDataAdapter MyAdapter = new MySQLDriverCS.MySQLDataAdapter("SELECT CODE_CIP_PRODUIT FROM produit", conn);

    DataSet ds = new DataSet();
    MyAdapter.Fill(ds);


    // Affichage du contenu de ds
    MessageBox.Show("CIP : " + ds.ToString());
    conn.Close();


    Comme on peut le constater ici, jme suis amusé à voir ce qu'il y a dans ds ... et il m'affiche le type de ds Oo

    Merci pour les éventuelles réponses

  7. #7
    Membre actif
    Profil pro
    Inscrit en
    Janvier 2004
    Messages
    614
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Janvier 2004
    Messages : 614
    Points : 299
    Points
    299
    Par défaut
    voici deux exemples d'affichage un dans une listbox, lautre dans un DGV.
    1 listbox:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    foreach (DataRow dataRow in dataTable.Rows)
                    {                    listBox1.Items.Add(dataRow["TON_CHAMP"].ToString();});
    2 dans un DGV :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    dataGridView1.DataSource = dataSet.Tables["TA TABLE"].DefaultView;
    il te suffit de binder ta source avec ton dgv.
    fais voir le code que tu as fait et qui ne marche pas.

  8. #8
    Membre habitué
    Profil pro
    Inscrit en
    Janvier 2009
    Messages
    323
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Janvier 2009
    Messages : 323
    Points : 128
    Points
    128
    Par défaut
    Bon, j'ai repris l'exemple pour le DataGridView, l'erreur qu'il me dit est (à l'exécution bien sur) : La référence d'objet n'est pas définie à une instance d'un objet



    private void button1_Click(object sender, EventArgs e)
    {
    MySQLDriverCS.MySQLConnection conn = new MySQLDriverCS.MySQLConnection(new MySQLDriverCS.MySQLConnectionString("www.lala.com", "bdd", "login", "mdp").AsString);
    conn.Open();
    MySQLDriverCS.MySQLDataAdapter MyAdapter = new MySQLDriverCS.MySQLDataAdapter("SELECT CODE_CIP_PRODUIT FROM produit", conn);

    DataSet ds = new DataSet();
    MyAdapter.Fill(ds);

    // Affichage du contenu de ds
    DataGridView dataGridView1 = new DataGridView();
    dataGridView1.DataSource = ds.Tables["produit"].DefaultView;



    conn.Close();
    }

  9. #9
    Membre actif
    Profil pro
    Inscrit en
    Janvier 2004
    Messages
    614
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Janvier 2004
    Messages : 614
    Points : 299
    Points
    299
    Par défaut
    Essaye ca :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    MyAdapter.Fill(ds,"produit");

  10. #10
    Membre habitué
    Profil pro
    Inscrit en
    Janvier 2009
    Messages
    323
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Janvier 2009
    Messages : 323
    Points : 128
    Points
    128
    Par défaut
    En effet, je n'ai plus d'erreur à l'exécution. Mais rien ne s'affiche.

  11. #11
    Membre actif
    Profil pro
    Inscrit en
    Janvier 2004
    Messages
    614
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Janvier 2004
    Messages : 614
    Points : 299
    Points
    299
    Par défaut
    est ce que tu es certain d'avoir des lignes qui correspondent a te requete?

  12. #12
    Membre habitué
    Profil pro
    Inscrit en
    Janvier 2009
    Messages
    323
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Janvier 2009
    Messages : 323
    Points : 128
    Points
    128
    Par défaut
    Oui j'ai testé cette requête dans phpadmin, et elle m'a sorti une floppé de CIP

    Est ce que peut etre la création du datagrid qui pourrait déranger l'affichage?

  13. #13
    Membre actif
    Profil pro
    Inscrit en
    Janvier 2004
    Messages
    614
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Janvier 2004
    Messages : 614
    Points : 299
    Points
    299
    Par défaut
    en fait j'ai pour habitude de creer mon dgv dans le designer.
    Donc essaye en le créant dans le designer et vois ce que ca donne.

  14. #14
    Membre habitué
    Profil pro
    Inscrit en
    Janvier 2009
    Messages
    323
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Janvier 2009
    Messages : 323
    Points : 128
    Points
    128
    Par défaut
    Je ne fais pas d'EDIT, car je pense qu'il est important de faire un autre post.
    L'erreur se trouvait bien la :
    // Affichage du contenu de ds
    DataGridView dataGridView1 = new DataGridView();
    J'ai simplement supprimé cette ligne, créé graphiquement le DGV et le resultat y est!

    Merci encore skunkies tu m'as été d'une grande aide

    Voici comme prévu le code pour ceux que ca peut intéresser :

    private void button1_Click(object sender, EventArgs e)
    {
    MySQLDriverCS.MySQLConnection conn = new MySQLDriverCS.MySQLConnection(new MySQLDriverCS.MySQLConnectionString("www.lala.com", "bdd", "login", "mdp").AsString);
    conn.Open();
    MySQLDriverCS.MySQLDataAdapter MyAdapter = new MySQLDriverCS.MySQLDataAdapter("SELECT CODE_CIP_PRODUIT FROM produit", conn);

    DataSet ds = new DataSet();
    MyAdapter.Fill(ds,"produit");

    // Affichage du contenu de ds

    dataGridView1.DataSource = ds.Tables["produit"].DefaultView;

    conn.Close();
    DLL utilisé : MySQLDriverCS.dll

    EDIT : on a répondu en même temps

  15. #15
    Membre émérite Avatar de Guulh
    Homme Profil pro
    Inscrit en
    Septembre 2007
    Messages
    2 160
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 42
    Localisation : France, Paris (Île de France)

    Informations forums :
    Inscription : Septembre 2007
    Messages : 2 160
    Points : 2 925
    Points
    2 925
    Par défaut
    Salut,

    ToString est une méthode de la clase de base Object, elle est donc accessible depuis toute instance de tout objet (puisqu'en C#, tout hérite de System.Object). Par défaut, ToString() renvoie le type de l'instance (sous forme de chaîne, bien sûr).

    Un certain nombre de types surchargent ToString(qui est une méthode virtuelle), comme par exemple int, DateTime, ...

    Mais pas DataSet ni DataReader. Pour accéder à leur contenu, un simple ToString ne suffit pas. Tu peux par contre écrire ça :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    MessageBox.Show(reader["bidule"].ToString());
    Si jamais bien sûr ta requête est du style "select haha, ... from ...". Parce qu'avec reader["haha"], tu accèdes au champ "haha" de ton reader, qui est probablement un int ou une string, qui sont des types qui ont un ToString personnalisé (ex : 4.ToString() te renvoie la chaîne "4".)
    ಠ_ಠ

  16. #16
    Membre habitué
    Profil pro
    Inscrit en
    Janvier 2009
    Messages
    323
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Janvier 2009
    Messages : 323
    Points : 128
    Points
    128
    Par défaut
    mmh, merci pour la précision Guulh

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

Discussions similaires

  1. Problème d'affichage dans une datagridview
    Par Helfy dans le forum C#
    Réponses: 0
    Dernier message: 09/05/2012, 10h03
  2. problème d'affichage dans un DataGridView
    Par maloue dans le forum VB.NET
    Réponses: 2
    Dernier message: 04/01/2012, 11h07
  3. [MySQL] problème d'affichage dans tableau avec bdd Mysql
    Par sinifer dans le forum PHP & Base de données
    Réponses: 5
    Dernier message: 01/05/2009, 09h50
  4. Réponses: 5
    Dernier message: 23/01/2009, 17h51
  5. Problème d'affichage dans des TScrollBox sous Windows Vista
    Par ILPlais dans le forum Composants VCL
    Réponses: 1
    Dernier message: 28/05/2008, 10h09

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