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 :

Datagridview problème


Sujet :

C#

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre averti
    Profil pro
    Inscrit en
    Avril 2008
    Messages
    33
    Détails du profil
    Informations personnelles :
    Localisation : Belgique

    Informations forums :
    Inscription : Avril 2008
    Messages : 33
    Par défaut Datagridview problème
    Bonjour à tous,

    J'ai une question à propos des datagridview. Ca fait 4h que je tourne en rond sur un problème qui semble tout bête...
    J'essaye d'afficher des données dans une datagridview en passant par une List d'objets.
    Or, ça ne m'affiche rien. J'ai découvert avec le test ci dessous qu'il refuse d'afficher les données numériques et/ou venant d'une classe.

    le bouton 1 tente de remplir le dtv avec les attributs de la classe perso contenant des variables numériques ou de type chaine > ca ne marche pas .
    le bouton 2 remplis correctement le dtv avec des strings, ca fonctionne.
    le bouton 3 tente de remplir le dtv avec des int et long, ca ne marche de nouveau pas.
    le bouton 4 tente de remplir le dtv avec les attributs d'une classe perso2 contenant que du string > ca ne marche pas

    Comment fait on pour que mon dgv accepte toutes les possibilités? Tous les tuto du web que je trouve ne rencontrent pas ce problème... et je suis sur que c'est un détail tout con...

    Merci d'avance

    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
     using System;
    using System.Collections.Generic;
    using System.ComponentModel;
    using System.Data;
    using System.Drawing;
    using System.Linq;
    using System.Text;
    using System.Threading.Tasks;
    using System.Windows.Forms;
     
    namespace WindowsFormsApplication3
    {
        public partial class Form1 : Form
        {
            public Form1()
            {
                InitializeComponent();
            }
            private List<perso> test = null;
            private List<string> test2 = null;
            private List<int> test3 = null;
            private List<perso2> test4 = null;
     
            private void Form1_Load(object sender, EventArgs e)
            {
                test = new List<perso>();
                test2 = new List<string>();
                test3 = new List<int>();
                test4 = new List<perso2>();
                test.Add(new perso("a", 1, 11));
                test.Add(new perso("b", 2, 22));
                test2.Add("aa");
                test2.Add("bb");
                test3.Add(1);
                test3.Add(234);
                test4.Add(new perso2("aa","bb"));
                test4.Add(new perso2("cc", "dd"));
     
            }
            private void button1_Click(object sender, EventArgs e)
            {
                dataGridView1.DataSource = test;
            }
     
            private void button2_Click(object sender, EventArgs e)
            {
                dataGridView1.DataSource = test2;
            }
     
            private void button3_Click(object sender, EventArgs e)
            {
                dataGridView1.DataSource = test3;
            }
     
            private void button4_Click(object sender, EventArgs e)
            {
                dataGridView1.DataSource = test4;
            }
        }
     
    }
     class perso
        {
     
            private string p1;
            private int p2;
            private long p3;
     
     
            public perso(string p1, int p2, long p3)
            {
     
                this.p1 = p1;
                this.p2 = p2;
                this.p3 = p3;
            }
        }
     class perso2
     {
         private string p1;
         private string p2;
     
         public perso2(string p1, string p2)
         {
             this.p1 = p1;
             this.p2 = p2;
         }
     
     }

  2. #2
    Membre averti
    Profil pro
    Inscrit en
    Avril 2008
    Messages
    33
    Détails du profil
    Informations personnelles :
    Localisation : Belgique

    Informations forums :
    Inscription : Avril 2008
    Messages : 33
    Par défaut
    Ah ben j'ai trouvé sur le net finalement... Mais j'ai pas compris pourquoi ... si quelqu'un peut m'expliquer ce qu'il se passe..

    En utilisant des get et set on obtient ceci par ex pour le 4e bouton qui utilise la 2e classe.

    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
     class perso2
     {
         private int p1;
         private string p2;
     
         public perso2(int p1, string p2)
         {
             this.p1 = p1;
             this.p2 = p2;
         }
     
         public int P1
         {
             get
             {
                 return p1;
             }
             set
             {
                 p1 = value;
             }
         }
         public string P2
         {
            get
            {
                return p2;
            } 
             set
            {
                p2=value;
     
            }
         }
     }

  3. #3
    Expert confirmé

    Homme Profil pro
    Chef de projet NTIC
    Inscrit en
    Septembre 2006
    Messages
    3 580
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations professionnelles :
    Activité : Chef de projet NTIC
    Secteur : Aéronautique - Marine - Espace - Armement

    Informations forums :
    Inscription : Septembre 2006
    Messages : 3 580
    Par défaut
    bonjour

    qui dit binding dit accès aux propriétés et donc, si il n'y a pas de get/set, le binding n'est pas capable de trouver les propriétés à afficher.

    Ainsi, en ayant le get/set, le binding va pouvoir découvrir les proprités de la classe qui sont accessibles.. et ne prendra pas les membres privés de la classe.

    Enfin, c'est la seule explication logique vu que je n'ai pas désassembler le code d'un binding microsoft

  4. #4
    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

    Binding simple: controls simples (textbox,button ,label etc... qui disposent d'une prop publique Text) et controls ListBox ,Combo, pour lesquels les types utilisables sont :structures int,double,float,bool ...
    Les controls utilisent la function ToString() pour afficher la valeur(instance actuelle)....car ils descendent tous de Object qui implemente ToString....

    Binding complexe: DatagridView,ListBox,Combo pour lesquels les types utilisables sont des class disposant de props publiques ....
    Dans le cas du ListBox et Combo il faut preciser dans la prop DisplayMembre le nom d'une prop du class (string)....sinon il deferre à NomClass.ToString()...

    Dans le cas du dgv ,il faut preciser dans la prop DataMembre le nom du class (string)....si DataSource est lie à un DataSet comportant plusieurs DataTables(qui sont des class)...

    code revu :
    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
    98
    99
    100
    101
    102
    103
    104
    105
    106
    107
    108
    109
    110
    111
    112
    113
     
    using System;
    using System.Collections.Generic;
    using System.ComponentModel;
    using System.Data;
    using System.Drawing;
    using System.Linq;
    using System.Text;
    using System.Threading.Tasks;
    using System.Windows.Forms;
     
    namespace WindowsFormsApplication1
    {
        public partial class Form1 : Form
        {
            public Form1()
            {
                InitializeComponent();
            }
            private List<Person1> persons = null;
            private List<string> myStrings = null;
            private List<int> myInts = null;
            // non bindable
            private List<Person2> persons2 = null;
     
     
     
     
            private void Form1_Load(object sender, EventArgs e)
            {
                persons = new List<Person1>();
                persons.Add(new Person1("a", 1, 11));
                persons.Add(new Person1("b", 2, 22));
     
     
                myStrings = new List<string>();
                myStrings.Add("aa");
                myStrings.Add("bb"); 
     
                myInts = new List<int>();
                myInts.Add(1);
                myInts.Add(234);
     
     
                // non bindable
                //persons2 = new List<Person2>();
                //persons2.Add(new Person2("aa", "bb"));
                //persons2.Add(new Person2("cc", "dd"));
     
     
            }
            private void btnPerson_Click(object sender, EventArgs e)
            {
                dataGridView1.DataSource = persons;
                listBox1.DataSource = persons;//sans specifier DataMembre
            }
     
             private void btnString_Click(object sender, EventArgs e)
            {
                listBox1.DataSource = myStrings;
            }
     
             private void btnInts_Click(object sender, EventArgs e)
            {
                listBox1.DataSource = myInts;
     
            }
     
     
     
            private void btnListPerson_Click(object sender, EventArgs e)
            {
     
     
                listBox1.DataSource = persons;
                listBox1.DisplayMember = "P2";//avec precision du  DataMembre
            }
     
     
     
     
     
     
     
        }
     
    }
    class Person1
    {
     
     
        public string P1 { get; set; }
        public int   P2 { get; set; }
        public long P3 { get; set; }
        public Person1(string op1, int op2, long op3)
        {
     
            this.P1 = op1;
            this.P2 = op2;
            this.P3 = op3;
        }
    }
    // non bindable
    class Person2
    {
        private string p1;
        private string p2;
        public Person2(string op1, string op2)
        {
            this.p1 = op1;
            this.p2 = op2;
        }
    }
    bon code....

  5. #5
    Membre averti
    Profil pro
    Inscrit en
    Avril 2008
    Messages
    33
    Détails du profil
    Informations personnelles :
    Localisation : Belgique

    Informations forums :
    Inscription : Avril 2008
    Messages : 33
    Par défaut
    merci à tous (y)

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

Discussions similaires

  1. [C#]Héritage d'un DataGridView, problème avec le designer
    Par Pilloutou dans le forum Windows Forms
    Réponses: 18
    Dernier message: 29/02/2012, 08h21
  2. [Datagridview] - problème Cellformatting
    Par spezet29 dans le forum VB.NET
    Réponses: 1
    Dernier message: 04/10/2010, 22h46
  3. DataGridView - Problème de ligne
    Par TiTii dans le forum Windows Forms
    Réponses: 5
    Dernier message: 16/12/2009, 09h58
  4. Datagridview problème Multiligne
    Par Clydopathe dans le forum VB.NET
    Réponses: 1
    Dernier message: 19/08/2009, 15h30
  5. Réponses: 1
    Dernier message: 24/01/2007, 16h00

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