ISEbd-21.Fedotov.I.A.Diner/Diner/DinerView/DataGridViewExtension.cs
Илья Федотов 6539aa727d InWork
2024-06-14 18:52:24 +04:00

44 lines
1.5 KiB
C#
Raw Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

using DinerContracts.Attributes;
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
namespace DinerView {
internal static class DataGridViewExtension {
public static void FillAndConfigGrid<T>(this DataGridView grid, List<T>? data) {
if (data == null) {
return;
}
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}");
}
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;
}
}
}
}
}
}