| 12
 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;
        } | 
Partager