Табличный вывод

This commit is contained in:
frog24 2024-05-16 23:13:47 +04:00
parent fb98928ef9
commit 2b8293bc58
15 changed files with 149 additions and 80 deletions

View File

@ -0,0 +1,51 @@
using ComputersShopContracts.Attributes;
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
namespace ComputersShop
{
public 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;
}
}
}
}
}
}

View File

@ -29,14 +29,7 @@ namespace ComputersShop
{
try
{
var list = _clientLogic.ReadList(null);
if (list != null)
{
dataGridView.DataSource = list;
dataGridView.Columns["Id"].Visible = false;
dataGridView.Columns["ClientFIO"].AutoSizeMode = DataGridViewAutoSizeColumnMode.Fill;
dataGridView.Columns["Password"].Visible = false;
}
dataGridView.FillandConfigGrid(_clientLogic.ReadList(null));
_logger.LogInformation("Load clients");
}
catch (Exception ex)

View File

@ -30,13 +30,7 @@ namespace ComputersShop
{
try
{
var list = _logic.ReadList(null);
if (list != null)
{
dataGridView.DataSource = list;
dataGridView.Columns["Id"].Visible = false;
dataGridView.Columns["ComponentName"].AutoSizeMode = DataGridViewAutoSizeColumnMode.Fill;
}
dataGridView.FillandConfigGrid(_logic.ReadList(null));
_logger.LogInformation("Загрузка компонентов");
}
catch (Exception ex)

View File

@ -35,14 +35,7 @@ namespace ComputersShop
{
try
{
var list = _logic.ReadList(null);
if (list != null)
{
dataGridView.DataSource = list;
dataGridView.Columns["Id"].Visible = false;
dataGridView.Columns["ComputerName"].AutoSizeMode = DataGridViewAutoSizeColumnMode.Fill;
dataGridView.Columns["ComputerComponents"].Visible = false;
}
dataGridView.FillandConfigGrid(_logic.ReadList(null));
_logger.LogInformation("Computers loading");
}
catch (Exception ex)

View File

@ -31,14 +31,7 @@ namespace ComputersShop
{
try
{
var list = _logic.ReadList(null);
if (list != null)
{
dataGridView.DataSource = list;
dataGridView.Columns["Id"].Visible = false;
dataGridView.Columns["ImplementerFIO"].AutoSizeMode = DataGridViewAutoSizeColumnMode.Fill;
}
dataGridView.FillandConfigGrid(_logic.ReadList(null));
_logger.LogInformation("Загрузка исполнителей");
}
catch (Exception ex)

View File

@ -27,15 +27,8 @@ namespace ComputersShop
{
try
{
var list = _logic.ReadList(null);
if (list != null)
{
dataGridView.DataSource = list;
dataGridView.Columns["ClientId"].Visible = false;
dataGridView.Columns["MessageId"].Visible = false;
dataGridView.Columns["Body"].AutoSizeMode = DataGridViewAutoSizeColumnMode.Fill;
}
_logger.LogInformation("Load mails");
dataGridView.FillandConfigGrid(_logic.ReadList(null));
_logger.LogInformation("Load mails");
}
catch (Exception ex)
{

View File

@ -41,16 +41,7 @@ namespace ComputersShop
{
try
{
var list = _orderLogic.ReadList(null);
if (list != null)
{
dataGridView.DataSource = list;
dataGridView.Columns["ComputerId"].Visible = false;
dataGridView.Columns["ComputerName"].AutoSizeMode = DataGridViewAutoSizeColumnMode.Fill;
dataGridView.Columns["ClientId"].Visible = false;
dataGridView.Columns["ClientFIO"].AutoSizeMode = DataGridViewAutoSizeColumnMode.Fill;
dataGridView.Columns["ImplementerId"].Visible = false;
}
dataGridView.FillandConfigGrid(_orderLogic.ReadList(null));
_logger.LogInformation("Orders loading");
}
catch (Exception ex)

View File

@ -0,0 +1,27 @@
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
namespace ComputersShopContracts.Attributes
{
[AttributeUsage(AttributeTargets.Property)]
public class ColumnAttribute: Attribute
{
public ColumnAttribute(string title = "", bool visible = true, int width = 0,
GridViewAutoSize gridViewAutoSize = GridViewAutoSize.None, bool isUseAutoSize = false)
{
Title = title;
Visible = visible;
Width = width;
GridViewAutoSize = gridViewAutoSize;
IsUseAutoSize = isUseAutoSize;
}
public string Title { get; private set; }
public bool Visible { get; private set; }
public int Width { get; private set; }
public GridViewAutoSize GridViewAutoSize { get; private set; }
public bool IsUseAutoSize { get; private set; }
}
}

View File

@ -0,0 +1,20 @@
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
namespace ComputersShopContracts.Attributes
{
public enum GridViewAutoSize
{
NotSet = 0,
None = 1,
ColumnHeader = 2,
AllCellsExceptHeader = 4,
AllCells = 6,
DisplayedCellsExceptHeder = 8,
DisplayedCells = 10,
Fill = 16
}
}

View File

@ -1,4 +1,5 @@
using ComputersShopDataModels.Models;
using ComputersShopContracts.Attributes;
using ComputersShopDataModels.Models;
using System;
using System.Collections.Generic;
using System.ComponentModel;
@ -10,12 +11,13 @@ namespace ComputersShopContracts.ViewModels
{
public class ClientViewModel: IClientModel
{
[Column(visible:false)]
public int Id { get; set; }
[DisplayName("ФИО клиента")]
[Column("ФИО клиента", gridViewAutoSize: GridViewAutoSize.Fill, isUseAutoSize: true)]
public string ClientFIO { get; set; } = string.Empty;
[DisplayName("Логин (эл. почта)")]
[Column("Логин (эл. почта)", width: 150)]
public string Email { get; set; } = string.Empty;
[DisplayName("Пароль")]
[Column("Пароль", width: 150)]
public string Password { get; set; } = string.Empty;
}
}

View File

@ -5,16 +5,18 @@ using System.Linq;
using System.Text;
using System.Threading.Tasks;
using ComputersShopDataModels.Models;
using ComputersShopContracts.Attributes;
namespace ComputersShopContracts.ViewModels
{
public class ComponentViewModel: IComponentModel
{
[Column(visible: false)]
public int Id { get; set; }
[DisplayName("Название компонента")]
[Column("Название компонента", gridViewAutoSize: GridViewAutoSize.Fill, isUseAutoSize: true)]
public string ComponentName { get; set; } = string.Empty;
[DisplayName("Цена")]
[Column("Цена", width: 80)]
public double Cost { get; set; }
}
}

View File

@ -5,19 +5,21 @@ using System.Linq;
using System.Text;
using System.Threading.Tasks;
using ComputersShopDataModels.Models;
using ComputersShopContracts.Attributes;
namespace ComputersShopContracts.ViewModels
{
public class ComputerViewModel: IComputerModel
{
[Column(visible: false)]
public int Id { get; set; }
[DisplayName("Название компьютера")]
[Column("Название компьютера", gridViewAutoSize: GridViewAutoSize.Fill, isUseAutoSize: true)]
public string ComputerName { get; set; } = string.Empty;
[DisplayName("Цена")]
[Column("Цена", width: 100)]
public double Price { get; set; }
[Column(visible: false)]
public Dictionary<int, (IComponentModel, int)> ComputerComponents { get; set; } = new();
}
}

View File

@ -1,4 +1,5 @@
using ComputersShopDataModels.Models;
using ComputersShopContracts.Attributes;
using System;
using System.Collections.Generic;
using System.ComponentModel;
@ -10,14 +11,15 @@ namespace ComputersShopContracts.ViewModels
{
public class ImplementerViewModel: IImplementerModel
{
[Column(visible:false)]
public int Id { get; set; }
[DisplayName("ФИО исполнителя")]
[Column("ФИО исполнителя", gridViewAutoSize: GridViewAutoSize.Fill, isUseAutoSize: true)]
public string ImplementerFIO { get; set; } = string.Empty;
[DisplayName("Пароль")]
[Column("Пароль", width:150)]
public string Password { get; set; } = string.Empty;
[DisplayName("Стаж работы")]
[Column("Стаж работы", gridViewAutoSize: GridViewAutoSize.AllCells, isUseAutoSize: true)]
public int WorkExperience { get; set; }
[DisplayName("Квалификация")]
[Column("Квалификация", gridViewAutoSize: GridViewAutoSize.AllCells, isUseAutoSize:true)]
public int Qualification { get; set; }
}
}

View File

@ -4,20 +4,25 @@ using System.ComponentModel;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using ComputersShopContracts.Attributes;
namespace ComputersShopContracts.ViewModels
{
public class MessageInfoViewModel
{
[Column(visible:false)]
public string MessageId { get; set; } = string.Empty;
[Column(visible:false)]
public int? ClientId { get; set; }
[DisplayName("Имя отправителя")]
[Column("Имя отправителя", gridViewAutoSize: GridViewAutoSize.DisplayedCells, isUseAutoSize: true)]
public string SenderName { get; set; } = string.Empty;
[DisplayName("Дата доставки")]
[Column("Дата доставки", width:100)]
public DateTime DateDelivery { get; set; }
[DisplayName("Тема")]
[Column("Тема", width:150)]
public string Subject { get; set; } = string.Empty;
[DisplayName("Содержание")]
[Column("Содержание", gridViewAutoSize: GridViewAutoSize.Fill, isUseAutoSize: true)]
public string Body { get; set; } = string.Empty;
[Column(visible: false)]
public int Id => throw new NotImplementedException();
}
}

View File

@ -1,5 +1,6 @@
using ComputersShopDataModels.Enums;
using ComputersShopDataModels.Models;
using ComputersShopContracts.Attributes;
using System;
using System.Collections.Generic;
using System.ComponentModel;
@ -11,35 +12,35 @@ namespace ComputersShopContracts.ViewModels
{
public class OrderViewModel: IOrderModel
{
[DisplayName("Номер")]
[Column("Номер", gridViewAutoSize: GridViewAutoSize.AllCells, isUseAutoSize: true)]
public int Id { get; set; }
[Column(visible: false)]
public int ComputerId { get; set; }
[DisplayName("Компьютер")]
[Column("Компьютер", gridViewAutoSize: GridViewAutoSize.AllCells, isUseAutoSize: true)]
public string ComputerName { get; set; } = string.Empty;
[Column(visible: false)]
public int ClientId { get; set; }
[DisplayName("ФИО клиента")]
[Column("ФИО клиента", gridViewAutoSize: GridViewAutoSize.Fill, isUseAutoSize:true)]
public string ClientFIO { get; set; } = string.Empty;
public int? ImplementerId { get; set; }
[Column(visible: false)]
public int? ImplementerId { get; set; }
[DisplayName("ФИО исполнителя")]
[Column("ФИО исполнителя", gridViewAutoSize: GridViewAutoSize.Fill, isUseAutoSize: true)]
public string ImplementerFIO { get; set; } = string.Empty;
[DisplayName("Количество")]
[Column("Количество", gridViewAutoSize: GridViewAutoSize.AllCells, isUseAutoSize: true)]
public int Count { get; set; }
[DisplayName("Сумма")]
[Column("Сумма", gridViewAutoSize: GridViewAutoSize.AllCells, isUseAutoSize: true)]
public double Sum { get; set; }
[DisplayName("Статус")]
[Column("Статус", gridViewAutoSize: GridViewAutoSize.AllCells, isUseAutoSize: true)]
public OrderStatus Status { get; set; } = OrderStatus.Неизвестен;
[DisplayName("Дата создания")]
[Column("Дата создания", width: 100)]
public DateTime DateCreate { get; set; } = DateTime.Now;
[DisplayName("Дата выполнения")]
[Column("Дата выполнения", width: 100)]
public DateTime? DateImplement { get; set; }
}
}