data grid view new

This commit is contained in:
Ino 2023-04-11 15:57:59 +04:00
parent fc5691398a
commit 8a61dd2832
13 changed files with 181 additions and 150 deletions

View File

@ -0,0 +1,46 @@
using IceCreamShopContracts.Attributes;
namespace IceCreamShopView
{
internal 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

@ -23,23 +23,18 @@ namespace IceCreamShopView
private void LoadData() private void LoadData()
{ {
try try
{ {
var list = _logic.ReadList(null); dataGridView.FillAndConfigGrid(_logic.ReadList(null));
if (list != null) _logger.LogInformation("Загрузка клиентов");
{ }
dataGridView.DataSource = list; catch (Exception ex)
dataGridView.Columns["Id"].Visible = false; {
dataGridView.Columns["ClientFIO"].AutoSizeMode = DataGridViewAutoSizeColumnMode.Fill; _logger.LogError(ex, "Ошибка загрузки клиентов");
} MessageBox.Show(ex.Message, "Ошибка", MessageBoxButtons.OK,
_logger.LogInformation("Загрузка клиентов"); MessageBoxIcon.Error);
} }
catch (Exception ex) }
{
_logger.LogError(ex, "Ошибка загрузки клиентов");
MessageBox.Show(ex.Message, "Ошибка", MessageBoxButtons.OK, MessageBoxIcon.Error);
}
}
private void ButtonDel_Click(object sender, EventArgs e) private void ButtonDel_Click(object sender, EventArgs e)
{ {

View File

@ -33,23 +33,18 @@ namespace IceCreamShopView
private void LoadData() private void LoadData()
{ {
try try
{ {
var list = _logic.ReadList(null); dataGridView.FillAndConfigGrid(_logic.ReadList(null));
if (list != null) _logger.LogInformation("Загрузка компонентов");
{ }
dataGridView.DataSource = list; catch (Exception ex)
dataGridView.Columns["Id"].Visible = false; {
dataGridView.Columns["ComponentName"].AutoSizeMode = DataGridViewAutoSizeColumnMode.Fill; _logger.LogError(ex, "Ошибка загрузки компонентов");
} MessageBox.Show(ex.Message, "Ошибка", MessageBoxButtons.OK,
_logger.LogInformation("Загрузка компонентов"); MessageBoxIcon.Error);
} }
catch (Exception ex) }
{
_logger.LogError(ex, "Ошибка загрузки компонентов");
MessageBox.Show(ex.Message, "Ошибка", MessageBoxButtons.OK, MessageBoxIcon.Error);
}
}
private void buttonAdd_Click(object sender, EventArgs e) private void buttonAdd_Click(object sender, EventArgs e)
{ {

View File

@ -33,24 +33,18 @@ namespace IceCreamShopView
private void LoadData() private void LoadData()
{ {
try try
{ {
var list = _logic.ReadList(null); dataGridView.FillAndConfigGrid(_logic.ReadList(null));
if (list != null) _logger.LogInformation("Загрузка мороженого");
{ }
dataGridView.DataSource = list; catch (Exception ex)
dataGridView.Columns["Id"].Visible = false; {
dataGridView.Columns["IceCreamName"].AutoSizeMode = DataGridViewAutoSizeColumnMode.Fill; _logger.LogError(ex, "Ошибка загрузки мороженого");
dataGridView.Columns["IceCreamComponents"].Visible = false; MessageBox.Show(ex.Message, "Ошибка", MessageBoxButtons.OK,
} MessageBoxIcon.Error);
_logger.LogInformation("Загрузка мороженого"); }
} }
catch (Exception ex)
{
_logger.LogError(ex, "Ошибка загрузки мороженого");
MessageBox.Show(ex.Message, "Ошибка", MessageBoxButtons.OK, MessageBoxIcon.Error);
}
}
private void buttonAdd_Click(object sender, EventArgs e) private void buttonAdd_Click(object sender, EventArgs e)
{ {

View File

@ -24,24 +24,18 @@ namespace IceCreamShopView
private void LoadData() private void LoadData()
{ {
try try
{ {
var list = _logic.ReadList(null); dataGridView.FillAndConfigGrid(_logic.ReadList(null));
if (list != null) _logger.LogInformation("Загрузка исполнителей");
{ }
dataGridView.DataSource = list; catch (Exception ex)
dataGridView.Columns["Id"].Visible = false; {
dataGridView.Columns["ImplementerFIO"].AutoSizeMode = DataGridViewAutoSizeColumnMode.Fill; _logger.LogError(ex, "Ошибка загрузки исполнителей");
} MessageBox.Show(ex.Message, "Ошибка", MessageBoxButtons.OK,
_logger.LogInformation("Загрузка исполнителей"); MessageBoxIcon.Error);
} }
catch (Exception ex) }
{
_logger.LogError(ex, "Ошибка загрузки исполнителей");
MessageBox.Show(ex.Message, "Ошибка", MessageBoxButtons.OK,
MessageBoxIcon.Error);
}
}
private void ButtonAdd_Click(object sender, EventArgs e) private void ButtonAdd_Click(object sender, EventArgs e)
{ {

View File

@ -41,14 +41,7 @@ namespace IceCreamShopView
_logger.LogInformation("Загрузка заказов"); _logger.LogInformation("Загрузка заказов");
try try
{ {
var list = _orderLogic.ReadList(null); dataGridView.FillAndConfigGrid(_orderLogic.ReadList(null));
if (list != null)
{
dataGridView.DataSource = list;
dataGridView.Columns["IceCreamId"].Visible = false;
dataGridView.Columns["ClientId"].Visible = false;
dataGridView.Columns["ImplementerId"].Visible = false;
}
_logger.LogInformation("Загрузка заказов"); _logger.LogInformation("Загрузка заказов");
} }
catch (Exception ex) catch (Exception ex)

View File

@ -19,14 +19,7 @@ namespace IceCreamShopView
{ {
try try
{ {
var list = _logic.ReadList(null); dataGridView.FillAndConfigGrid(_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("Загрузка списка писем"); _logger.LogInformation("Загрузка списка писем");
} }
catch (Exception ex) catch (Exception ex)

View File

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

View File

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

View File

@ -1,4 +1,5 @@
using AbstractIceCreamShopDataModels.Models; using AbstractIceCreamShopDataModels.Models;
using IceCreamShopContracts.Attributes;
using System; using System;
using System.Collections.Generic; using System.Collections.Generic;
using System.ComponentModel; using System.ComponentModel;
@ -10,11 +11,16 @@ namespace IceCreamShopContracts.ViewModels
{ {
public class IceCreamViewModel : IIceCreamModel public class IceCreamViewModel : IIceCreamModel
{ {
public int Id { get; set; } [Column(visible: false)]
[DisplayName("Название мороженого")] public int Id { get; set; }
public string IceCreamName { get; set; } = string.Empty;
[DisplayName("Цена")] [Column("Название мороженого", gridViewAutoSize: GridViewAutoSize.Fill, isUseAutoSize: true)]
public double Price { get; set; } public string IceCreamName { get; set; } = string.Empty;
public Dictionary<int, (IComponentModel, int)> IceCreamComponents { get; set; } = new();
[Column("Цена", width: 100)]
public double Price { get; set; }
[Column(visible: false)]
public Dictionary<int, (IComponentModel, int)> IceCreamComponents { get; set; } = new();
} }
} }

View File

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

View File

@ -1,24 +1,29 @@
using AbstractIceCreamShopDataModels.Models; using AbstractIceCreamShopDataModels.Models;
using IceCreamShopContracts.Attributes;
using System.ComponentModel; using System.ComponentModel;
namespace IceCreamShopContracts.ViewModels namespace IceCreamShopContracts.ViewModels
{ {
public class MessageInfoViewModel : IMessageInfoModel public class MessageInfoViewModel : IMessageInfoModel
{ {
public string MessageId { get; set; } = string.Empty; [Column(visible: false)]
public string MessageId { get; set; } = string.Empty;
public int? ClientId { get; set; } [Column(visible: false)]
public int? ClientId { get; set; }
[DisplayName("Отправитель")] [Column("Отправитель", gridViewAutoSize: GridViewAutoSize.DisplayedCells, isUseAutoSize: true)]
public string SenderName { get; set; } = string.Empty; public string SenderName { get; set; } = string.Empty;
[DisplayName("Дата письма")] [Column("Дата письма", width: 100)]
public DateTime DateDelivery { get; set; } public DateTime DateDelivery { get; set; }
[DisplayName("Заголовок")] [Column("Заголовок", width: 150)]
public string Subject { get; set; } = string.Empty; public string Subject { get; set; } = string.Empty;
[DisplayName("Текст")] [Column("Текст", gridViewAutoSize: GridViewAutoSize.Fill, isUseAutoSize: true)]
public string Body { get; set; } = string.Empty; public string Body { get; set; } = string.Empty;
}
[Column(visible: false)]
}
} }

View File

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