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 datagridview


Sujet :

C#

  1. #1
    Membre éclairé
    Inscrit en
    Août 2009
    Messages
    273
    Détails du profil
    Informations forums :
    Inscription : Août 2009
    Messages : 273
    Par défaut Remplir une datagridview
    Bonjour,

    Je cherche à remplir une datagridview à partir de données que je récupère de ma base Oracle. J'ai testé le code suivant mais celà n'a pas l'air de fonctionner. Je n'ai aucune erreur.

    Tout d'abord j'ai crée une classe qui définit les attributs à récupérer et qui ressemble à ceci:

    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
     
    using System;
    using System.Collections.Generic;
    using System.Linq;
    using System.Text;
     
    namespace MONPROJET
    {
        class MaClasse
        {
            public int Col1{ get; set; }
            public string Col2{ get; set; }
            public int Col3{ get; set; }
        }
    }
    et ci-dessous le code mon formulaire principale:

    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
    69
    70
    71
    72
    73
    74
    75
    76
    77
    78
    79
    80
    81
    82
    83
    84
    85
    86
    87
    88
    89
    90
    91
    92
    93
    94
    95
    96
    97
     
    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;
    using System.Configuration;
    using System.Data.Common;
    using Oracle.DataAccess.Client;
    using Oracle.DataAccess.Types;
    using MONPROJET.Models;
     
    namespace MONPROJET.Views
    {
        public partial class monFormulaire: Form
        {
     
            List<MaClasse> listMaClasse= new List<MaClasse>();
     
            DataTable MaClasseTable = new DataTable();
     
            public monFormulaire()
            {
                InitializeComponent();
            }
     
            void CreateDataTable()
            {
                // Create table schema.
                DataColumn MaClasseCol1 = new DataColumn("Col1", typeof(int));
                DataColumn MaClasseCol2 = new DataColumn("Col2", typeof(string));
                DataColumn MaClasseCol3 = new DataColumn("Col3", typeof(int));
     
                MaClasseTable.Columns.AddRange(new DataColumn[] { MaClasseCol1 , MaClasseCol2 , MaClasseCol3 });
     
                foreach (MaClasse mc in listMaClasse)
                {
                    DataRow newRow = MaClasseTable.NewRow();
                    newRow["Col1"] = mc.Col1;
                    newRow["Col2"] = mc.Col2;
                    newRow["Col3"] = mc.Col3;
                    MaClasseTable.Rows.Add(newRow);
                }
     
                dataGridView.DataSource = MaClasseTable;
            }
     
            private void btnRemplir_Click(object sender, EventArgs e)
            {
                List<MaClasse> listMaClasse= new List<MaClasse>();
                string connectionString = GetConnectionString();
                string queryString =
                    "SELECT COL1, COL2, COL3 FROM MATABLE WHERE COL1= VAL1 AND COL2= VAL2 AND COL3= VAL3";
                using (OracleConnection connection =
                           new OracleConnection(connectionString))
                {
                    OracleCommand command = connection.CreateCommand();
                    command.CommandText = queryString;
     
                    try
                    {
                        connection.Open();
     
                        OracleDataReader reader = command.ExecuteReader();
     
                        while (reader.Read())
                        {
                            MaClasse maclasse = new MaClasse();
                            maclasse .COL1= (int)reader["COL1"];
                            maclasse .COL2= reader["COL2"] as String;
                            maclasse .COL3= (int)reader["COL3"];
                            listMaClasse.Add(maclasse);
                        }
                        reader.Close();
                    }
                    catch (Exception ex)
                    {
                        Console.WriteLine(ex.Message);
                    }
                }
     
                CreateDataTable();
     
            }
     
            static private string GetConnectionString()
            {
                // To avoid storing the connection string in your code, 
                // you can retrieve it from a configuration file.
                // Assumes Northwind.mdb is located in the c:\Data folder.
                return "Data Source=(DESCRIPTION=(ADDRESS_LIST=(ADDRESS=(PROTOCOL=TCP)(HOST=host)(PORT=1521)))(CONNECT_DATA=(SERVER=DEDICATED)(SERVICE_NAME=servicename)));User Id=userid;Password=password;";
            }
        }
    }
    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 : 43
    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
    Par défaut
    Déjà, tu te compliques la vie inutilement... Tu peux mettre la liste directement comme DataSource du DataGridView. Si tu préfères utiliser une DataTable, tu peux la remplir via un DataAdapter, comme expliqué ici (Remplace SqlConnection, SqlCommand etc par OracleConnection, OracleCommand etc)

    D'autre part, le code semble correct, donc à mon avis le problème est simplement que tu n'as pas défini les colonnes de ton DataGridView. Le plus simple est de le faire via le designer. Sinon tu peux aussi mettre la propriété AutoGenerateColumns du DGV à true pour les générer automatiquement (si tu n'as pas besoin de les personnaliser)

  3. #3
    Membre éclairé
    Inscrit en
    Août 2009
    Messages
    273
    Détails du profil
    Informations forums :
    Inscription : Août 2009
    Messages : 273
    Par défaut
    comme ceci:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
     
    string sql = "select * from departments where department_id < 60";
    cmd = new OracleCommand(sql, conn);
    cmd.CommandType = CommandType.Text;
     
    da = new OracleDataAdapter(cmd);
    cb = new OracleCommandBuilder(da);
    ds = new DataSet();
     
    da.Fill(ds);
     
    departments.DataSource = ds.Tables[0];
    ?

    Merci,

  4. #4
    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 : 43
    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
    Par défaut
    Oui, sauf que tu n'as pas besoin du CommandBuilder (ça sert pour la mise à jour de la base)

  5. #5
    Membre éclairé
    Inscrit en
    Août 2009
    Messages
    273
    Détails du profil
    Informations forums :
    Inscription : Août 2009
    Messages : 273
    Par défaut
    est ce que cette procédure ne sert plus à rien?

    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
     
            void CreateDataTable()
            {
                // Create table schema.
                DataColumn MaClasseCol1 = new DataColumn("Col1", typeof(int));
                DataColumn MaClasseCol2 = new DataColumn("Col2", typeof(string));
                DataColumn MaClasseCol3 = new DataColumn("Col3", typeof(int));
     
                MaClasseTable.Columns.AddRange(new DataColumn[] { MaClasseCol1 , MaClasseCol2 , MaClasseCol3 });
     
                foreach (MaClasse mc in listMaClasse)
                {
                    DataRow newRow = MaClasseTable.NewRow();
                    newRow["Col1"] = mc.Col1;
                    newRow["Col2"] = mc.Col2;
                    newRow["Col3"] = mc.Col3;
                    MaClasseTable.Rows.Add(newRow);
                }
     
                dataGridView.DataSource = MaClasseTable;
            }
    Merci,

  6. #6
    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 : 43
    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
    Par défaut
    Citation Envoyé par Jinkas Voir le message
    est ce que cette procédure ne sert plus à rien?
    Bah si tu ne l'appelles pas, elle ne sert à rien...

  7. #7
    Membre éclairé
    Inscrit en
    Août 2009
    Messages
    273
    Détails du profil
    Informations forums :
    Inscription : Août 2009
    Messages : 273
    Par défaut
    En fait il y a une chose que je ne comprends pas dans votre première réponse. Vous dites que le code semble être correct mais qu'il manquait la définition des colonnes dans le datagridview. Mais, lorsque j'exécute le code, j'ai les noms des colonnes qui s'affichent mais pas les données de la requête.

    La procédure CreateDataTable() dans laquelle la datasource du DataGridView reçoit la liste est appelée dans le code source du bouton ci-dessous:

    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
     
            private void btnRemplir_Click(object sender, EventArgs e)
            {
                List<MaClasse> listMaClasse= new List<MaClasse>();
                string connectionString = GetConnectionString();
                string queryString =
                    "SELECT COL1, COL2, COL3 FROM MATABLE WHERE COL1= VAL1 AND COL2= VAL2 AND COL3= VAL3";
                using (OracleConnection connection =
                           new OracleConnection(connectionString))
                {
                    OracleCommand command = connection.CreateCommand();
                    command.CommandText = queryString;
     
                    try
                    {
                        connection.Open();
     
                        OracleDataReader reader = command.ExecuteReader();
     
                        while (reader.Read())
                        {
                            MaClasse maclasse = new MaClasse();
                            maclasse .COL1= (int)reader["COL1"];
                            maclasse .COL2= reader["COL2"] as String;
                            maclasse .COL3= (int)reader["COL3"];
                            listMaClasse.Add(maclasse);
                        }
                        reader.Close();
                    }
                    catch (Exception ex)
                    {
                        Console.WriteLine(ex.Message);
                    }
                }
     
                CreateDataTable();
     
            }
    Donc, je ne comprends pas pourquoi ça ne fonctionne pas et pourquoi utiliser un dataadapter plutôt qu'un datareader.

    Merci pour votre aide,

  8. #8
    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 : 43
    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
    Par défaut
    Citation Envoyé par Jinkas Voir le message
    En fait il y a une chose que je ne comprends pas dans votre première réponse. Vous dites que le code semble être correct mais qu'il manquait la définition des colonnes dans le datagridview. Mais, lorsque j'exécute le code, j'ai les noms des colonnes qui s'affichent mais pas les données de la requête.
    Et si tu exécutes la requête directement sur la DB, elle renvoie bien des données ?

    Citation Envoyé par Jinkas Voir le message
    La procédure CreateDataTable() dans laquelle la datasource du DataGridView reçoit la liste est appelée dans le code source du bouton ci-dessous:
    Bah oui mais ça c'est ton code d'origine... si tu fais comme je t'ai dit, cette procédure ne sert plus.

    Citation Envoyé par Jinkas Voir le message
    Donc, je ne comprends pas pourquoi ça ne fonctionne pas
    Pour l'instant moi non plus... la seule explication que je vois, c'est que ta requête ne renvoie rien

    Citation Envoyé par Jinkas Voir le message
    et pourquoi utiliser un dataadapter plutôt qu'un datareader.
    Bah parce que c'est plus simple... toi tu crées une liste d'objet en bouclant sur le résultat du DataReader, et ensuite tu transformes cette liste en DataTable. Le DataAdapter remplit directement une DataTable à partir de la requête, c'est quand même plus direct, non ?

  9. #9
    Membre éclairé
    Inscrit en
    Août 2009
    Messages
    273
    Détails du profil
    Informations forums :
    Inscription : Août 2009
    Messages : 273
    Par défaut
    Si ma requête renvoie une ligne dans la base de données.

  10. #10
    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 : 43
    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
    Par défaut
    Ah, je crois que je vois en fait... Dans la méthode CreateDataTable, tu fais référence à une variable listMaClasse, qui est une variable d'instance déclarée dans la classe. Mais dans btnRemplir_Click, tu déclares une autre variable listMaClasse, locale à la méthode. Donc les 2 méthodes ne font pas référénce à la même liste, et celle que tu utilises dans CreateDataTable reste toujours vide.

    Tu n'as pas encore testé la méthode avec le DataAdapter, si ?

  11. #11
    Membre éclairé
    Inscrit en
    Août 2009
    Messages
    273
    Détails du profil
    Informations forums :
    Inscription : Août 2009
    Messages : 273
    Par défaut
    Non je n'ai pas encore testé le dataadapter pour le moment car je cherche tout d'abord à faire fonctionner le code que je vous ai envoyé car il s'agit d'un code source que j'ai récupéré et que je trouve bien structuré. Le code que j'ai récupéré n'est pas connecté à une base de données le datagridview est rempli avec des données initialisées comme ceci:

    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
     
     
    public partial class MainForm : Form
        {
            // A collection of Car objects.
            List<Car> listCars = new List<Car>();
     
            // Inventory information
            DataTable inventoryTable = new DataTable();
     
            // View of the DataTable.
            DataView yugosOnlyView;
     
            public MainForm()
            {
                InitializeComponent();
     
                // Fill the list with some cars.
                listCars = new List<Car> 
                {
                    new Car { ID = 100, PetName = "Chucky", Make = "BMW", Color = "Green" },
                    new Car { ID = 101, PetName = "Tiny", Make = "Yugo", Color = "White" },
                    new Car { ID = 102, PetName = "Ami", Make = "Jeep", Color = "Tan" },
                    new Car { ID = 103, PetName = "Pain Inducer", Make = "Caravan", Color = "Pink" },
                    new Car { ID = 104, PetName = "Fred", Make = "BMW", Color = "Green" },
                    new Car { ID = 105, PetName = "Sidd", Make = "BMW", Color = "Black" },
                    new Car { ID = 106, PetName = "Mel", Make = "Firebird", Color = "Red" },
                    new Car { ID = 107, PetName = "Sarah", Make = "Colt", Color = "Black" },
                };
     
                CreateDataTable();
     
     
     
            }
     
            #region Create the data table
            void CreateDataTable()
            {
                // Create table schema.
                DataColumn carIDColumn = new DataColumn("ID", typeof(int));
                DataColumn carMakeColumn = new DataColumn("Make", typeof(string));
                DataColumn carColorColumn = new DataColumn("Color", typeof(string));
                DataColumn carPetNameColumn = new DataColumn("PetName", typeof(string));
                carPetNameColumn.Caption = "Pet Name";
                inventoryTable.Columns.AddRange(new DataColumn[] { carIDColumn, carMakeColumn, 
                    carColorColumn, carPetNameColumn });
     
                // Iterate over the array list to make rows.
                foreach (Car c in listCars)
                {
                    DataRow newRow = inventoryTable.NewRow();
                    newRow["ID"] = c.ID;
                    newRow["Make"] = c.Make;
                    newRow["Color"] = c.Color;
                    newRow["PetName"] = c.PetName;
                    inventoryTable.Rows.Add(newRow);
                }
     
                // Bind the DataTable to the carInventoryGridView.
                carInventoryGridView.DataSource = inventoryTable;
            }
    Malgré que le dataadapter propose une méthode plus directe, ne pensez-vous que cette façon de coder est plus claire?

    Merci,

  12. #12
    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 : 43
    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
    Par défaut
    Citation Envoyé par Jinkas Voir le message
    Malgré que le dataadapter propose une méthode plus directe, ne pensez-vous que cette façon de coder est plus claire?
    Non, je ne trouve pas... si tu veux vraiment passer par une liste, mets la directement en DataSource ; il n'y a pas besoin de créer une DataTable.

  13. #13
    Membre éclairé
    Inscrit en
    Août 2009
    Messages
    273
    Détails du profil
    Informations forums :
    Inscription : Août 2009
    Messages : 273
    Par défaut
    Merci, je teste ça et je vous tiens informer.

  14. #14
    Membre très actif
    Homme Profil pro
    Developpeur
    Inscrit en
    Décembre 2011
    Messages
    111
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Congo-Kinshasa

    Informations professionnelles :
    Activité : Developpeur
    Secteur : Enseignement

    Informations forums :
    Inscription : Décembre 2011
    Messages : 111
    Par défaut Dataset
    Salut je n'ai pas bcp de truc a dire parceque tomlev a tout expliqué,Juste de t'informer que lorsqu'on veut remplir un DatgridView on fais toujours appel à 2 choses importantes:
    Le DataAdapter et le Dataset
    le DataAdapter te permet de remplir le DataSet,et cette denière te permet de remplir le DataGrideview
    Nb: Pour mettre à jour les informations dans le DataGridview,il faut vider le dataset puis le recharger

  15. #15
    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 : 43
    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
    Par défaut
    Citation Envoyé par Hlama Voir le message
    lorsqu'on veut remplir un DatgridView on fais toujours appel à 2 choses importantes:
    Le DataAdapter et le Dataset
    Non, pas toujours... on peut très bien remplir un DataSet manuellement, ou même ne pas utiliser de DataSet du tout mais utiliser une liste d'objets à la place, comme je l'ai indiqué plus haut

    Citation Envoyé par Hlama Voir le message
    Nb: Pour mettre à jour les informations dans le DataGridview,il faut vider le dataset puis le recharger
    c'est juste une façon de faire parmi d'autres... en général il n'est pas nécessaire de le vider

  16. #16
    Membre très actif
    Homme Profil pro
    Developpeur
    Inscrit en
    Décembre 2011
    Messages
    111
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Congo-Kinshasa

    Informations professionnelles :
    Activité : Developpeur
    Secteur : Enseignement

    Informations forums :
    Inscription : Décembre 2011
    Messages : 111
    Par défaut Datagridview
    Salut tomlev,en faite lui nous parle d'un datagridview et non d'une list?
    un dataset peut être charger par code ou par propriété c'est vrai

  17. #17
    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 : 43
    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
    Par défaut
    Citation Envoyé par Hlama Voir le message
    Salut tomlev,en faite lui nous parle d'un datagridview et non d'une list?
    un dataset peut être charger par code ou par propriété c'est vrai
    Je comprends rien à ce que tu racontes
    J'ai l'impression que pour toi liste = ListBox... moi je parle d'une collection d'objets, pas d'un contrôle

  18. #18
    Membre éclairé
    Inscrit en
    Août 2009
    Messages
    273
    Détails du profil
    Informations forums :
    Inscription : Août 2009
    Messages : 273
    Par défaut
    Bonjour,

    Voici mon code qui fonctionne mais que je trouver léger. Vu que je ne maîtrise pas parfaitement la programmation objet j'aurai voulu me servir d'une collection list utilisant MaClasse contenant mes attributs.


    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
     
     
            private void btnRechercher_Click(object sender, EventArgs e)
            {
                string connectionString = GetConnectionString();
                string queryString =
                    "SELECT COL1, COL2, CO3 FROM MATABLE WHERE COL1= VALEUR1 AND COL2= VAL2 AND COL3 = VAL3";
                using (OracleConnection connection =
                           new OracleConnection(connectionString))
                {
                    OracleCommand command = connection.CreateCommand();
                    command.CommandText = queryString;
     
                    try
                    {
                        connection.Open();
     
                        using (OracleDataAdapter a = new OracleDataAdapter(queryString, connection))
                        {
                            DataTable t = new DataTable();
                            a.Fill(t);
                            dataGridView.DataSource = t;
                        }
                    }
                    catch (Exception ex)
                    {
                        Console.WriteLine(ex.Message);
                    }
                }
            }
    Une meilleure façon de faire sera la bienvenue!

    Merci,

  19. #19
    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 : 43
    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
    Par défaut
    Citation Envoyé par Jinkas Voir le message
    Voici mon code qui fonctionne mais que je trouver léger.
    Pourquoi un peu léger ? Ca fonctionne, c'est clair et lisible... qu'est-ce qu'il te faut de plus ?

    Citation Envoyé par Jinkas Voir le message
    Vu que je ne maîtrise pas parfaitement la programmation objet j'aurai voulu me servir d'une collection list utilisant MaClasse contenant mes attributs.
    Je te l'ai déjà dit : il suffit de mettre ta liste comme DataSource. Reprends le code que tu avais au départ, et au lieu de convertir la liste en DataTable, mets la directement comme DataSource

  20. #20
    Membre éclairé
    Inscrit en
    Août 2009
    Messages
    273
    Détails du profil
    Informations forums :
    Inscription : Août 2009
    Messages : 273
    Par défaut
    Bonjour,

    J'ai aussi testé le code ci-dessous sauf que j'ai une exception de type InvalidCastException:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
     
     while (reader.Read())
                    {
                        MyDetails m = new MyDetails();<-- le cast spécifié n'est pas valide
                        m.Id = (int)reader[0];
                        m.Name = reader[1].ToString();
                        m.Age = (int)reader[2];
                        sequence.Add(m);
                    }
    Code avec un arraylist et un datareader

    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
     
    private void btnRechercher_Click(object sender, EventArgs e)
            {
                    ArrayList sequence = new ArrayList();
     
                    string connString = GetConnectionString();
     
                    OracleConnection oraConn = new OracleConnection();
                try
                {
                    oraConn.ConnectionString = connString;
     
                    OracleCommand cmd = new OracleCommand();
                    cmd.Connection = oraConn;
                    cmd.CommandText =
                        "SELECT COL1, COL2, CO3 FROM MATABLE WHERE COL1= VALEUR1 AND COL2= VAL2 AND COL3 = VAL3";
     
                    oraConn.Open();
     
                    OracleDataReader reader = cmd.ExecuteReader();
     
                    while (reader.Read())
                    {
                        MyDetails m = new MyDetails();
                        m.Id = (int)reader[0];
                        m.Name = reader[1].ToString();
                        m.Age = (int)reader[2];
                        sequence.Add(m);
                    }
                    dataGridViewStat.DataSource = sequence;
                }
                finally
                {
                    oraConn.Close();
                }
     
            }
    Qu'en pensez vous?

    Merci,

+ Répondre à la discussion
Cette discussion est résolue.
Page 1 sur 2 12 DernièreDernière

Discussions similaires

  1. [Débutant] Remplir une DataGridView avec un DataTable
    Par collisionv dans le forum Windows Forms
    Réponses: 4
    Dernier message: 24/04/2014, 21h33
  2. Remplir une datagridview avec un requête
    Par TikTak dans le forum C#
    Réponses: 3
    Dernier message: 18/03/2010, 16h40
  3. Réponses: 3
    Dernier message: 12/06/2009, 12h49
  4. Remplir une datagridview
    Par Lerchechem dans le forum Windows Forms
    Réponses: 1
    Dernier message: 02/06/2009, 23h38
  5. remplir une datagridview
    Par soul-31 dans le forum Windows Forms
    Réponses: 2
    Dernier message: 28/05/2009, 18h09

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