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}");
}
}
}
}