fix forms, restruct entities

This commit is contained in:
Ivan Gutorov 2024-11-25 07:56:26 +04:00
parent a57d00ba3e
commit e2106e58e6
16 changed files with 30 additions and 728 deletions

View File

@ -18,7 +18,11 @@ public class Contract
public int PaymentAmount { get; private set; }
public static Contract CreateEntity(int id, int customerID, int executorID, ContractCategory category, DateTime deadline, int paymentAmount)
public IEnumerable<Service> Services { get; private set; } = [];
public static Contract CreateEntity(int id, int customerID, int executorID,
ContractCategory category, DateTime deadline,
int paymentAmount, IEnumerable<Service> services)
{
return new Contract
{
@ -28,7 +32,8 @@ public class Contract
Category = category,
ConclusionDate = DateTime.Now,
Deadline = deadline,
PaymentAmount = paymentAmount
PaymentAmount = paymentAmount,
Services = services
};
}
}

View File

@ -32,7 +32,6 @@
справочникиToolStripMenuItem = new ToolStripMenuItem();
CustomersToolStripMenuItem = new ToolStripMenuItem();
ExecutorsToolStripMenuItem = new ToolStripMenuItem();
ServicesToolStripMenuItem = new ToolStripMenuItem();
операцииToolStripMenuItem = new ToolStripMenuItem();
CustomerContractReviewsToolStripMenuItem = new ToolStripMenuItem();
контрактыToolStripMenuItem = new ToolStripMenuItem();
@ -51,7 +50,7 @@
//
// справочникиToolStripMenuItem
//
справочникиToolStripMenuItem.DropDownItems.AddRange(new ToolStripItem[] { CustomersToolStripMenuItem, ExecutorsToolStripMenuItem, ServicesToolStripMenuItem });
справочникиToolStripMenuItem.DropDownItems.AddRange(new ToolStripItem[] { CustomersToolStripMenuItem, ExecutorsToolStripMenuItem });
справочникиToolStripMenuItem.Name = "справочникиToolStripMenuItem";
справочникиToolStripMenuItem.Size = new Size(94, 20);
справочникиToolStripMenuItem.Text = "Справочники";
@ -70,13 +69,6 @@
ExecutorsToolStripMenuItem.Text = "Исполнители";
ExecutorsToolStripMenuItem.Click += ExecutorsToolStripMenuItem_Click;
//
// ServicesToolStripMenuItem
//
ServicesToolStripMenuItem.Name = "ServicesToolStripMenuItem";
ServicesToolStripMenuItem.Size = new Size(180, 22);
ServicesToolStripMenuItem.Text = "Услуги";
ServicesToolStripMenuItem.Click += ServicesToolStripMenuItem_Click;
//
// операцииToolStripMenuItem
//
операцииToolStripMenuItem.DropDownItems.AddRange(new ToolStripItem[] { CustomerContractReviewsToolStripMenuItem, контрактыToolStripMenuItem });
@ -128,7 +120,6 @@
private ToolStripMenuItem справочникиToolStripMenuItem;
private ToolStripMenuItem CustomersToolStripMenuItem;
private ToolStripMenuItem ExecutorsToolStripMenuItem;
private ToolStripMenuItem ServicesToolStripMenuItem;
private ToolStripMenuItem операцииToolStripMenuItem;
private ToolStripMenuItem отчетыToolStripMenuItem;
private ToolStripMenuItem CustomerContractReviewsToolStripMenuItem;

View File

@ -37,18 +37,6 @@ namespace PIbd_23_Gutorov_I.A._IT_Company
}
}
private void ServicesToolStripMenuItem_Click(object sender, EventArgs e)
{
try
{
_container.Resolve<FormServices>().ShowDialog();
}
catch (Exception ex)
{
MessageBox.Show(ex.Message, "Îøèáêà ïðè çàãðóçêå", MessageBoxButtons.OK, MessageBoxIcon.Error);
}
}
private void ContractsToolStripMenuItem_Click(object sender, EventArgs e)
{
try

View File

@ -42,7 +42,7 @@
labelContractPaymentAmount = new Label();
dataGridViewServices = new DataGridView();
groupBox = new GroupBox();
ColumnServiceDescription = new DataGridViewComboBoxColumn();
ColumnServiceDescription = new DataGridViewTextBoxColumn();
((System.ComponentModel.ISupportInitialize)numericUpDownContractPaymentAmount).BeginInit();
((System.ComponentModel.ISupportInitialize)dataGridViewServices).BeginInit();
groupBox.SuspendLayout();
@ -185,10 +185,10 @@
//
// ColumnServiceDescription
//
ColumnServiceDescription.AutoSizeMode = DataGridViewAutoSizeColumnMode.Fill;
ColumnServiceDescription.HeaderText = "Услуга";
ColumnServiceDescription.Name = "ColumnServiceDescription";
ColumnServiceDescription.Resizable = DataGridViewTriState.True;
ColumnServiceDescription.SortMode = DataGridViewColumnSortMode.Automatic;
//
// FormContract
//
@ -234,6 +234,6 @@
private Label labelContractPaymentAmount;
private DataGridView dataGridViewServices;
private GroupBox groupBox;
private DataGridViewComboBoxColumn ColumnServiceDescription;
private DataGridViewTextBoxColumn ColumnServiceDescription;
}
}

View File

@ -9,7 +9,7 @@ namespace PIbd_23_Gutorov_I.A._IT_Company.Forms
private readonly IContractRepository _contractRepository;
public FormContract(IContractRepository contractRepository, ICustomerRepository customerRepository,
IExecutorRepository executorRepository, IServiceRepository serviceRepository)
IExecutorRepository executorRepository)
{
InitializeComponent();
_contractRepository = contractRepository ?? throw new ArgumentNullException(nameof(contractRepository));
@ -22,10 +22,6 @@ namespace PIbd_23_Gutorov_I.A._IT_Company.Forms
comboBoxContractExecutorId.DisplayMember = "Name";
comboBoxContractExecutorId.DisplayMember = "Id";
ColumnServiceDescription.DataSource = serviceRepository.ReadServices();
ColumnServiceDescription.DisplayMember = "Description";
comboBoxContractExecutorId.DisplayMember = "Id";
foreach (var elem in Enum.GetValues(typeof(ContractCategory)))
{
checkedListBoxContractCategory.Items.Add(elem);
@ -63,8 +59,22 @@ namespace PIbd_23_Gutorov_I.A._IT_Company.Forms
contractCategory |= (ContractCategory)elem;
}
return Contract.CreateEntity(id, (int)comboBoxContractCustomerId.SelectedValue!, (int)comboBoxContractExecutorId.SelectedValue!,
contractCategory, dateTimePickerContractDeadline.Value, Convert.ToInt32(numericUpDownContractPaymentAmount.Value));
}
return Contract.CreateEntity(id, (int)comboBoxContractCustomerId.SelectedValue!,
(int)comboBoxContractExecutorId.SelectedValue!, contractCategory,
dateTimePickerContractDeadline.Value, Convert.ToInt32(numericUpDownContractPaymentAmount.Value),
CreateServicesFromDataGrid());
}
private List<Service> CreateServicesFromDataGrid()
{
var list = new List<Service>();
foreach (DataGridViewRow row in dataGridViewServices.Rows)
if (!row.IsNewRow)
list.Add(Service.CreateEntity(0, Convert.ToString(row.Cells["Description"].Value)!, 0));
return list;
}
}
}

View File

@ -49,7 +49,7 @@ namespace PIbd_23_Gutorov_I.A._IT_Company.Forms
}
if (_customerId.HasValue) _customerRepository.UpdateCustomer(CreateCustomer(_customerId.Value));
else _customerRepository.UpdateCustomer(CreateCustomer(0));
else _customerRepository.CreateCustomer(CreateCustomer(0));
Close();
}

View File

@ -50,7 +50,7 @@ namespace PIbd_23_Gutorov_I.A._IT_Company.Forms
}
if (_executorId.HasValue) _executorRepository.UpdateExecutor(CreateExecutor(_executorId.Value));
else _executorRepository.UpdateExecutor(CreateExecutor(0));
else _executorRepository.CreateExecutor(CreateExecutor(0));
Close();
}

View File

@ -1,121 +0,0 @@
namespace PIbd_23_Gutorov_I.A._IT_Company.Forms
{
partial class FormService
{
/// <summary>
/// Required designer variable.
/// </summary>
private System.ComponentModel.IContainer components = null;
/// <summary>
/// Clean up any resources being used.
/// </summary>
/// <param name="disposing">true if managed resources should be disposed; otherwise, false.</param>
protected override void Dispose(bool disposing)
{
if (disposing && (components != null))
{
components.Dispose();
}
base.Dispose(disposing);
}
#region Windows Form Designer generated code
/// <summary>
/// Required method for Designer support - do not modify
/// the contents of this method with the code editor.
/// </summary>
private void InitializeComponent()
{
comboBoxServiceContractId = new ComboBox();
labelServiceContractId = new Label();
labelServiceDescription = new Label();
richTextBoxServiceDescription = new RichTextBox();
buttonCancel = new Button();
buttonSave = new Button();
SuspendLayout();
//
// comboBoxServiceContractId
//
comboBoxServiceContractId.DropDownStyle = ComboBoxStyle.DropDownList;
comboBoxServiceContractId.FormattingEnabled = true;
comboBoxServiceContractId.Location = new Point(169, 6);
comboBoxServiceContractId.Name = "comboBoxServiceContractId";
comboBoxServiceContractId.Size = new Size(202, 23);
comboBoxServiceContractId.TabIndex = 15;
//
// labelServiceContractId
//
labelServiceContractId.AutoSize = true;
labelServiceContractId.Location = new Point(12, 9);
labelServiceContractId.Name = "labelServiceContractId";
labelServiceContractId.Size = new Size(60, 15);
labelServiceContractId.TabIndex = 14;
labelServiceContractId.Text = "Контракт:";
//
// labelServiceDescription
//
labelServiceDescription.AutoSize = true;
labelServiceDescription.Location = new Point(12, 38);
labelServiceDescription.Name = "labelServiceDescription";
labelServiceDescription.Size = new Size(65, 15);
labelServiceDescription.TabIndex = 30;
labelServiceDescription.Text = "Описание:";
//
// richTextBoxServiceDescription
//
richTextBoxServiceDescription.Location = new Point(169, 35);
richTextBoxServiceDescription.Name = "richTextBoxServiceDescription";
richTextBoxServiceDescription.Size = new Size(202, 96);
richTextBoxServiceDescription.TabIndex = 29;
richTextBoxServiceDescription.Text = "";
//
// buttonCancel
//
buttonCancel.Location = new Point(12, 166);
buttonCancel.Name = "buttonCancel";
buttonCancel.Size = new Size(359, 23);
buttonCancel.TabIndex = 32;
buttonCancel.Text = "Отмена";
buttonCancel.UseVisualStyleBackColor = true;
buttonCancel.Click += ButtonCancel_Click;
//
// buttonSave
//
buttonSave.Location = new Point(12, 137);
buttonSave.Name = "buttonSave";
buttonSave.Size = new Size(359, 23);
buttonSave.TabIndex = 31;
buttonSave.Text = "Сохранить";
buttonSave.UseVisualStyleBackColor = true;
buttonSave.Click += ButtonSave_Click;
//
// FormService
//
AutoScaleDimensions = new SizeF(7F, 15F);
AutoScaleMode = AutoScaleMode.Font;
ClientSize = new Size(387, 208);
Controls.Add(buttonCancel);
Controls.Add(buttonSave);
Controls.Add(labelServiceDescription);
Controls.Add(richTextBoxServiceDescription);
Controls.Add(comboBoxServiceContractId);
Controls.Add(labelServiceContractId);
Name = "FormService";
StartPosition = FormStartPosition.CenterParent;
Text = "Услуга";
ResumeLayout(false);
PerformLayout();
}
#endregion
private ComboBox comboBoxServiceContractId;
private Label labelServiceContractId;
private Label labelServiceDescription;
private RichTextBox richTextBoxServiceDescription;
private Button buttonCancel;
private Button buttonSave;
}
}

View File

@ -1,64 +0,0 @@
using PIbd_23_Gutorov_I.A._IT_Company.Entities;
using PIbd_23_Gutorov_I.A._IT_Company.Repositories;
namespace PIbd_23_Gutorov_I.A._IT_Company.Forms
{
public partial class FormService : Form
{
private readonly IServiceRepository _serviceRepository;
private int? _serviceId;
public int Id
{
set
{
try
{
var contract = _serviceRepository.ReadServiceById(value);
if (contract == null) throw new InvalidDataException(nameof(contract));
richTextBoxServiceDescription.Text = contract.Description;
_serviceId = value;
}
catch (Exception ex)
{
MessageBox.Show(ex.Message, "Ошибка при получении данных", MessageBoxButtons.OK, MessageBoxIcon.Error);
return;
}
}
}
public FormService(IServiceRepository serviceRepository, IContractRepository contractRepository)
{
InitializeComponent();
_serviceRepository = serviceRepository ?? throw new ArgumentNullException(nameof(serviceRepository));
comboBoxServiceContractId.DataSource = contractRepository.ReadContracts();
comboBoxServiceContractId.DisplayMember = "Id";
}
private void ButtonSave_Click(object sender, EventArgs e)
{
try
{
if (comboBoxServiceContractId.SelectedIndex < 0 ||
string.IsNullOrEmpty(richTextBoxServiceDescription.Text))
{
throw new Exception("Имеются незаполненные поля");
}
_serviceRepository.CreateService(Service.CreateEntity(0,
richTextBoxServiceDescription.Text, (int)comboBoxServiceContractId.SelectedValue!));
Close();
}
catch (Exception ex)
{
MessageBox.Show(ex.Message, "Ошибка при сохранении", MessageBoxButtons.OK, MessageBoxIcon.Error);
}
}
private void ButtonCancel_Click(object sender, EventArgs e) => Close();
}
}

View File

@ -1,120 +0,0 @@
<?xml version="1.0" encoding="utf-8"?>
<root>
<!--
Microsoft ResX Schema
Version 2.0
The primary goals of this format is to allow a simple XML format
that is mostly human readable. The generation and parsing of the
various data types are done through the TypeConverter classes
associated with the data types.
Example:
... ado.net/XML headers & schema ...
<resheader name="resmimetype">text/microsoft-resx</resheader>
<resheader name="version">2.0</resheader>
<resheader name="reader">System.Resources.ResXResourceReader, System.Windows.Forms, ...</resheader>
<resheader name="writer">System.Resources.ResXResourceWriter, System.Windows.Forms, ...</resheader>
<data name="Name1"><value>this is my long string</value><comment>this is a comment</comment></data>
<data name="Color1" type="System.Drawing.Color, System.Drawing">Blue</data>
<data name="Bitmap1" mimetype="application/x-microsoft.net.object.binary.base64">
<value>[base64 mime encoded serialized .NET Framework object]</value>
</data>
<data name="Icon1" type="System.Drawing.Icon, System.Drawing" mimetype="application/x-microsoft.net.object.bytearray.base64">
<value>[base64 mime encoded string representing a byte array form of the .NET Framework object]</value>
<comment>This is a comment</comment>
</data>
There are any number of "resheader" rows that contain simple
name/value pairs.
Each data row contains a name, and value. The row also contains a
type or mimetype. Type corresponds to a .NET class that support
text/value conversion through the TypeConverter architecture.
Classes that don't support this are serialized and stored with the
mimetype set.
The mimetype is used for serialized objects, and tells the
ResXResourceReader how to depersist the object. This is currently not
extensible. For a given mimetype the value must be set accordingly:
Note - application/x-microsoft.net.object.binary.base64 is the format
that the ResXResourceWriter will generate, however the reader can
read any of the formats listed below.
mimetype: application/x-microsoft.net.object.binary.base64
value : The object must be serialized with
: System.Runtime.Serialization.Formatters.Binary.BinaryFormatter
: and then encoded with base64 encoding.
mimetype: application/x-microsoft.net.object.soap.base64
value : The object must be serialized with
: System.Runtime.Serialization.Formatters.Soap.SoapFormatter
: and then encoded with base64 encoding.
mimetype: application/x-microsoft.net.object.bytearray.base64
value : The object must be serialized into a byte array
: using a System.ComponentModel.TypeConverter
: and then encoded with base64 encoding.
-->
<xsd:schema id="root" xmlns="" xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:msdata="urn:schemas-microsoft-com:xml-msdata">
<xsd:import namespace="http://www.w3.org/XML/1998/namespace" />
<xsd:element name="root" msdata:IsDataSet="true">
<xsd:complexType>
<xsd:choice maxOccurs="unbounded">
<xsd:element name="metadata">
<xsd:complexType>
<xsd:sequence>
<xsd:element name="value" type="xsd:string" minOccurs="0" />
</xsd:sequence>
<xsd:attribute name="name" use="required" type="xsd:string" />
<xsd:attribute name="type" type="xsd:string" />
<xsd:attribute name="mimetype" type="xsd:string" />
<xsd:attribute ref="xml:space" />
</xsd:complexType>
</xsd:element>
<xsd:element name="assembly">
<xsd:complexType>
<xsd:attribute name="alias" type="xsd:string" />
<xsd:attribute name="name" type="xsd:string" />
</xsd:complexType>
</xsd:element>
<xsd:element name="data">
<xsd:complexType>
<xsd:sequence>
<xsd:element name="value" type="xsd:string" minOccurs="0" msdata:Ordinal="1" />
<xsd:element name="comment" type="xsd:string" minOccurs="0" msdata:Ordinal="2" />
</xsd:sequence>
<xsd:attribute name="name" type="xsd:string" use="required" msdata:Ordinal="1" />
<xsd:attribute name="type" type="xsd:string" msdata:Ordinal="3" />
<xsd:attribute name="mimetype" type="xsd:string" msdata:Ordinal="4" />
<xsd:attribute ref="xml:space" />
</xsd:complexType>
</xsd:element>
<xsd:element name="resheader">
<xsd:complexType>
<xsd:sequence>
<xsd:element name="value" type="xsd:string" minOccurs="0" msdata:Ordinal="1" />
</xsd:sequence>
<xsd:attribute name="name" type="xsd:string" use="required" />
</xsd:complexType>
</xsd:element>
</xsd:choice>
</xsd:complexType>
</xsd:element>
</xsd:schema>
<resheader name="resmimetype">
<value>text/microsoft-resx</value>
</resheader>
<resheader name="version">
<value>2.0</value>
</resheader>
<resheader name="reader">
<value>System.Resources.ResXResourceReader, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
</resheader>
<resheader name="writer">
<value>System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
</resheader>
</root>

View File

@ -1,126 +0,0 @@
namespace PIbd_23_Gutorov_I.A._IT_Company.Forms
{
partial class FormServices
{
/// <summary>
/// Required designer variable.
/// </summary>
private System.ComponentModel.IContainer components = null;
/// <summary>
/// Clean up any resources being used.
/// </summary>
/// <param name="disposing">true if managed resources should be disposed; otherwise, false.</param>
protected override void Dispose(bool disposing)
{
if (disposing && (components != null))
{
components.Dispose();
}
base.Dispose(disposing);
}
#region Windows Form Designer generated code
/// <summary>
/// Required method for Designer support - do not modify
/// the contents of this method with the code editor.
/// </summary>
private void InitializeComponent()
{
dataGridViewData = new DataGridView();
panel = new Panel();
buttonDel = new Button();
buttonUpd = new Button();
buttonAdd = new Button();
((System.ComponentModel.ISupportInitialize)dataGridViewData).BeginInit();
panel.SuspendLayout();
SuspendLayout();
//
// dataGridViewData
//
dataGridViewData.AllowUserToAddRows = false;
dataGridViewData.AllowUserToDeleteRows = false;
dataGridViewData.AllowUserToResizeColumns = false;
dataGridViewData.AllowUserToResizeRows = false;
dataGridViewData.AutoSizeColumnsMode = DataGridViewAutoSizeColumnsMode.Fill;
dataGridViewData.ColumnHeadersHeightSizeMode = DataGridViewColumnHeadersHeightSizeMode.AutoSize;
dataGridViewData.Dock = DockStyle.Fill;
dataGridViewData.Location = new Point(0, 0);
dataGridViewData.MultiSelect = false;
dataGridViewData.Name = "dataGridViewData";
dataGridViewData.ReadOnly = true;
dataGridViewData.RowHeadersVisible = false;
dataGridViewData.SelectionMode = DataGridViewSelectionMode.FullRowSelect;
dataGridViewData.Size = new Size(677, 450);
dataGridViewData.TabIndex = 5;
//
// panel
//
panel.Controls.Add(buttonDel);
panel.Controls.Add(buttonUpd);
panel.Controls.Add(buttonAdd);
panel.Dock = DockStyle.Right;
panel.Location = new Point(677, 0);
panel.Name = "panel";
panel.Size = new Size(123, 450);
panel.TabIndex = 4;
//
// buttonDel
//
buttonDel.BackgroundImage = Properties.Resources.icon_remove_button;
buttonDel.BackgroundImageLayout = ImageLayout.Stretch;
buttonDel.Location = new Point(16, 204);
buttonDel.Name = "buttonDel";
buttonDel.Size = new Size(90, 90);
buttonDel.TabIndex = 2;
buttonDel.UseVisualStyleBackColor = true;
buttonDel.Click += ButtonDel_Click;
//
// buttonUpd
//
buttonUpd.BackgroundImage = Properties.Resources.icon_edit_button;
buttonUpd.BackgroundImageLayout = ImageLayout.Stretch;
buttonUpd.Location = new Point(16, 108);
buttonUpd.Name = "buttonUpd";
buttonUpd.Size = new Size(90, 90);
buttonUpd.TabIndex = 1;
buttonUpd.UseVisualStyleBackColor = true;
buttonUpd.Click += ButtonUpd_Click;
//
// buttonAdd
//
buttonAdd.BackgroundImage = Properties.Resources.icon_add_button;
buttonAdd.BackgroundImageLayout = ImageLayout.Stretch;
buttonAdd.Location = new Point(16, 12);
buttonAdd.Name = "buttonAdd";
buttonAdd.Size = new Size(90, 90);
buttonAdd.TabIndex = 0;
buttonAdd.UseVisualStyleBackColor = true;
buttonAdd.Click += ButtonAdd_Click;
//
// FormServices
//
AutoScaleDimensions = new SizeF(7F, 15F);
AutoScaleMode = AutoScaleMode.Font;
ClientSize = new Size(800, 450);
Controls.Add(dataGridViewData);
Controls.Add(panel);
Name = "FormServices";
StartPosition = FormStartPosition.CenterParent;
Text = "Услуги";
Load += FormServices_Load;
((System.ComponentModel.ISupportInitialize)dataGridViewData).EndInit();
panel.ResumeLayout(false);
ResumeLayout(false);
}
#endregion
private DataGridView dataGridViewData;
private Panel panel;
private Button buttonDel;
private Button buttonUpd;
private Button buttonAdd;
}
}

View File

@ -1,96 +0,0 @@
using PIbd_23_Gutorov_I.A._IT_Company.Repositories;
using Unity;
namespace PIbd_23_Gutorov_I.A._IT_Company.Forms
{
public partial class FormServices : Form
{
private readonly IUnityContainer _container;
private readonly IServiceRepository _serviceRepository;
public FormServices(IUnityContainer container, IServiceRepository serviceRepository)
{
InitializeComponent();
_container = container ?? throw new ArgumentException(nameof(container));
_serviceRepository = serviceRepository ?? throw new ArgumentException(nameof(serviceRepository));
}
private void FormServices_Load(object sender, EventArgs e)
{
try
{
LoadList();
}
catch (Exception ex)
{
MessageBox.Show(ex.Message, "Ошибка при загрузке", MessageBoxButtons.OK, MessageBoxIcon.Error);
}
}
private void ButtonAdd_Click(object sender, EventArgs e)
{
try
{
_container.Resolve<FormService>().ShowDialog();
LoadList();
}
catch (Exception ex)
{
MessageBox.Show(ex.Message, "Ошибка при добавлении", MessageBoxButtons.OK, MessageBoxIcon.Error);
}
}
private void ButtonUpd_Click(object sender, EventArgs e)
{
if (!TryGetIdentifierFromSelectedRow(out var findId))
return;
try
{
var form = _container.Resolve<FormService>();
form.Id = findId;
form.ShowDialog();
LoadList();
}
catch (Exception ex)
{
MessageBox.Show(ex.Message, "Ошибка при изменении", MessageBoxButtons.OK, MessageBoxIcon.Error);
}
}
private void ButtonDel_Click(object sender, EventArgs e)
{
if (!TryGetIdentifierFromSelectedRow(out var findId))
return;
if (MessageBox.Show("Удалить запись?", "Удаление", MessageBoxButtons.YesNo) != DialogResult.Yes)
return;
try
{
_serviceRepository.DeleteService(findId);
LoadList();
}
catch (Exception ex)
{
MessageBox.Show(ex.Message, "Ошибка при удалении", MessageBoxButtons.OK, MessageBoxIcon.Error);
}
}
private void LoadList() => dataGridViewData.DataSource = _serviceRepository.ReadServices();
private bool TryGetIdentifierFromSelectedRow(out int id)
{
id = 0;
if (dataGridViewData.SelectedRows.Count < 1)
{
MessageBox.Show("Нет выбранной записи", "Ошибка", MessageBoxButtons.OK, MessageBoxIcon.Error);
return false;
}
id = Convert.ToInt32(dataGridViewData.SelectedRows[0].Cells["Id"].Value);
return true;
}
}
}

View File

@ -1,120 +0,0 @@
<?xml version="1.0" encoding="utf-8"?>
<root>
<!--
Microsoft ResX Schema
Version 2.0
The primary goals of this format is to allow a simple XML format
that is mostly human readable. The generation and parsing of the
various data types are done through the TypeConverter classes
associated with the data types.
Example:
... ado.net/XML headers & schema ...
<resheader name="resmimetype">text/microsoft-resx</resheader>
<resheader name="version">2.0</resheader>
<resheader name="reader">System.Resources.ResXResourceReader, System.Windows.Forms, ...</resheader>
<resheader name="writer">System.Resources.ResXResourceWriter, System.Windows.Forms, ...</resheader>
<data name="Name1"><value>this is my long string</value><comment>this is a comment</comment></data>
<data name="Color1" type="System.Drawing.Color, System.Drawing">Blue</data>
<data name="Bitmap1" mimetype="application/x-microsoft.net.object.binary.base64">
<value>[base64 mime encoded serialized .NET Framework object]</value>
</data>
<data name="Icon1" type="System.Drawing.Icon, System.Drawing" mimetype="application/x-microsoft.net.object.bytearray.base64">
<value>[base64 mime encoded string representing a byte array form of the .NET Framework object]</value>
<comment>This is a comment</comment>
</data>
There are any number of "resheader" rows that contain simple
name/value pairs.
Each data row contains a name, and value. The row also contains a
type or mimetype. Type corresponds to a .NET class that support
text/value conversion through the TypeConverter architecture.
Classes that don't support this are serialized and stored with the
mimetype set.
The mimetype is used for serialized objects, and tells the
ResXResourceReader how to depersist the object. This is currently not
extensible. For a given mimetype the value must be set accordingly:
Note - application/x-microsoft.net.object.binary.base64 is the format
that the ResXResourceWriter will generate, however the reader can
read any of the formats listed below.
mimetype: application/x-microsoft.net.object.binary.base64
value : The object must be serialized with
: System.Runtime.Serialization.Formatters.Binary.BinaryFormatter
: and then encoded with base64 encoding.
mimetype: application/x-microsoft.net.object.soap.base64
value : The object must be serialized with
: System.Runtime.Serialization.Formatters.Soap.SoapFormatter
: and then encoded with base64 encoding.
mimetype: application/x-microsoft.net.object.bytearray.base64
value : The object must be serialized into a byte array
: using a System.ComponentModel.TypeConverter
: and then encoded with base64 encoding.
-->
<xsd:schema id="root" xmlns="" xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:msdata="urn:schemas-microsoft-com:xml-msdata">
<xsd:import namespace="http://www.w3.org/XML/1998/namespace" />
<xsd:element name="root" msdata:IsDataSet="true">
<xsd:complexType>
<xsd:choice maxOccurs="unbounded">
<xsd:element name="metadata">
<xsd:complexType>
<xsd:sequence>
<xsd:element name="value" type="xsd:string" minOccurs="0" />
</xsd:sequence>
<xsd:attribute name="name" use="required" type="xsd:string" />
<xsd:attribute name="type" type="xsd:string" />
<xsd:attribute name="mimetype" type="xsd:string" />
<xsd:attribute ref="xml:space" />
</xsd:complexType>
</xsd:element>
<xsd:element name="assembly">
<xsd:complexType>
<xsd:attribute name="alias" type="xsd:string" />
<xsd:attribute name="name" type="xsd:string" />
</xsd:complexType>
</xsd:element>
<xsd:element name="data">
<xsd:complexType>
<xsd:sequence>
<xsd:element name="value" type="xsd:string" minOccurs="0" msdata:Ordinal="1" />
<xsd:element name="comment" type="xsd:string" minOccurs="0" msdata:Ordinal="2" />
</xsd:sequence>
<xsd:attribute name="name" type="xsd:string" use="required" msdata:Ordinal="1" />
<xsd:attribute name="type" type="xsd:string" msdata:Ordinal="3" />
<xsd:attribute name="mimetype" type="xsd:string" msdata:Ordinal="4" />
<xsd:attribute ref="xml:space" />
</xsd:complexType>
</xsd:element>
<xsd:element name="resheader">
<xsd:complexType>
<xsd:sequence>
<xsd:element name="value" type="xsd:string" minOccurs="0" msdata:Ordinal="1" />
</xsd:sequence>
<xsd:attribute name="name" type="xsd:string" use="required" />
</xsd:complexType>
</xsd:element>
</xsd:choice>
</xsd:complexType>
</xsd:element>
</xsd:schema>
<resheader name="resmimetype">
<value>text/microsoft-resx</value>
</resheader>
<resheader name="version">
<value>2.0</value>
</resheader>
<resheader name="reader">
<value>System.Resources.ResXResourceReader, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
</resheader>
<resheader name="writer">
<value>System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
</resheader>
</root>

View File

@ -26,7 +26,6 @@ namespace PIbd_23_Gutorov_I.A._IT_Company
container.RegisterType<ICustomerExecutorReviewRepository, CustomerExecutorReviewRepository>();
container.RegisterType<ICustomerRepository, CustomerRepository>();
container.RegisterType<IExecutorRepository, ExecutorRepository>();
container.RegisterType<IServiceRepository, ServiceRepository>();
return container;
}

View File

@ -1,16 +0,0 @@
using PIbd_23_Gutorov_I.A._IT_Company.Entities;
namespace PIbd_23_Gutorov_I.A._IT_Company.Repositories;
public interface IServiceRepository
{
IEnumerable<Service> ReadServices(int? contractId = null);
Service ReadServiceById(int id);
void CreateService(Service service);
void UpdateService(Service service);
void DeleteService(int id);
}

View File

@ -1,28 +0,0 @@
using PIbd_23_Gutorov_I.A._IT_Company.Entities;
namespace PIbd_23_Gutorov_I.A._IT_Company.Repositories.Implementations;
internal class ServiceRepository : IServiceRepository
{
public void CreateService(Service service)
{
}
public void DeleteService(int id)
{
}
public Service ReadServiceById(int id)
{
return Service.CreateEntity(0, string.Empty, 0);
}
public IEnumerable<Service> ReadServices(int? contractId = null)
{
return [];
}
public void UpdateService(Service service)
{
}
}