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

C# Discussion :

Remplir une BindingList avec des données fraîchement récupérées en Base SQL


Sujet :

C#

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre averti
    Homme Profil pro
    Etudiant
    Inscrit en
    Janvier 2016
    Messages
    54
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 28
    Localisation : France, Sarthe (Pays de la Loire)

    Informations professionnelles :
    Activité : Etudiant

    Informations forums :
    Inscription : Janvier 2016
    Messages : 54
    Par défaut Remplir une BindingList avec des données fraîchement récupérées en Base SQL
    Bonjour à tous !
    Le titre en dit beaucoup déjà mais voici mon problème :
    Je souhaite remplir une DataGridView avec des contacts stockés dans une base SQL et afficher ceux dont l'ID correspond à celui entré dans ma textbox.

    J'ai donc fait ma requête et ai créé une BindingList<Contact> contacts que je voudrais "remplir" avec les contacts récupérés suite à ma requête (ceux dont l'ID correspond, en gros !)
    Comment puis-je m'y prendre ?

    Je vous envoie quelques parties du code concerné :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    DgvContact.DataSource = contacts;
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    public static string ContactInfoByID_SQLServer(string IDCRM)
              {
                return String.Format("SELECT Contact_Name +' '" +
                    "+ Contact_FirstName AS Contact_Info" + 
                    ", Contact_Phone " +
                    ", Contact_Email " + 
                    "FROM Contact " +
                    "WHERE id = '{0}'", IDCRM);
              }
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
     
              /// <summary>
              /// Liste de contacts à importer
              /// </summary>
              private BindingList<Contact> contacts = new BindingList<Contact>();
    Vous remerciant par avance !

    Tutu.

    EDIT : A force de recherche, j'ai compris que cela ne pouvait marcher dans mon contexte et je modifie donc ma question xD
    je vous envoie le Code, expliquer à blanc m'est difficile :

    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
     
    private void LoadClientByID()
            {
                //string intermediaire = Helpers.QueryHelper.ContactInfoByID_SQLServer(TbIDCRM.Text);
                string intermediaire = Helpers.QueryHelper.ContactInfoByPhoneNumber_SQLServer(TbIDCRM.Text); //Récupère le string.Format de la requête (qui est le même que celui avant l'EDIT !)
     
                SqlConnection maConnexion = Helpers.Utils.CreateSqlConnection(); //Appel d'une méthode qui me renvoi la connexion à la BDD SQL
                maConnexion.Open();
     
                SqlCommand maCommande = new SqlCommand();
                maCommande.Connection = maConnexion;
                maCommande.CommandText = intermediaire; //Exécution de la requête récupérée au string.Format
     
                SqlDataReader Reader = maCommande.ExecuteReader(); //Création d'un Reader qui va ajouter des contacts tant qu'il est possible d'avancer à l'enregistrement suivant
     
                if (Reader.HasRows)
                {
                    while (Reader.Read())
                    {
                        contacts.Add(Reader.GetSqlValue(0)); //C'est ici qu'une question sauvage apparaît !!! 
                        //private BindingList<Contact> contacts, Comment parser les données de la BDD SQL dans le type <Contact> pour pouvoir ajouter un contact justement ?
                    }
                }
                Reader.Close();
     
                maConnexion.Close();
            }
    Comment parser les données de la BDD SQL dans le type <Contact> pour pouvoir ajouter un contact ?
    J'essaye (comme vous pouvez le voir dans la balise code) un grand nombre de Propriétés "Get[...]()" mais je ne trouve pas mon bonheur ! J'ai bientôt épuisé toute les propriétés du site msdn ! A l'aide !!!!

  2. #2
    Membre extrêmement actif
    Inscrit en
    Avril 2008
    Messages
    2 573
    Détails du profil
    Informations personnelles :
    Âge : 65

    Informations forums :
    Inscription : Avril 2008
    Messages : 2 573
    Par défaut
    bonjour


    J'essaye (comme vous pouvez le voir dans la balise code) un grand nombre de Propriétés "Get[...]()" mais je ne trouve pas mon bonheur ! J'ai bientôt épuisé toute les propriétés du site msdn ! A l'aide !!!!
    voici ton bonheur !!!
    en supposant que ton class data soit:
    1/code behins .cs
    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
     
     
    public class Contact
        {
            private int _ID;
            public int ID
            {
                get { return _ID; }
                set { _ID = value; }
            }
            private string _Name;
            public string Name
            {
                get { return _Name; }
                set { _Name = value;  }
            }
            private string _Adresse;
            public string Adresse
            {
                get { return _Adresse; }
                set { _Adresse = value;  }
            }
            private decimal  _Salaire;
            public decimal Salaire
            {
                get { return _Salaire; }
                set { _Salaire = value;  }
            }
        }
    le code behind.cs revu du form :
    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
    49
    50
    51
    52
    53
    54
    55
    56
    57
    58
    59
    60
    61
    62
    63
    64
    65
    66
    67
    68
     
     
    using System;
    using System.Collections.Generic;
    using System.ComponentModel;
    using System.Data;
    using System.Drawing;
    using System.Linq;
    using System.Text;
    using System.Windows.Forms;
     
    namespace WinAppComponent2
    {
     
        public partial class Form1 : Form
        {
            private BindingList<Contact> contacts = null;
            public Form1()
            {
                InitializeComponent();
            }
     
            private void button1_Click(object sender, EventArgs e)
            {
                contacts = LoadClientByID();
            }
            private BindingList<Contact> LoadClientByID()
            {
                //string intermediaire = Helpers.QueryHelper.ContactInfoByID_SQLServer(TbIDCRM.Text);
                string intermediaire = Helpers.QueryHelper.ContactInfoByPhoneNumber_SQLServer(TbIDCRM.Text); //Récupère le string.Format de la requête (qui est le même que celui avant l'EDIT !)
     
                SqlConnection maConnexion = Helpers.Utils.CreateSqlConnection(); //Appel d'une méthode qui me renvoi la connexion à la BDD SQL
                maConnexion.Open();
     
                SqlCommand maCommande = new SqlCommand();
                maCommande.Connection = maConnexion;
                maCommande.CommandText = intermediaire; //Exécution de la requête récupérée au string.Format
     
                SqlDataReader Reader = maCommande.ExecuteReader(); //Création d'un Reader qui va ajouter des contacts tant qu'il est possible d'avancer à l'enregistrement suivant
     
                //***********************************************************
                BindingList<Contact> LaListe = new BindingList<Contact>();
                if (Reader.HasRows)
                {
                    while (Reader.Read())
                    {
                        LaListe.Add(Reader.GetSqlValue(0)); //C'est ici qu'une question sauvage apparaît !!! 
                        //private BindingList<Contact> contacts, Comment parser les données de la BDD SQL dans le type <Contact> pour pouvoir ajouter un contact justement ?
                        // Create a Contact object that wraps the current record.
                        Contact  ct = new Contact(){
                          ID = (int)Reader["ID"],
                          Name= (string)Reader["Name"],
                          Adresse = (string)Reader["Adresse"],
                          Salaire =  (decimal)Reader["Salaire"]
                        };
                        // Add to collection
                        LaListe.Add(ct);
                    }
                }
                Reader.Close();
     
                maConnexion.Close();
     
                return LaListe;
            //***********************************************************
            }
        }
    }
    bon code....

  3. #3
    Membre averti
    Homme Profil pro
    Etudiant
    Inscrit en
    Janvier 2016
    Messages
    54
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 28
    Localisation : France, Sarthe (Pays de la Loire)

    Informations professionnelles :
    Activité : Etudiant

    Informations forums :
    Inscription : Janvier 2016
    Messages : 54
    Par défaut
    Une super idée qui m'a corrigé certains points ! Merci !

    Cependant, pour ce qui est du problème principal, j'avais déjà essayé cette méthode et j'obtient toujours la même erreur :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    LaListe.Add(Reader.GetSqlValue(0));
    "Argument 1 : conversion impossible de 'object' en 'DEMO_SDK_CRM.Classes.Contact' "




    De plus :
    Contact ct = new Contact()
    Sur le mot Contact, on obtient l'erreur suivante :
    Parmi les arguments spécifiés, aucun ne correspond au paramètre formel obligatoire 'ID' de 'Contact.Contact(Guid, string, string, string, string)

    J'ai au début pensé que mettre l'ID en string était une erreur, je l'ai donc changé comme tu peut le voir.
    Malheureusement l'erreur persiste (oui j'ai bien mis l'using pour le Guid)... Un constructeur pour Contact dans la classe Form1 est-il nécessaire ?



    Je rajouterai également que, même si ça à l'air de marcher, je ne comprend pas (et j'aimerais le comprendre pour pouvoir l'exploiter plus aisément par la suite !) ce code-ci :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
     
    ID = (Guid)Reader["ID"],
                            LastName = (string)Reader["LastName"],
                            FirstName = (string)Reader["FirstName"],
                            PhoneNumber = (string)Reader["PhoneNumber"],
                            Mail = (string)Reader["Mail"]
    A quoi correspondent les éléments entre guillemets ? En fait le concept même du Reader m'échappe ! Je vois à quoi il sert mais ne sait pas comment il fonctionne !

    Merci encore de m'accorder de ton temps,
    Bien à toi,
    Tutu.

  4. #4
    Membre confirmé
    Homme Profil pro
    Chef de projet, développeur .net
    Inscrit en
    Juin 2010
    Messages
    76
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 39
    Localisation : France, Finistère (Bretagne)

    Informations professionnelles :
    Activité : Chef de projet, développeur .net
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Juin 2010
    Messages : 76
    Par défaut
    Salut

    Le reader permet de naviguer dans les éléments retourné par ta requête.

    fait passer à la ligne suivante de résultat et renvoi vrai si il y a bien une ligne suivante, faux sinon.

    ensuite
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    Reader["Nom_de-colonne"]
    Permet d'accéder à la valeur de la colonne indiqué pour la ligne en cours

  5. #5
    Membre averti
    Homme Profil pro
    Etudiant
    Inscrit en
    Janvier 2016
    Messages
    54
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 28
    Localisation : France, Sarthe (Pays de la Loire)

    Informations professionnelles :
    Activité : Etudiant

    Informations forums :
    Inscription : Janvier 2016
    Messages : 54
    Par défaut
    D'accord je comprend !

    Dans ce cas, si le
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    Reader["Nom_De_Colonne"]
    renvoi la valeur directement, le
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    LaListe.Add(Reader.GetSqlValue(0));
    est inutile, non ?

    Enfait, on envoi dans LaListe deux choses successivement : Le Reader.GetSqlValue PUIS le contact créé à l'aide des données du Reader ! Autant supprimer le GetSqlValue ?

    Je n'arrive toujours pas à comprendre ce que je fait mal et je n’emmêle les pinceaux !
    Je vous envoi le code que j'ai trifouillé un peu de partout de façon à ce que ce soit le plus clair possible et qu'on m'explique pourquoi ma table contact ne contient pas de contact mais une chaine de caractère dégueulasse de type "System.ComponentModel.BindingList`1[Demo_SDK_CRM.Classes.Contact]" !

    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
     
    private void BtRechercher_Click(object sender, EventArgs e)
            {
                //A chaque recherche, suppresion de la recherche et de l'affichage DataGridView précédent
                LaListe.Clear();
     
                //Import d'un client selon son ID_CRM
                contacts = LoadClientByID();
                DgvContact.DataSource = contacts;
     
                MessageBox.Show(contacts.ToString()); //#DEBUG - Vérification chaine de caractère récupérée dans BindingList<Contact>contacts et affichage en MessageBox
     
     
                //Formatage des noms des colonnes de la grille
                if (DgvContact.Columns["LastName"] != null)
                    DgvContact.Columns["LastName"].HeaderText = "Nom";
                if (DgvContact.Columns["FirstName"] != null)
                    DgvContact.Columns["FirstName"].HeaderText = "Prénom";
                if (DgvContact.Columns["PhoneNumber"] != null)
                    DgvContact.Columns["PhoneNumber"].HeaderText = "Téléphone";
                if (DgvContact.Columns["Mail"] != null)
                    DgvContact.Columns["Mail"].HeaderText = "Mail";
     
            }
    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
     
    private BindingList<Contact> LoadClientByID()
            {
                string intermediaire = Helpers.QueryHelper.ContactInfoByInfos_SQLServer(TbRaisonSociale.Text, TbNomCivil.Text, TbTelCRM.Text); //Récupère le string.Format de la requête
     
                SqlConnection maConnexion = Helpers.Utils.CreateSqlConnection(); //Appel d'une méthode qui me renvoi la connexion à la BDD SQL
                maConnexion.Open();
     
                SqlCommand maCommande = new SqlCommand();
                maCommande.Connection = maConnexion;
                maCommande.CommandText = intermediaire; //Exécution de la requête récupérée au string.Format
     
                SqlDataReader Reader = maCommande.ExecuteReader(); //Création d'un Reader qui va ajouter des contacts tant qu'il est possible d'avancer à l'enregistrement suivant
     
                if (Reader.HasRows)
                {
                    while (Reader.Read())
                    {
     
                        Contact ct = Classes.Contact.LoadFromReader(Reader);
                        //#J'enFaisQuoi ? --> LaListe.Add(Reader.GetSqlValue(0));
     
                        //Add to collection
                        LaListe.Add(ct);
                    }
                }
                Reader.Close();
     
                maConnexion.Close();
     
                return LaListe;
            }
    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
     
    public static string ContactInfoByInfos_SQLServer(string Raison, string Nom, string Tel)
            {
                #region FILTRES DE RECHERCHE NULLABLE
                if(Raison=="")
                {
                    Raison = null;
                }
                if (Nom == "")
                {
                    Nom = null;
                }
                if (Tel == "")
                {
                    Tel = null;
                }
                #endregion
     
                if (Nom != null)
                {
                    return String.Format("SELECT Contact_Name +' '" +
                        "+ Contact_FirstName AS Contact_Info" +
                        ", Contact_Phone " +
                        ", Contact_Email " +
                        "FROM Contact " +
                        "WHERE Contact_Name = '{0}' AND Contact_Civility = '{1}' AND Contact_Phone = '{2}' AND Contact_CellPhone = '{2}'", Nom, Raison, Tel );
                }
     
                else
                {
                    return String.Format("SELECT Contact_Name +' '" +
                        "+ Contact_FirstName AS Contact_Info" +
                        ", Contact_Phone " +
                        ", Contact_Email " +
                        "FROM Contact " +
                        "WHERE Contact_Civility = '{0}' AND Contact_Phone = '{1}' AND Contact_CellPhone = '{1}'", Raison, Tel);
                }
            }
    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
     
    public static Contact LoadFromReader(SqlDataReader Reader)
            {
                Guid ID;
                string LastName, FirstName, PhoneNumber, Mail;
                Contact ct;
     
                ID = (Guid)Reader["ID"];
                LastName = (string)Reader["LastName"];
                FirstName = (string)Reader["FirstName"];
                PhoneNumber = (string)Reader["PhoneNumber"];
                Mail = (string)Reader["Mail"];
     
                ct = new Contact(ID, LastName, FirstName, PhoneNumber, Mail);
                return ct;
            }
    Je suis conscient que tout celà est TRES TRES TRES TRES BEAUCOUP brouillon
    C'est d'ailleurs sûrement pour ça que je m'y perd autant. Aussi, je reste à votre entière disposition pour vous aider à m'aider moi !

  6. #6
    Membre confirmé
    Homme Profil pro
    Chef de projet, développeur .net
    Inscrit en
    Juin 2010
    Messages
    76
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 39
    Localisation : France, Finistère (Bretagne)

    Informations professionnelles :
    Activité : Chef de projet, développeur .net
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Juin 2010
    Messages : 76
    Par défaut
    Citation Envoyé par Sillimon Voir le message
    D'accord je comprend !

    Dans ce cas, si le
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    Reader["Nom_De_Colonne"]
    renvoi la valeur directement, le
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    LaListe.Add(Reader.GetSqlValue(0));
    est inutile, non ?


    Enfait, on envoi dans LaListe deux choses successivement : Le Reader.GetSqlValue PUIS le contact créé à l'aide des données du Reader ! Autant supprimer le GetSqlValue ?
    effectivement le GetSqlValue n'a aucune utilité ici.

    Je n'arrive toujours pas à comprendre ce que je fait mal et je n’emmêle les pinceaux !
    Je vous envoi le code que j'ai trifouillé un peu de partout de façon à ce que ce soit le plus clair possible et qu'on m'explique pourquoi ma table contact ne contient pas de contact mais une chaine de caractère dégueulasse de type "System.ComponentModel.BindingList`1[Demo_SDK_CRM.Classes.Contact]" !
    Si dans ton DatagridView c'est "System.ComponentModel.BindingList`1[Demo_SDK_CRM.Classes.Contact]" qui s'affiche et non les valeurs de tes propriétés, c'est que tu n'as pas spécifié le binding des colonnes de ton DatagridView.
    Il faut indiquer pour chaque colonne le DataMemberBindingPath de la propriété qu'elle doit afficher.

    Ton gridview est-il en mode "colonne générée automatiquement" ou as tu spécifié les colonnes?

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

Discussions similaires

  1. Remplir une bdd avec des données libre de droit
    Par wyzer dans le forum Débuter
    Réponses: 0
    Dernier message: 29/06/2011, 16h31
  2. [MySQL] Remplir une table avec des données déjà existantes
    Par Bruno.C dans le forum PHP & Base de données
    Réponses: 1
    Dernier message: 08/07/2008, 08h28
  3. remplir une table avec des données aléatoire
    Par jamal_id dans le forum SQL
    Réponses: 3
    Dernier message: 17/10/2007, 10h11
  4. [MySQL] Remplir un array() avec des données issues d'une bdd
    Par fichtre! dans le forum PHP & Base de données
    Réponses: 2
    Dernier message: 18/12/2006, 17h03
  5. [VBA-A]Remplir une textbox avec des données de tables.
    Par cuicui08 dans le forum VBA Access
    Réponses: 1
    Dernier message: 24/03/2006, 10h28

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