diff --git a/GarmentFactory/DataGridViewExtension.cs b/GarmentFactory/DataGridViewExtension.cs index 6a90e75..6ef98e6 100644 --- a/GarmentFactory/DataGridViewExtension.cs +++ b/GarmentFactory/DataGridViewExtension.cs @@ -15,35 +15,43 @@ namespace GarmentFactoryView { return; } + //источник данных для таблицы - переданный список (считанный из storage) grid.DataSource = data; + //просмотр свойств переданного класса var type = typeof(T); var properties = type.GetProperties(); + //для каждого столбца foreach (DataGridViewColumn column in grid.Columns) { + //поиск свойства переданного класса, кот. отображается в этом столбце var property = properties.FirstOrDefault(x => x.Name == column.Name); if (property == null) { throw new InvalidOperationException($"В типе {type.Name} не найдено свойство с именем { column.Name }"); } + //поиск атрибута ColumnAtribute для этого свойства var attribute = property.GetCustomAttributes(typeof(ColumnAttribute), true)?.SingleOrDefault(); if (attribute == null) { throw new InvalidOperationException($"Не найден атрибут типа ColumnAttribute для свойства { property.Name }"); } - // ищем нужный нам атрибут + //установка для столбца атрибута, кот. был задан для свойства в этом столбце if (attribute is ColumnAttribute columnAttr) { + //настройка заголовка (первой строчки) столбца column.HeaderText = columnAttr.Title; column.Visible = columnAttr.Visible; + //если было указано, что нужен автоматический размер, установка свойства if (columnAttr.IsUseAutoSize) { column.AutoSizeMode = (DataGridViewAutoSizeColumnMode)Enum.Parse(typeof(DataGridViewAutoSizeColumnMode), columnAttr.GridViewAutoSize.ToString()); } + //если не было указано, то задание установленной статичной ширины else { column.Width = columnAttr.Width;