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 :

Récupérer valeur d'un champ générer par un DataTable


Sujet :

C#

  1. #1
    Membre habitué
    Homme Profil pro
    Développeur .NET
    Inscrit en
    Octobre 2011
    Messages
    255
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

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

    Informations forums :
    Inscription : Octobre 2011
    Messages : 255
    Points : 193
    Points
    193
    Par défaut Récupérer valeur d'un champ générer par un DataTable
    Bonjour a tous,

    J'ai créer une fonction qui me liste les données de la table passer en paramètre et me retourne un DataTable.

    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
      static public DataTable ListerAll(string NomTable, string ChampDeTrie)
            {
                string requete = " SELECT * FROM " + NomTable + " ORDER BY " + ChampDeTrie;
                DataTable table = new DataTable();
                SqlConnection cx = new SqlConnection(ChaineConnexion);
     
                    SqlCommand cmd = new SqlCommand(requete, cx);
                    cmd.Connection = cx;
                    SqlDataAdapter da = new SqlDataAdapter();
                    da.SelectCommand = cmd;
                    da.Fill(table);
     
     
                return table;
            }
    J'ai ensuite dans mon appli WinForm créer une listBox ou je récupère le nom du client dans la table client :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
     
                    DataTable MaTable = Gestion.ListerAll("client", "nom");
     
                    this.listBoxClient.DataSource = MaTable;
                    this.listBoxClient.DisplayMember = "nom";
                    this.listBoxClient.ValueMember = "idclient";
    Ensuite j'ai une deuxième fonction qui me permet d’écrire une requête un peu plus élaborer.

    Dans cette fonction j'ai un paramètre "condition" qui me permet de passer une valeur dans un WHERE.

    Je souhaiterai récupérer l'idClient a chaque changement d'Item de ma listBox.

    Voici ma fonction :

    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
       static public DataTable ListerAllAvecCondition(string NomTable, string ChampDeTrie, int condition, string champCondition)
            {
                string requete = " SELECT * FROM " + NomTable + " WHERE " + champCondition + "=" + condition + " ORDER BY " + ChampDeTrie;
                DataTable table = new DataTable();
                SqlConnection cx = new SqlConnection(ChaineConnexion);
     
                SqlCommand cmd = new SqlCommand(requete, cx);
                cmd.Connection = cx;
                SqlDataAdapter da = new SqlDataAdapter();
                da.SelectCommand = cmd;
                da.Fill(table);
     
     
                return table;
            }
    Merci de votre aide.

  2. #2
    Invité
    Invité(e)
    Par défaut
    Citation Envoyé par benny-blanco Voir le message
    Je souhaiterai récupérer l'idClient a chaque changement d'Item de ma listBox.
    Pour récupérer l'id du client, essaie l'instrcution suivante : int id = int.Parse(listBoxClient.SelectedValue)

  3. #3
    Membre habitué
    Homme Profil pro
    Développeur .NET
    Inscrit en
    Octobre 2011
    Messages
    255
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

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

    Informations forums :
    Inscription : Octobre 2011
    Messages : 255
    Points : 193
    Points
    193
    Par défaut
    Merci h2s84 pour ta réponse.

    Mais j'ai une erreur :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
     int id = int.Parse(listBoxClient.SelectedValue);
    L'erreur :
    La méthode surchargée correspondant le mieux a int.Parse(string) possède des arguments non valides.
    Merci pour votre aide.

  4. #4
    Membre habitué
    Homme Profil pro
    Développeur .NET
    Inscrit en
    Octobre 2011
    Messages
    255
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

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

    Informations forums :
    Inscription : Octobre 2011
    Messages : 255
    Points : 193
    Points
    193
    Par défaut
    J'ai finalement changer de methodes pour remplir ma listBox.

    J'utilise une fonction qui renvoie un objet metier.

    J'attribu ensuite la valeur de l'idClient a ValueMenber du listBox le tout dans un foreach pour parcourir ma collection.

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
     
        foreach (Client DataClient in Gestion.ListerClient(0))
                    {
                        //rempli le datatable des données dans l'ordre des colonnes situé au dessus
                        clientTb.Rows.Add(DataClient.idClient, DataClient.nom, DataClient.prenom, DataClient.adresse, DataClient.tel, DataClient.email);
                        //Appel de la fonction ToString de la classe client pour remplir la listBox
                        this.listBoxClient.Items.Add(DataClient.ToString());
                        this.listBoxClient.ValueMember = DataClient.idClient.ToString();
                    }
                    this.dataGridViewClient.DataSource = clientTb;
                    this.listBoxClient.Sorted = true;
    Le probleme est biensur que a chaque boucle la valeur de valueMenber est ecraser. Seul la dernière reste.

    De plus ce code est écrit dans le formLoad et quand j'appel le valueMenber dans la fonction SelectedIndexChanged je n'est plus accès a ces valeur.

    La valeur devient " Null ".

    Je suis coincé et n'arrive plus a avancé malgrès mes recherche.

    Voci une capture de mon appli :



    En gros, je voudrai que lorsque je clique sur Dupond Jean dans la listBox, s'affiche dans le DataGridView du bas les détail de ses commandes.

    Merci a vous pour votre aide.

  5. #5
    Membre habitué
    Homme Profil pro
    Développeur .NET
    Inscrit en
    Octobre 2011
    Messages
    255
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

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

    Informations forums :
    Inscription : Octobre 2011
    Messages : 255
    Points : 193
    Points
    193
    Par défaut
    J'ai finalement réussi. Je donne le code pour ceux qui pourrais être intéressé :

    J'ai tout d'abord créer une DataTable. Dans un foreach j'ai ajouter l'ensemble de mes données de ma table client.

    Une fois ceux-ci effectué, j'ai défini le DataSource, le DisplayMenber et le ValuesMenber de mon listBox en relation avec mon DataTable.

    Ensuite dans l'évènement SelectedIndexChanged,

    J'ai tous simplement intégrés dans ma requête la value de l’élément sélectionné dans la listBox, parsé en int comme la très bien suggérer h2s84.

    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
     
                    DataTable clientTb = new DataTable("client");
                    clientTb.Columns.Add("N° Client");
                    clientTb.Columns.Add("Nom");
                    clientTb.Columns.Add("Prénom");
                    clientTb.Columns.Add("Adresse");
                    clientTb.Columns.Add("Téléphone");
                    clientTb.Columns.Add("Email");
     
                    foreach (Client DataClient in Gestion.ListerClient(0))
                    {
                        //rempli le datatable des données dans l'ordre des colonnes situé au dessus
                        clientTb.Rows.Add(DataClient.idClient, DataClient.nom, DataClient.prenom, DataClient.adresse, DataClient.tel, DataClient.email);
                        //Appel de la fonction ToString de la classe client pour remplir la listBox
     
                    }
     
                    //Ajout dans la listBox des elemens de la DataTable 
                    this.listBoxClient.DataSource = clientTb;
                    this.listBoxClient.DisplayMember =clientTb.Columns[1].ToString();
                    this.listBoxClient.ValueMember = clientTb.Columns[0].ToString();

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
     
     
      private void listBoxClient_SelectedIndexChanged(object sender, EventArgs e)
            {
                try
                {
                    int id = int.Parse(this.listBoxClient.SelectedValue.ToString());
                    string requete = "SELECT cm.idcom,c.idclient,c.nom,cm.quantite,cm.datecom ";
                    requete += "FROM commande cm, client c ";
                    requete += "WHERE c.idclient = cm.idclient AND c.idclient = " + id;
    Au plaisir

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

Discussions similaires

  1. Récupérer la valeur d'un champ texte par programmation
    Par walidinfo dans le forum Développement Web en Java
    Réponses: 0
    Dernier message: 26/11/2010, 17h20
  2. Réponses: 6
    Dernier message: 15/09/2006, 20h51
  3. Réponses: 3
    Dernier message: 24/08/2006, 11h56
  4. Réponses: 10
    Dernier message: 11/03/2006, 01h51
  5. Réponses: 1
    Dernier message: 22/12/2005, 11h29

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