COP-17/WinFormsProject/AppView/FormProvider.cs

187 lines
6.0 KiB
C#
Raw Permalink 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.

using Contracts.BindingModels;
using Contracts.SearchModels;
using Contracts.StorageContracts;
using DocumentFormat.OpenXml.Vml;
using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Linq;
using System.Text;
using System.Text.RegularExpressions;
using System.Threading.Tasks;
using System.Windows.Forms;
using WinForm;
namespace AppView
{
public partial class FormProvider : Form
{
private int? _id;
public int Id { set { _id = value; } }
public readonly IProviderStorage _providerStorage;
public readonly ITypeStorage _typeStorage;
private bool isEdited;
private byte[] _logo = new byte[0];
public FormProvider(IProviderStorage providerStorage, ITypeStorage typeStorage)
{
_providerStorage = providerStorage;
_typeStorage = typeStorage;
isEdited = false;
InitializeComponent();
}
private Image byteArrayToImage(byte[] byteArrayIn)
{
Image res = null;
try
{
MemoryStream ms = new MemoryStream(byteArrayIn, 0, byteArrayIn.Length);
ms.Write(byteArrayIn, 0, byteArrayIn.Length);
res = Image.FromStream(ms, true);//Exception occurs here
}
catch { }
return res;
}
private void FormProvider_Load(object sender, EventArgs e)
{
dropDownList1.ExplicitEvent += OnInputChange;
LoadData();
if (_id.HasValue)
{
try
{
var element = _providerStorage.GetElement(new ProviderSearchModel { Id = _id!.Value });
if (element != null)
{
textBoxName.Text = element.Name;
_logo = element.Logo;
dropDownList1.Selected = element.Type;
textBoxNumber.Text = element.Number;
pictureBox1.Image = byteArrayToImage(_logo);
}
}
catch(Exception ex)
{
MessageBox.Show(ex.Message, "Ошибка при получении записи", MessageBoxButtons.OK, MessageBoxIcon.Error);
}
}
}
private void LoadData()
{
var list = _typeStorage.GetFullList().Select(item => item.Name).ToList();
dropDownList1.Clear();
foreach (var item in list)
{
dropDownList1.ComboBoxItems.Add(item);
}
if (_id != null)
{
var provider = _providerStorage.GetElement(new ProviderSearchModel() { Id = _id!.Value });
dropDownList1.Selected = provider!.Type;
}
}
private void buttonSave_Click(object sender, EventArgs e)
{
if (string.IsNullOrEmpty(textBoxName.Text))
{
MessageBox.Show("Название не указано.");
return;
}
if (_logo.Length == 0)
{
MessageBox.Show("Выберите фото", "Ошибка");
return;
}
if (string.IsNullOrEmpty(dropDownList1.Selected))
{
MessageBox.Show("Не выбран тип изделий.");
return;
}
if (!Regex.IsMatch(textBoxNumber.Text, @"^\d-\d{3}-\d{3}-\d{2}-\d{2}$"))
{
MessageBox.Show("Неправильный формат номера телефона.");
return;
}
isEdited = false;
try
{
var model = new ProviderBindingModel
{
Id = _id ?? 0,
Name = textBoxName.Text,
Logo = _logo,
Type = dropDownList1.Selected,
Number = textBoxNumber.Text
};
var action = _id.HasValue ? _providerStorage.Update(model) : _providerStorage.Insert(model);
DialogResult = DialogResult.OK;
Close();
}
catch (Exception ex)
{
MessageBox.Show(ex.Message, "Ошибка", MessageBoxButtons.OK, MessageBoxIcon.Error);
}
}
private void buttonCancel_Click(object sender, EventArgs e)
{
Close();
}
private void buttonType_Click(object sender, EventArgs e)
{
var service = Program.ServiceProvider?.GetService(typeof(FormType));
if (service is FormType form)
{
form.ShowDialog();
LoadData();
}
}
private void FormProvider_FormClosing(object sender, FormClosingEventArgs e)
{
if (!isEdited) return;
var confirmResult = MessageBox.Show(
"Имеются незафиксированные изменения." +
"\n" +
"Вы действительно хотите закрыть форму?",
"Подтвердите действие",
MessageBoxButtons.YesNo,
MessageBoxIcon.Question
);
if (confirmResult == DialogResult.No) e.Cancel = true;
}
private void buttonImage_Click(object sender, EventArgs e)
{
if (ImgFile.ShowDialog() != DialogResult.OK) return;
Image img = Image.FromFile(ImgFile.FileName);
using (MemoryStream mStream = new MemoryStream())
{
img.Save(mStream, img.RawFormat);
_logo = mStream.ToArray();
}
pictureBox1.Image = img;
}
private void OnInputChange(object sender, EventArgs e)
{
isEdited = true;
}
}
}