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 :

charger un dataGridView selon la valeur selectionné d'une listeBox


Sujet :

C#

  1. #1
    Membre confirmé Avatar de sarah_s
    Profil pro
    Inscrit en
    Avril 2007
    Messages
    90
    Détails du profil
    Informations personnelles :
    Âge : 39
    Localisation : France

    Informations forums :
    Inscription : Avril 2007
    Messages : 90
    Par défaut charger un dataGridView selon la valeur selectionné d'une listeBox
    bonjour ..
    je voudrais charger un dataGridView selon une valeur selectionné à partir d'un textBox,
    j'ai essayé de le charger d'une maniére statique,en filtrant les données graçe à une requete (dans les propriété du datagridview), ça marche ..
    maintenant il faut qu'il soit rempli selon un choix, il faut que la requete soit à l'interieur du code, ..
    quelqu'un a une idée,une suggestion..
    je bloque totalement la dessus, merci bcp
    ^^

    ps:en fait je veux afficher des données selon deux dates saisies dans deux textbox.

  2. #2
    Rédacteur/Modérateur
    Avatar de Skalp
    Homme Profil pro
    Développeur .NET
    Inscrit en
    Novembre 2006
    Messages
    1 694
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Ille et Vilaine (Bretagne)

    Informations professionnelles :
    Activité : Développeur .NET

    Informations forums :
    Inscription : Novembre 2006
    Messages : 1 694
    Par défaut
    Tu as des textbox dans lesquels tu saisis une date ?
    (tu pourrais plus simplement utiliser des DateTimePicker)

    Tu utilises ces dates pour générer une requête SQL ?

    Montre-nous un peu ton code, pour qu'on comprenne mieux ce que tu veux faire

  3. #3
    Membre confirmé Avatar de sarah_s
    Profil pro
    Inscrit en
    Avril 2007
    Messages
    90
    Détails du profil
    Informations personnelles :
    Âge : 39
    Localisation : France

    Informations forums :
    Inscription : Avril 2007
    Messages : 90
    Par défaut
    merci pour ta réponse ,tu as raison , un datetimepicker est mieux adapté,j'ai remplaçé les textbox.
    je travaille avec une base de données db2..

    le code ne contient rien de ce que je veux faire,parceque j'utilisais les propriétés du datagridview pour le remplir en premier temps,
    ..

  4. #4
    Rédacteur/Modérateur
    Avatar de Skalp
    Homme Profil pro
    Développeur .NET
    Inscrit en
    Novembre 2006
    Messages
    1 694
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Ille et Vilaine (Bretagne)

    Informations professionnelles :
    Activité : Développeur .NET

    Informations forums :
    Inscription : Novembre 2006
    Messages : 1 694
    Par défaut
    La propriété du DataGridView dont tu parles est le DataSource ?
    Tu lies ton DGV à une source de données, c'est ça ?

    J'essaie de comprendre ce que tu veux faire exactement pour te répondre au mieux, mais c'est difficile si tu ne nous donne pas plus de détails

    D'après ce que j'ai compris, tu voudrais recharger le DGV lorsque tu changes les dates, c'est ça ?
    Je te suggère de faire ça au clic d'un bouton : tu crées ta requête SQL en passant les dates en paramètres.

  5. #5
    Membre confirmé Avatar de sarah_s
    Profil pro
    Inscrit en
    Avril 2007
    Messages
    90
    Détails du profil
    Informations personnelles :
    Âge : 39
    Localisation : France

    Informations forums :
    Inscription : Avril 2007
    Messages : 90
    Par défaut
    desolée si je ne suis pas précise..je m'explique mal
    oui je veux que mon DGV se remplisse en fonction des dates que j'ai precisés..qu'il m'affiche juste les transactions effectuées entre les deux dates choisies.

    pour l'instant je ne suis pas à mon poste je vais essayer ce que tu ma suggérer demain matin..mercii
    bonne soirée

  6. #6
    Membre confirmé Avatar de sarah_s
    Profil pro
    Inscrit en
    Avril 2007
    Messages
    90
    Détails du profil
    Informations personnelles :
    Âge : 39
    Localisation : France

    Informations forums :
    Inscription : Avril 2007
    Messages : 90
    Par défaut
    bonjour..
    c'est pas la requete qui me pose probléme mais comment l'affecter au DGV dans le code et non dans ses propriétés sur la form..

    tu n'as pas une idée comment faire passer la requete au DGV au sein du code..
    mercii

  7. #7
    Membre émérite
    Profil pro
    Inscrit en
    Avril 2007
    Messages
    764
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Avril 2007
    Messages : 764
    Par défaut
    Il y a deux façons de filtrer les données :

    1/ Tu les filtres au moment où tu récupères les données depuis ta base
    Tu crées une requête paramétrée (du genre "SELECT ... WHERE laDate>? AND laDate<?", à voir selon le langage des requêtes pour ta base de données)
    Tu affectes aux paramètres les valeurs entrées dans les contrôles de ta Form (les DateTimePicker), tu envoies la requête à la base et stockes le résultat dans une DataTable.
    Tu lies la table à la grille (monDataGridView.DataSource = maDataTable) et tu affiches la grille.

    2/ Tu récupères toutes les données dans ta base, et tu veux trier uniquement au niveau de l'affichage dans ta grille
    Tu commence par envoyer ta requête (non paramétrée cette fois... du moins pas en fonction de la date) à la base et stocker le résultat dans une DataTable.
    Tu crées une DataView de ta DataTable en appliquant un filtre (propriété RowFilter) défini à partir des valeurs entrées dans les contrôles de ta Form
    Tu lies la vue à la grille (monDataGridView.DataSource = maDataView) et tu affiches la grille.

    Méthode 1 à utiliser si tu ne dois effectuer qu'un seul filtrage des données : tu accèdes une fois à la base et tu ne récupères que ce qui t'intéresse.
    Méthode 2 à utiliser si tu es susceptible de filtrer plusieurs fois les données, car autrement il faudrait se re-connecter à la base à chaque fois : tu te connectes une fois à la base, tu récupères tout, et tu filtres tranquillement après coup, en mode déconnecté.

  8. #8
    Membre confirmé Avatar de sarah_s
    Profil pro
    Inscrit en
    Avril 2007
    Messages
    90
    Détails du profil
    Informations personnelles :
    Âge : 39
    Localisation : France

    Informations forums :
    Inscription : Avril 2007
    Messages : 90
    Par défaut
    merci pour ta réponse trés bien expliquée,je vais utiliser plutôt la 2eme methode,je me lance au travail,j'espére qu'il y aura pas de complications
    ...(à suivre)

  9. #9
    Membre éclairé Avatar de Destiny
    Profil pro
    Inscrit en
    Février 2005
    Messages
    720
    Détails du profil
    Informations personnelles :
    Localisation : Suisse

    Informations forums :
    Inscription : Février 2005
    Messages : 720
    Par défaut
    attention, si ta base de donnée contient beaucoup d'enregistrements, tu as meilleur temps d'utiliser la première méthode et d'affecter des index sur tes champs.

  10. #10
    Membre émérite
    Profil pro
    Inscrit en
    Avril 2007
    Messages
    764
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Avril 2007
    Messages : 764
    Par défaut
    En effet, pour "tout récupérer" il faut que la base de données soit de taille raisonnable !
    Je t'ai donné les deux façons de faire, à toi de voir ce qui convient dans ton cas précis - tu peux combiner les deux, faire un premier filtrage lors de la récupération des données et appliquer un filtre plus précis par la suite... La balle est dans ton camp

    Par contre Destiny je ne comprends pas ce que tu entends par "affecter des index sur tes champs"

  11. #11
    Membre confirmé Avatar de sarah_s
    Profil pro
    Inscrit en
    Avril 2007
    Messages
    90
    Détails du profil
    Informations personnelles :
    Âge : 39
    Localisation : France

    Informations forums :
    Inscription : Avril 2007
    Messages : 90
    Par défaut
    oui effectivemet elle est immese , mais je vais recupérer q'une partie ,je pense que ça ira avec la deuxiéme méthode
    merci à vous..
    je vous tiens au courant du resultat dés que ça passe.

  12. #12
    Membre confirmé Avatar de sarah_s
    Profil pro
    Inscrit en
    Avril 2007
    Messages
    90
    Détails du profil
    Informations personnelles :
    Âge : 39
    Localisation : France

    Informations forums :
    Inscription : Avril 2007
    Messages : 90
    Par défaut
    resalut ,
    j'ai essayé ce bout d code
    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
    
      DataTable table = new DataTable();
                string requete= " SELECT 'ARTICLE', 'DESCRIPT1', 'DESCRIPT2', 'EMPLAC', 'BS', 'UM', 'QUANTITE', 'PU', 'MONTANT', 'DATE_MVT', 'DATE_GL', 'CPT_IMPUT', 'CC', 'SECTION', 'UTILISAT' FROM 'TEST'.'V_MVT_II_NAD'  ";
               DB2DataAdapter AdapTContact = new DB2DataAdapter(requete, connection);
                AdapTContact.Fill(table);
                DataView dv = new DataView();
    
                ///////filtrer selon les deux dates choisies
                
                    string newFilter = string.Empty;               
                        if(!dateTimePicker1.Text.Equals(string.Empty)&& !dateTimePicker2.Text.Equals(string.Empty))
                              {            
                             newFilter += "DATE_MVT < '%" + getFilterValue(this.dateTimePicker2.Text) + "%'";                
                              newFilter += " AND "; 
                            newFilter += "DATE_MVT > '%" + getFilterValue(this.dateTimePicker1.Text) + "%'";       
                                }
                             dv.RowFilter = newFilter;              
    
                        return dv;
    j'ai une erreur sur les deux getFilterValue: erreur CS0103: Le nom 'getFilterValue' n'existe pas dans le contexte actuel

    en plus je ne sais pas ou mettre la relation entre la DataTable crée et le DataView (dans la partie filtrer..)

    une suggestion..je sais ça peut vous paraître banal,mais étant debutante en .Net,j'ai vraiment besoin de propositions...
    merci

  13. #13
    Membre émérite
    Profil pro
    Inscrit en
    Avril 2007
    Messages
    764
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Avril 2007
    Messages : 764
    Par défaut
    Citation Envoyé par sarah_s
    j'ai une erreur sur les deux getFilterValue: erreur CS0103: Le nom 'getFilterValue' n'existe pas dans le contexte actuel
    Où est définie la fonction getFilterValue ?



    Pour indiquer que ta DataView est une vue de ta DataTable :
    ou carrément lors de l'initialisation :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    DataView dv = new DataView(table);

  14. #14
    Membre confirmé Avatar de sarah_s
    Profil pro
    Inscrit en
    Avril 2007
    Messages
    90
    Détails du profil
    Informations personnelles :
    Âge : 39
    Localisation : France

    Informations forums :
    Inscription : Avril 2007
    Messages : 90
    Par défaut
    j'ai pas besoin de cette fonction en finde compte,je l'est enlevé carrément:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
     
    if(!dateTimePicker1.Text.Equals(string.Empty)&& !dateTimePicker2.Text.Equals(string.Empty))
                              {            
                             newFilter += "DATE_MVT < '%" + this.dateTimePicker2.Text + "%'";                
                              newFilter += " AND "; 
                            newFilter += "DATE_MVT > '%" + this.dateTimePicker1.Text + "%'";       
                                }
                             dv.RowFilter = newFilter;
    maintenant j'ai un probléme lors de ma connexion à la base de données db2, donc je connais pas si je ce que j'ai fait marche ..

    j'ai l'erreur:Une exception non gérée du type 'System.ArgumentException' s'est produite dans IBM.Data.DB2.dll,sur la ligne :connection.ConnectionString...,alors quela référence IBM.Data.DB2.dll est bien ajouté au projet,je poste cette question dans la partie db2,..
    a+

  15. #15
    Membre confirmé Avatar de sarah_s
    Profil pro
    Inscrit en
    Avril 2007
    Messages
    90
    Détails du profil
    Informations personnelles :
    Âge : 39
    Localisation : France

    Informations forums :
    Inscription : Avril 2007
    Messages : 90
    Par défaut
    bonjour ..
    je reprends la partie conçernant les filtres..je travaillais sur une autre partie ces derniers jours..

    j'ai l'erreur suivante à présent:
    Informations supplémentaires*: Impossible de trouver la colonne [DATE_MVT].

    signalé sur l'instruction dv.RowFilter = newFilter;

    j'ai vraiment besoin d'un conseil ou une suggestion..
    merci

  16. #16
    Membre émérite
    Profil pro
    Inscrit en
    Avril 2007
    Messages
    764
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Avril 2007
    Messages : 764
    Par défaut
    eh bien, euh... y a-t-il effectivement une colonne "DATE_MVT" dans la table liée à ta DataView ?
    C'est con mais c'est la seule explication possible...

    Après test, apparemment :
    - s'il y a des crochets autour du nom de la colonne dans le DataTable, ça ne marchera pas...
    - s'il n'y a pas de crochets dans la DataTable cela marche, qu'il y ait ou non des crochets autour du nom de la colonne dans la chaîne de filtre.

  17. #17
    Membre confirmé Avatar de sarah_s
    Profil pro
    Inscrit en
    Avril 2007
    Messages
    90
    Détails du profil
    Informations personnelles :
    Âge : 39
    Localisation : France

    Informations forums :
    Inscription : Avril 2007
    Messages : 90
    Par défaut
    merci pour ta réponse rapide
    oui la colonne DATE_MVT existe bel et bien..
    je re poste mon fameux bout de code:

    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
     
     connection.ConnectionString = "Database=PS_PROD=True;Password=passwd;User ID=test";
              //   connection.Open();
                 string requete = " SELECT 'ARTICLE', 'DESCRIPT1', 'DESCRIPT2', 'EMPLAC', 'BS', 'UM', 'QUANTITE', 'PU', 'MONTANT', 'DATE_MVT', 'DATE_GL', 'CPT_IMPUT', 'CC', 'SECTION', 'UTILISAT' FROM 'TEST'.'V_MVT_II_NAD'  ";
                 bd instance = new bd();
                 DataTable table = new DataTable();
                 table=instance.GetTable_udb(requete,connection);
     
                ///////filtrer
                DataView dv = new DataView(table);
                    string newFilter = string.Empty;               
                        if(!dateTimePicker1.Text.Equals(string.Empty)&& !dateTimePicker2.Text.Equals(string.Empty))
                              {            
                             newFilter += "DATE_MVT < '%" + this.dateTimePicker2.Text + "%'";                
                              newFilter += " AND "; 
                            newFilter += "DATE_MVT > '%" + this.dateTimePicker1.Text + "%'";       
                                }
                             dv.RowFilter = newFilter;
    j'ai pas vraiment compris ce probléme de crochets ,
    dans mon code ya t il un crochet de plus de moins?

  18. #18
    Membre émérite
    Profil pro
    Inscrit en
    Avril 2007
    Messages
    764
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Avril 2007
    Messages : 764
    Par défaut
    j'ai pas vraiment compris ce probléme de crochets ,
    dans mon code ya t il un crochet de plus de moins?
    Comme le message d'erreur introduit des crochets autour du nom de la colonne, j'ai fait un rapide petit test pour voir ce que j'obtenais avec ou sans crochets dans la DataTable et dans la chaîne du filtre... avec des résultats un peu perturbants... et donc je me demandais si tu n'avais pas mis des crochets autour de tes noms de colonne, ce qui aurait pu expliquer l'erreur.


    la colonne DATE_MVT existe bel et bien..
    Dis-tu ça parce qu'elle est citée dans ta requête, ou as-tu vraiment vérifié l'état de la DataTable ?
    Je n'ai aucune idée de l'effet de la fonction GetTable_udb, peut-être que les noms des colonnes crées dans la DataTable ne sont pas les mêmes que ceux de la base de données (ça serait curieux, mais visiblement aucune colonne nommée "DATE_MVT" n'est trouvée dans table... et pour commencer à comprendre, je pense qu'il faut toujours vérifier l'état des variables avant l'instruction posant problème)

  19. #19
    Membre confirmé Avatar de sarah_s
    Profil pro
    Inscrit en
    Avril 2007
    Messages
    90
    Détails du profil
    Informations personnelles :
    Âge : 39
    Localisation : France

    Informations forums :
    Inscription : Avril 2007
    Messages : 90
    Par défaut
    la fonction GetTable_udb() me retourne une table non null,comment faire pour visualiser son contenu avant utilisation ?

    jeposte 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
    16
    17
    18
    19
    20
    21
    22
    23
    24
     
     
     public DataTable GetTable_udb(string Req,DB2Connection c)
            {
                DataTable table_udb = new DataTable();
                try{
               DB2Command cmd= new DB2Command(Req,c);
               DB2DataAdapter AdapTContact_udb = new DB2DataAdapter(cmd);
               AdapTContact_udb.SelectCommand = cmd;
               AdapTContact_udb.Fill(table_udb);
     
                }
                catch (DB2Exception myException) {
                    for (int i = 0; i < myException.Errors.Count; i++)
                    {
                        MessageBox.Show("Index #" + i + "\n" +
                            "Message: " + myException.Errors[i].Message + "\n" +
                            "Native: " + myException.Errors[i].NativeError.ToString() + "\n" +
                            "Source: " + myException.Errors[i].Source + "\n" +
                            "SQL: " + myException.Errors[i].SQLState + "\n");
                    }
                }
                return table_udb;
            }
    ps :lors de l'execution un message box m'affiche les exceptions:
    message:[IBM] [CLIDRIVER] CLIO124E valeur d'argument incorrecte SQLSTATE=HY009
    native:-99999
    source:IBM.DATA.DB2
    sql:HY009

    je n'ai aucune idée de ce que ça peut être,



Discussions similaires

  1. Réponses: 1
    Dernier message: 26/09/2007, 17h50
  2. Réponses: 7
    Dernier message: 30/07/2007, 10h26
  3. Réponses: 1
    Dernier message: 28/07/2006, 09h17
  4. [VBA E] Conserver le derniere valeur selectionné d'une combobox
    Par zoumzoum59 dans le forum Macros et VBA Excel
    Réponses: 17
    Dernier message: 18/06/2006, 10h28
  5. Réponses: 1
    Dernier message: 25/04/2006, 21h29

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