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