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; using Diplom_B.DB; namespace Diplom_B { public partial class StatForm : Form { public StatForm() { InitializeComponent(); Init(); UpdateTable(WorkDB.ListStatus()); } private void Init() { if (Program.user == null) this.Close(); { deleteButton.Enabled = Program.user.Usr.Set > 2; createButton.Enabled = Program.user.Usr.Set > 2; changeButton.Enabled = Program.user.Usr.Set > 1; } } private void UpdateTable(Status[] arr, bool reset_cursor = false) { var selected = (!reset_cursor && statGridView.SelectedRows.Count > 0) ? statGridView.SelectedRows[0].Index : -1; { var r = statGridView.Rows; while (r.Count > 0) r.Remove(r[0]); var c = statGridView.Columns; while (c.Count > 0) c.Remove(c[0]); } { var c = statGridView.Columns; c.Add("Id", "№"); c["Id"].Width = 40; c.Add("Name", "Наим."); c["Name"].Width = 100; } { var r = statGridView.Rows; foreach (var stat in arr) r.Add(new object[] { stat.Id, stat.Stat, }); } if (statGridView.Rows.Count > 0) statGridView.Rows[0].Selected = true; if (selected != -1 && selected < statGridView.Rows.Count) for (var i = 0; i < statGridView.Rows.Count; i++) statGridView.Rows[i].Selected = (i == selected); statGridView_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 void statGridView_CurrentCellChanged(object sender, EventArgs e) { if (statGridView.SelectedRows.Count != 1) return; { var stat = WorkDB.GetStatus((int)statGridView.SelectedRows[0].Cells[0].Value); if (stat == null) return; nameBox.Text = stat.Stat; } } private void createButton_Click(object sender, EventArgs e) { if (string.IsNullOrEmpty(nameBox.Text)) { ShowError("Статус пустой."); return; } if (WorkDB.GetStatusList().Contains(nameBox.Text)) { ShowError("Статус существует."); return; } try { var r = new Status() { Stat = nameBox.Text }; WorkDB.AddStatus(r); UpdateTable(WorkDB.ListStatus()); } catch { ShowError(); } } private void changeButton_Click(object sender, EventArgs e) { try { if (statGridView.SelectedRows.Count != 1) { ShowError("Статус не выбран."); return; } if (string.IsNullOrEmpty(nameBox.Text)) { ShowError("Название пустое."); return; } var stat = WorkDB.GetStatus((int)statGridView.SelectedRows[0].Cells[0].Value); if (stat.Stat != nameBox.Text && WorkDB.GetStatusList().Contains(nameBox.Text)) { ShowError("Статус существует."); return; } stat.Stat = nameBox.Text; WorkDB.ChangeStatus(stat); UpdateTable(WorkDB.ListStatus()); } catch { ShowError(); } } private void deleteButton_Click(object sender, EventArgs e) { if (statGridView.SelectedRows.Count != 1) { ShowError("Статус не выбран."); return; } if (WorkDB.ListStatus().Length <= 1) { ShowError("Нельзя удалить."); return; } if (WorkDB.GetPostavkyFromStatus((int)statGridView.SelectedRows[0].Cells[0].Value).Length > 0) { ShowError("Есть связи с поставками."); return; } var stat = WorkDB.GetStatus((int)statGridView.SelectedRows[0].Cells[0].Value); if (stat == null) { ShowError("Статуса нет."); return; } try { WorkDB.DeleteStatus(stat); } catch { ShowError(); } UpdateTable(WorkDB.ListStatus()); } } }