/// <summary> /// Создать шаблон таблицы на основе типа /// </summary> /// <param name="TableName">Имя таблицы</param> /// <param name="WrappedType">Тип, размеченный аттрибутами ColumnName (и ему подобными)</param> /// <returns>Таблица</returns> public static DataTable GenTable(string TableName, Type WrappedType) { DataTable result = new DataTable(TableName); foreach (PropertyInfo var in WrappedType.GetProperties()) { ColumnNameAttribute name = (ColumnNameAttribute)Attribute.GetCustomAttribute(var, typeof(ColumnNameAttribute)); if (name != null) { DataColumn column = new DataColumn(name.ColumnName, var.PropertyType); ColumnTextAttribute text = (ColumnTextAttribute)Attribute.GetCustomAttribute(var, typeof(ColumnTextAttribute)); if (text != null) { column.Caption = text.ColumnText; } result.Columns.Add(column); } } return(result); }
/// <summary> /// Наполнить колонки на основе типа. /// </summary> /// <param name="columns">Коллекция колонок</param> /// <param name="type">Тип, размеченный аттрибутами</param> public static void ParseAllPropsIntoColumns(DataGridViewColumnCollection columns, Type type) { PropertyInfo[] props = type.GetProperties(); ArrayList propsNames = new ArrayList(props.Length); foreach (PropertyInfo prop in props) { PropertyOrderAttribute att = (PropertyOrderAttribute)Attribute.GetCustomAttribute(prop, typeof(PropertyOrderAttribute)); if (att != null) { propsNames.Add(new PropertyOrderPair(prop.Name, att.Order)); } else { propsNames.Add(new PropertyOrderPair(prop.Name, 0)); } } propsNames.Sort(); DataGridViewCell cell = new DataGridViewTextBoxCell(); for (int i = 0; i < propsNames.Count; ++i) { PropertyInfo prop = type.GetProperty((propsNames[i] as PropertyOrderPair).Name); ColumnNameAttribute attName = (ColumnNameAttribute)Attribute.GetCustomAttribute(prop, typeof(ColumnNameAttribute)); if (attName != null) { DataGridViewColumn column = new DataGridViewColumn(); column.Name = attName.ColumnName; column.CellTemplate = cell; ColumnWidthAttribute attWidth = (ColumnWidthAttribute)Attribute.GetCustomAttribute(prop, typeof(ColumnWidthAttribute)); if (attWidth != null) { column.Width = attWidth.ColumnWidth; } else { column.Width = 100; } ColumnTextAttribute attText = (ColumnTextAttribute)Attribute.GetCustomAttribute(prop, typeof(ColumnTextAttribute)); if (attText != null) { column.HeaderText = attText.ColumnText; } else { column.HeaderText = attName.ColumnName; } if (prop.GetSetMethod() != null) { ReadOnlyAttribute attRO = (ReadOnlyAttribute)Attribute.GetCustomAttribute(prop, typeof(ReadOnlyAttribute)); if (attRO != null) { column.ReadOnly = attRO.IsReadOnly; } } ContentAlignmentAttribute attAl = (ContentAlignmentAttribute)Attribute.GetCustomAttribute(prop, typeof(ContentAlignmentAttribute)); if (attAl != null) { column.HeaderCell.Style.Alignment = (DataGridViewContentAlignment)(attAl.Alignment); } columns.Add(column); } } }