namespace ShabComponentsLibrary { public partial class ShabListOutputComponent : UserControl { /// /// Установка и получение индекса выбранной строки /// public int SelectedRow { get => Grid.SelectedRows.Count == 1 ? Grid.SelectedRows[0].Index : -1; set { if (value >= 0) { Grid.Rows[value].Selected = true; } } } public ShabListOutputComponent() { InitializeComponent(); } /// /// Конфигурация столбцов. /// Для каждого столбца указываются заголовок, ширина, видимость и имя свойства/поля объекта /// /// Информация о столбцах public void ConfigureColumns(List Columns) { Grid.ColumnCount = Columns.Count; for (int Index = 0; Index < Columns.Count; ++Index) { Grid.Columns[Index].HeaderText = Columns[Index].Header; Grid.Columns[Index].Width = Columns[Index].Width; Grid.Columns[Index].Visible = Columns[Index].IsVisible; Grid.Columns[Index].Name = Columns[Index].Name; } } /// /// Очистка строк /// public void ClearGrid() { Grid.Rows.Clear(); } /// /// Получение объекта из выбранной строки /// /// Тип получаемого объекта /// public T GetSelectedObject() where T : new() { T RetVal = new T(); var Properties = typeof(T).GetProperties(); var Cells = Grid.SelectedRows[0].Cells; for (int Index = 0; Index < Grid.ColumnCount; ++Index) { DataGridViewColumn Column = Grid.Columns[Index]; var Cell = Cells[Index]; var Property = Properties.FirstOrDefault(x => x.Name == Column.Name); Property?.SetValue(RetVal, Cell.Value); } return RetVal; } /// /// Заполнение таблицы через передаваемый список объектов класса T /// public void InsertValues(List Objects) { ClearGrid(); var Type = typeof(T); var Properties = Type.GetProperties(); foreach (var Object in Objects) { int NewRowIndex = Grid.Rows.Add(); 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 Value = Property.GetValue(Object); Grid.Rows[NewRowIndex].Cells[Column.Index].Value = Value; } } 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}"); } } } }