using BusinessLogic.BusinessLogic; using Contracts.BindingModels; using Contracts.BusinessLogicContracts; using Contracts.SearchModels; using Microsoft.Extensions.Logging; using System; using System.Collections.Generic; using System.ComponentModel; using System.Data; using System.Drawing; using System.Linq; using System.Text; using System.Threading.Tasks; using System.Windows.Forms; namespace WinFormsApp { public partial class FormMediaFiles : Form { private readonly ILogger _logger; private readonly IMediaFileLogic _mediafileLogic; private readonly IProductLogic _productLogic; private byte[]? _image; public FormMediaFiles(ILogger logger, IMediaFileLogic mediaFileLogic, IProductLogic productLogic) { InitializeComponent(); _logger = logger; _mediafileLogic = mediaFileLogic; _productLogic = productLogic; _image = null; } private void LoadData() { if (comboBoxProduct.SelectedIndex < 0) return; _logger.LogInformation("Загрузка файлов"); try { var filelist = _mediafileLogic.ReadList(null); if (filelist != null) { dataGridView.DataSource = filelist; } } catch (Exception ex) { } var list = _mediafileLogic.ReadList(new MediaFileSearchModel() { ProductId = (Guid?)comboBoxProduct.SelectedValue ?? Guid.Empty, }); panelFiles.Controls.Clear(); if (list.Count != 0) { foreach (var item in list) { var imageBox = new PictureBox(); imageBox.Dock = DockStyle.Top; using (var ms = new MemoryStream(item.Image)) { Image image = Image.FromStream(ms); imageBox.Image = image; } imageBox.Width = groupBox1.Width; panelFiles.Controls.Add(imageBox); imageBox.SizeMode = PictureBoxSizeMode.Zoom; imageBox.Height = 400; imageBox.BorderStyle = BorderStyle.FixedSingle; var imageLabel = new Label(); imageLabel.Dock = DockStyle.Top; imageLabel.TextAlign = ContentAlignment.MiddleCenter; panelFiles.Controls.Add(imageLabel); panelFiles.Refresh(); } } } private void FormMediaFiles_Load(object sender, EventArgs e) { try { var list = _productLogic.ReadList(null); if (list != null) { comboBoxProduct.DisplayMember = "Name"; comboBoxProduct.ValueMember = "Id"; comboBoxProduct.DataSource = list; comboBoxProduct.SelectedItem = null; } } catch (Exception ex) { _logger.LogError(ex, "Ошибка загрузки списка продуктов"); MessageBox.Show(ex.Message, "Ошибка", MessageBoxButtons.OK, MessageBoxIcon.Error); } } private void comboBoxProduct_SelectedIndexChanged(object sender, EventArgs e) { LoadData(); } private void buttonAdd_Click(object sender, EventArgs e) { if (comboBoxProduct.SelectedIndex != -1 && _image is not null) { _mediafileLogic.Create(new MediaFileBindingModel() { Id = Guid.NewGuid(), Image = _image, ProductId = (Guid)comboBoxProduct.SelectedValue, }); dataGridView.Update(); panelFiles.Refresh(); } } private void buttonSelectFile_Click(object sender, EventArgs e) { var dialog = new OpenFileDialog(); dialog.Filter = "Image Files(*.jpg; *.png; *.jpeg; *.gif; *.bmp)|*.jpg;*.png;*.jpeg;*.gif;*.bmp"; if (dialog.ShowDialog() == DialogResult.OK) { using (var fs = new FileStream(dialog.FileName, FileMode.Open, FileAccess.Read)) { _image = new byte[fs.Length]; fs.Read(_image, 0, (int)fs.Length); } labelFile.Text = Path.GetFileName(dialog.FileName); } } private void FormMediaFiles_Resize(object sender, EventArgs e) { groupBoxFiles.Width = Convert.ToInt32(this.Width * 0.4); panelFiles.Height = this.Height; foreach (var control in this.Controls.OfType()) { control.Width = panelFiles.Width; control.Height = Convert.ToInt32(panelFiles.Height * 0.3); } } } }