101 lines
2.8 KiB
C#
101 lines
2.8 KiB
C#
|
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;
|
|||
|
}
|
|||
|
}
|
|||
|
}
|
|||
|
}
|
|||
|
}
|