PIbd-22_Chernyshev_G.Y._LabWork08_Base #9

Closed
ujijrujijr wants to merge 4 commits from LabWork08 into LabWork07
Showing only changes of commit 931851edd4 - Show all commits

View File

@ -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;