PIbd-32_Shabunov_O.A._COP/ShabComponentsLibrary/ShabListOutputComponent.cs

101 lines
2.8 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.

namespace ShabComponentsLibrary
{
public partial class ShabListOutputComponent : UserControl
{
/// <summary>
/// Установка и получение индекса выбранной строки
/// </summary>
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();
}
/// <summary>
/// Конфигурация столбцов.
/// Для каждого столбца указываются заголовок, ширина, видимость и имя свойства/поля объекта
/// </summary>
/// <param name="Columns">Информация о столбцах</param>
public void ConfigureColumns(List<ColumnInfo> 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;
}
}
/// <summary>
/// Очистка строк
/// </summary>
public void ClearGrid()
{
Grid.Rows.Clear();
}
/// <summary>
/// Получение объекта из выбранной строки
/// </summary>
/// <typeparam name="T">Тип получаемого объекта</typeparam>
/// <returns></returns>
public T GetSelectedObject<T>() 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;
}
/// <summary>
/// Заполнение таблицы через передаваемый список объектов класса T
/// </summary>
public void InsertValues<T>(List<T> 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;
}
}
}
}
}