Diplom_B/IzdForm.cs

213 lines
5.8 KiB
C#
Raw 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 Diplom_B.DB;
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 Diplom_B
{
public partial class IzdForm : Form
{
private void ClearBoxes()
{
idLable.Text = "";
nameBox.Text = "";
decBox.Text = "";
shifrBox.Text = "";
literaBox.Text = "";
cenaBox.Text = "";
otdRazBox.Text = "";
vedBox.Text = "";
glavKonstrBox.Text = "";
}
private void UpdateTable(Izdelie[] arr, bool reset_cursor = false)
{
var selected = (!reset_cursor && idzGridView.SelectedRows.Count > 0) ? idzGridView.SelectedRows[0].Index : -1;
{
var r = idzGridView.Rows;
while (r.Count > 0)
r.Remove(r[0]);
var c = idzGridView.Columns;
while (c.Count > 0)
c.Remove(c[0]);
}
{
var c = idzGridView.Columns;
c.Add("Id", "№");
c["Id"].Width = 40;
c.Add("Name", "Наим.");
c["Name"].Width = 60;
c.Add("DecNum", "Дец. №");
c["DecNum"].Width = 120;
c.Add("Shifr", "Шифр");
c["Shifr"].Width = 80;
c.Add("Litera", "Литера");
c["Litera"].Width = 50;
c.Add("Cena", "Цена");
c["Cena"].Width = 70;
c.Add("OtdelRazrab", "Отдел");
c["OtdelRazrab"].Width = 40;
c.Add("Ved", "Вед.");
c.Add("GlavKonstr", "Глав. констр.");
}
{
var r = idzGridView.Rows;
foreach (var izd in arr)
r.Add(new object[] {
izd.Id,
izd.Name,
izd.DecNum,
izd.Shifr,
izd.Litera,
izd.Cena.ToString("F2") + " Р",
izd.OtdelRazrab,
izd.Ved,
izd.GlavKonstr
});
}
if (idzGridView.Rows.Count > 0)
idzGridView.Rows[0].Selected = true;
if (selected != -1 && selected < idzGridView.Rows.Count)
for (var i = 0; i < idzGridView.Rows.Count; i++)
idzGridView.Rows[i].Selected = (i == selected);
izdGridView_CurrentCellChanged(this, new EventArgs());
}
private Task errDrop;
private void ShowError(string msg = null)
{
errorLable.Text = string.IsNullOrEmpty(msg) ? "Неизвестная ошибка." : msg;
errorLable.Visible = true;
errDrop = new Task(() =>
{
var fd = errDrop.Id;
Task.Delay(5000).Wait();
if (errDrop.Id == fd)
if (InvokeRequired) Invoke((Action)(() => { errorLable.Visible = false; }));
else errorLable.Visible = false;
});
errDrop.Start();
}
private Task filterDrop;
private void searchBox_TextChanged(object sender, EventArgs e)
{
filterDrop = new Task(() =>
{
var fd = filterDrop.Id;
Task.Delay(1000).Wait();
if (filterDrop.Id == fd)
if (InvokeRequired) Invoke((Action)(() => { UpdateTable(WorkDB.ListIzdelie(searchBox.Text)); }));
else UpdateTable(WorkDB.ListIzdelie(searchBox.Text));
});
filterDrop.Start();
}
public IzdForm()
{
InitializeComponent();
try
{
UpdateTable(WorkDB.ListIzdelie(searchBox.Text));
}
catch
{
ShowError();
}
}
private void izdGridView_CurrentCellChanged(object sender, EventArgs e)
{
ClearBoxes();
if (idzGridView.SelectedRows.Count != 1)
return;
{
var izd = WorkDB.GetIzdelie((int)idzGridView.SelectedRows[0].Cells[0].Value);
if (izd == null)
return;
idLable.Text = izd.Id.ToString();
nameBox.Text = izd.Name;
decBox.Text = izd.DecNum;
shifrBox.Text = izd.Shifr;
literaBox.Text = izd.Litera;
cenaBox.Text = izd.Cena.ToString();
otdRazBox.Text = izd.OtdelRazrab.ToString();
vedBox.Text = izd.Ved;
glavKonstrBox.Text = izd.GlavKonstr;
}
}
private void createButton_Click(object sender, EventArgs e)
{
if (!double.TryParse(cenaBox.Text, out double cena)) { ShowError("Ошибка цены."); return; }
if (!int.TryParse(otdRazBox.Text, out int otdRaz)) { ShowError("Ошибка отдела-разработчика."); return; }
try
{
var r = new Izdelie()
{
Name = nameBox.Text,
DecNum = decBox.Text,
Shifr = shifrBox.Text,
Litera = literaBox.Text,
Cena = cena,
OtdelRazrab = otdRaz,
Ved = vedBox.Text,
GlavKonstr = glavKonstrBox.Text
};
WorkDB.AddIzdelie(r);
UpdateTable(WorkDB.ListIzdelie(searchBox.Text));
}
catch { ShowError(); }
}
private void clearButton_Click(object sender, EventArgs e)
{
ClearBoxes();
}
private void resetSearchButton_Click(object sender, EventArgs e)
{
searchBox.Text = "";
filterDrop = new Task(() => { return; });
UpdateTable(WorkDB.ListIzdelie(searchBox.Text));
}
private void changeButton_Click(object sender, EventArgs e)
{
if (!int.TryParse(idLable.Text, out int idRes)) { ShowError("Изделие не выбрано."); return; }
var izd = WorkDB.GetIzdelie(idRes);
if (izd == null) { ShowError("Нет изделия в БД."); return; }
if(!double.TryParse(cenaBox.Text, out double cena)) { ShowError("Ошибка цены."); return; }
if (!int.TryParse(otdRazBox.Text, out int otdRaz)) { ShowError("Ошибка отдела-разраб."); return; }
try
{
izd.Name = nameBox.Text;
izd.DecNum = decBox.Text;
izd.Shifr = shifrBox.Text;
izd.Litera = literaBox.Text;
izd.Cena = cena;
izd.OtdelRazrab = otdRaz;
izd.Ved = vedBox.Text;
izd.GlavKonstr = glavKonstrBox.Text;
WorkDB.ChangeIzdelie(izd);
}
catch { ShowError(); }
UpdateTable(WorkDB.ListIzdelie(searchBox.Text));
}
private void deleteButton_Click(object sender, EventArgs e)
{
if (!int.TryParse(idLable.Text, out int idRes)) { ShowError("Изделие не выбрано."); return; }
var izd = WorkDB.GetIzdelie(idRes);
if (izd == null) { ShowError("Изделия не существует."); return; }
try
{
WorkDB.DeleteIzdelie(izd);
}
catch { ShowError(); }
UpdateTable(WorkDB.ListIzdelie(searchBox.Text));
}
}
}