Bonjour,

j'aimerais pouvoir afficher dans une datagridview les sous classes, je m'explique.

J'ai une classe(qui est la source de ma datagridview) qui contient elle même plusieurs classe dont j'aimerais afficher les propriétés.

voici ci dessous le code ajoutant les colonnes à afficher avec les données sur ma datagridview

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
 
        private DataGridViewColumn[] GetColumnToAdd(Type baseType)
        {
            DataGridViewColumn[] result = null;
            // Recuperer le type de la liste générique
            Type genType = dgv.DataSource.GetType().GetProperty("Item").PropertyType;
            // Créer la liste Temporaire pour contenir les propriétés à afficher
            List<PropertyDescriptor> propToDisplay = new List<PropertyDescriptor>();
            // Balayage des propriétés du type
            foreach (PropertyDescriptor propDesc1 in TypeDescriptor.GetProperties(baseType))
            {
                // Si la propriété possède l'attribut attendu, on l'ajoute
                if (propDesc1.Attributes[typeof(DataGridViewColumnAttribute)] != null)
                {
                    propToDisplay.Add(propDesc1);
                }
                foreach (PropertyDescriptor propDesc2 in TypeDescriptor.GetProperties(propDesc1.PropertyType))
                {
                    if (propDesc2.Attributes[typeof(DataGridViewColumnAttribute)] != null)
                    {
                        propToDisplay.Add(propDesc2);
                    }
                    foreach (PropertyDescriptor propDesc3 in TypeDescriptor.GetProperties(propDesc2.PropertyType))
                    {
                        if (propDesc3.Attributes[typeof(DataGridViewColumnAttribute)] != null)
                        {
                            propToDisplay.Add(propDesc3);
                        }
                    }
                }
            }
 
            // si il y a des propriétés à afficher
            if (propToDisplay.Count > 0)
            {
                // tri des champs en fonction de l'index donné
                propToDisplay.Sort(
                    delegate(PropertyDescriptor p1, PropertyDescriptor p2)
                    {
                        return
                            (p1.Attributes[typeof(DataGridViewColumnAttribute)] as DataGridViewColumnAttribute).Index
                            .CompareTo(
                            (p2.Attributes[typeof(DataGridViewColumnAttribute)] as DataGridViewColumnAttribute).Index);
                    });
            }
            // définir la taille du tableau des colonnes à afficher
            result = new DataGridViewColumn[propToDisplay.Count];
            // 
            int counter = 0;
            //
            foreach (PropertyDescriptor propDesc in propToDisplay)
            {
                DataGridViewColumn dgvc;
                DataGridViewColumnAttribute dgvcAtt = (propDesc.Attributes[typeof(DataGridViewColumnAttribute)] as DataGridViewColumnAttribute);
 
                switch (dgvcAtt.ColumnType)
                {
                    case DataGridViewColumnType.TextBox:
                        dgvc = new DataGridViewTextBoxColumn();
                        break;
                    case DataGridViewColumnType.CheckBox:
                        dgvc = new DataGridViewCheckBoxColumn();
                        break;
                    default:
                        dgvc = new DataGridViewTextBoxColumn();
                        break;
                }
                dgvc.HeaderText = dgvcAtt.HeaderText != string.Empty ? dgvcAtt.HeaderText : propDesc.DisplayName;
                dgvc.ValueType = propDesc.PropertyType.GetType();
                dgvc.DataPropertyName = propDesc.Name;
 
                result[counter++] = dgvc;
            }
 
            return result;
        }
Alors, ça fonctionne bien mais uniquement pour les champs à afficher
pour les données, seules les propriétés de premier niveau s'affiche.

alors comment affecter les sous propriétés...

j'espère m'etre bien fait compris

merci de votre aide