using System; using System.Collections.Generic; using System.ComponentModel; using System.Data; using System.Data.SqlClient; using System.Drawing; using System.IO; using System.Linq; using System.Text; using System.Threading.Tasks; using System.Windows.Forms; namespace garment_factory { public partial class fAddZakaz : Form { public fAddZakaz() { InitializeComponent(); } public string IdZakazchik = ""; string IdTkan = "", IdFur = ""; public struct Tkani { public string IdTkan, NameTkan, ColorTkan, Width, Length, Description; public Image PhotoTkan; } List LstTkani = new List(); void GetTkaniFromDB() { SqlConnection con = new SqlConnection(Properties.Settings.Default.Fabrika2024ConnectionString); con.Open(); SqlCommand Query = new SqlCommand("select * from Tkani t join Cveta c on t.id_cvet=c.id_cvet where Dlina > 0", con); SqlDataReader Data = Query.ExecuteReader(); while (Data.Read()) { Tkani Tk = new Tkani(); Tk.IdTkan = Data["id_Tkani"].ToString(); Tk.NameTkan = Data["Nazvanie"].ToString(); Tk.ColorTkan = Data["Name_cvet"].ToString(); Tk.Width = Data["Shirina"].ToString(); Tk.Length = Data["Dlina"].ToString(); Tk.Description = Data["Primechanie"].ToString(); try { // загрузить из таблицы БД байты фотографии в массив byte[] PhotoByte = (byte[])Data["Photo"]; ImageConverter ImConverter = new ImageConverter(); // сконвертировать массив байт в изображение Tk.PhotoTkan = (Bitmap)ImConverter.ConvertFrom(PhotoByte); } catch { // в случае ошибки загрузить пустое изображение из ресурсов Tk.PhotoTkan = Properties.Resources.picture; } LstTkani.Add(Tk); // добавить в список новую ткань } con.Close(); } void FillLVTkani() { LVTkani.Items.Clear(); imageListTkani.Images.Clear(); foreach (Tkani Tk in LstTkani) { // новый элемент для ListView с названием ткани ListViewItem LV = new ListViewItem(Tk.NameTkan); // в ImageList добавить изображение ткани imageListTkani.Images.Add(Tk.PhotoTkan); // связать последнее добавленное изображение с новым элементом ListView LV.ImageIndex = imageListTkani.Images.Count - 1; LVTkani.Items.Add(LV); // добавить новый элемент к ListView } } public struct Furnitura { public string IdFur, NameFur, CountFur; public Image PhotoFur; } List LstFurnitura = new List(); void GetFurnituraFromDB() { SqlConnection con = new SqlConnection(Properties.Settings.Default.Fabrika2024ConnectionString); con.Open(); SqlCommand Query = new SqlCommand("select * from Furnitura where countfur > 0", con); SqlDataReader Data = Query.ExecuteReader(); while (Data.Read()) { Furnitura Fr = new Furnitura(); Fr.IdFur = Data["idfur"].ToString(); Fr.NameFur = Data["namefur"].ToString(); Fr.CountFur = Data["countfur"].ToString(); try { // загрузить из таблицы БД байты фотографии в массив byte[] PhotoByte = (byte[])Data["photo"]; ImageConverter ImConverter = new ImageConverter(); // сконвертировать массив байт в изображение Fr.PhotoFur = (Bitmap)ImConverter.ConvertFrom(PhotoByte); } catch { // в случае ошибки загрузить пустое изображение из ресурсов Fr.PhotoFur = Properties.Resources.picture; } LstFurnitura.Add(Fr); // добавить в список новую фурнитуру } con.Close(); } void FillLVFurnitura() { LVFurnitura.Items.Clear(); ImageListFur.Images.Clear(); foreach (Furnitura Fr in LstFurnitura) { // новый элемент для ListView с названием фурнитуры ListViewItem LV = new ListViewItem(Fr.NameFur); // в ImageList добавить изображение фурнитуры ImageListFur.Images.Add(Fr.PhotoFur); // связать последнее добавленное изображение с новым элементом ListView LV.ImageIndex = ImageListFur.Images.Count - 1; LVFurnitura.Items.Add(LV); // добавить новый элемент к ListView } } int CutTkan(int WidthTkan, int WidthIzd, int LengthIzd, int CountIzd) { // ЕСЛИ УКЛАДЫВАТЬ ИЗДЕЛИЯ НА ТКАНЬ В РУЛОНЕ ПО ШИРИНЕ ИЗДЕЛИЯ // кол-во изделий, умещающихся в один ряд на рулоне ткани int IzdInRow1 = WidthTkan / WidthIzd; // кол-во рядов, в каждом из которых IzdInRow1 изделий int Row1 = CountIzd / IzdInRow1; // если кол-во изделий в 1 ряду умноженное на кол-во рядов меньше // кол-ва всех изделий, добавить кол-во рядов if (IzdInRow1 * Row1 < CountIzd) Row1++; // длина ткани, которую нужно отрезать от рулона, если укладывать изделия // по ширине int CutTkan1 = LengthIzd * Row1; // ЕСЛИ УКЛАДЫВАТЬ ИЗДЕЛИЯ НА ТКАНЬ В РУЛОНЕ ПО ДЛИНЕ ИЗДЕЛИЯ // кол-во изделий, умещающихся в один ряд на рулоне ткани int IzdInRow2 = WidthTkan / LengthIzd; // кол-во рядов, в каждом из которых IzdInRow2 изделий int Row2 = CountIzd / IzdInRow2; // если перемножить кол-во изделий в 1 ряду на кол-во рядов и полученное // значение меньше кол-ва необходимых изделий, значит нужно использовать // еще один ряд if (IzdInRow2 * Row2 < CountIzd) Row2++; // длина ткани, которую нужно отрезать от рулона, если укладывать изделия // по длине int CutTkan2 = WidthIzd * Row2; // вернуть наименьшую длину return Math.Min(CutTkan1, CutTkan2); } private void LVTkani_SelectedIndexChanged(object sender, EventArgs e) { if (LVTkani.SelectedItems.Count > 0) // есть выделенные элементы { int num = LVTkani.SelectedIndices[0]; // номер выделенного элемента NametkanTextBox.Text = LstTkani[num].NameTkan; ColorTextBox.Text = LstTkani[num].ColorTkan; WidthTextBox.Text = LstTkani[num].Width; LengthTextBox.Text = LstTkani[num].Length; DescriptionTextBox.Text = LstTkani[num].Description; IdTkan = LstTkani[num].IdTkan; } else // нет выделенных элементов { NametkanTextBox.Text = ""; ColorTextBox.Text = ""; WidthTextBox.Text = ""; LengthTextBox.Text = ""; DescriptionTextBox.Text = ""; IdTkan = ""; } } private void BtnOK_Click(object sender, EventArgs e) { if(TbxCountIzd.Text=="" && TbxCountFur.Text=="") { MessageBox.Show("Заполните поля для формирования заказа!", "Внимание"); return; } int NewCountFur = int.Parse(TbxCountFurSklad.Text) - int.Parse(TbxCountFur.Text) * int.Parse(TbxCountIzd.Text); SqlConnection con = new SqlConnection(Properties.Settings.Default.Fabrika2024ConnectionString); con.Open(); string t1 = string.Format(@"update Furnitura set countfur = {0} where idfur = {1}", NewCountFur, IdFur); SqlCommand query = new SqlCommand(t1, con); // выполнить запрос query.ExecuteNonQuery(); con.Close(); int WidthTkan = int.Parse(WidthTextBox.Text); // ширина ткани // ширина изделия int WidthIzd = int.Parse(DgvIzd.CurrentRow.Cells[2].Value.ToString()); // длина изделия int LengthIzd = int.Parse(DgvIzd.CurrentRow.Cells[1].Value.ToString()); int CountIzd = int.Parse(TbxCountIzd.Text); // кол-во изделий // отрезать от рулона ткани кусок нужной длины int NewLengthTkan = int.Parse(LengthTextBox.Text) - CutTkan(WidthTkan, WidthIzd, LengthIzd, CountIzd); int IdManager = 2; try { con.Open(); // SQL-запрос для добавления нового заказа string t = String.Format("insert into Orders (id_izdelie, id_zakaz, id_manager, idtkani, id_furnitur, CountFurnit, Countizdel) " + "values ({0}, {1}, {2}, {3}, {4}, {5}, {6})", id_izdelieLabel1.Text, IdZakazchik, IdManager, IdTkan, IdFur, TbxCountFur.Text, TbxCountIzd.Text); SqlCommand query1 = new SqlCommand(t, con); // выполнить запрос query1.ExecuteNonQuery(); con.Close(); MessageBox.Show("Заказ сформирован.", "Внимание!", MessageBoxButtons.OK, MessageBoxIcon.Information); this.Close(); // закрыть форму } catch { MessageBox.Show("Ошибка добавления нового заказа.", "Внимание!", MessageBoxButtons.OK, MessageBoxIcon.Exclamation); } } public struct Izd { public string idIZd, NameIzd, CountIzd, LengthIzd, WidthIzd; } List LstIzd = new List(); void GetIzdFromDB() { SqlConnection con = new SqlConnection(Properties.Settings.Default.Fabrika2024ConnectionString); con.Open(); SqlCommand Query = new SqlCommand("select * from Izdelie where length > 0 and width > 0", con); SqlDataReader Data = Query.ExecuteReader(); while (Data.Read()) { Izd izd1 = new Izd(); izd1.idIZd = Data["id_izdelie"].ToString(); izd1.NameIzd = Data["Name_izd"].ToString(); izd1.WidthIzd = Data["width"].ToString(); izd1.LengthIzd = Data["length"].ToString(); } con.Close(); } private void LVFurnitura_SelectedIndexChanged(object sender, EventArgs e) { if (LVFurnitura.SelectedItems.Count > 0) // есть выделенные элементы { int num = LVFurnitura.SelectedIndices[0]; // номер выделенного элемента TbxNameFur.Text = LstFurnitura[num].NameFur; TbxCountFurSklad.Text = LstFurnitura[num].CountFur; IdFur = LstFurnitura[num].IdFur; } else // нет выделенных элементов { TbxNameFur.Text = ""; TbxCountFurSklad.Text = ""; IdFur = ""; } } private void fAddZakaz_Load(object sender, EventArgs e) { // TODO: данная строка кода позволяет загрузить данные в таблицу "fabrika2024DataSet.Izdelie". При необходимости она может быть перемещена или удалена. this.izdelieTableAdapter.Fill(this.fabrika2024DataSet.Izdelie); // TODO: данная строка кода позволяет загрузить данные в таблицу "fabrika2024DataSet.Orders". При необходимости она может быть перемещена или удалена. this.ordersTableAdapter.Fill(this.fabrika2024DataSet.Orders); // TODO: данная строка кода позволяет загрузить данные в таблицу "fabrika2024DataSet.Tkani". При необходимости она может быть перемещена или удалена. this.tkaniTableAdapter.Fill(this.fabrika2024DataSet.Tkani); GetIzdFromDB(); GetTkaniFromDB(); FillLVTkani(); GetFurnituraFromDB(); FillLVFurnitura(); } } }