123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448 |
- using System;
- using System.Collections.Generic;
- using System.ComponentModel;
- using System.Data;
- using System.Data.SqlClient;
- using System.Drawing;
- using System.Linq;
- using System.Text;
- using System.Threading.Tasks;
- using System.Windows.Forms;
- namespace Демо
- {
- public partial class Каталог : Form
- {
- Label[] LB; //объявление массива лейблов
- PictureBox[] PB; //объявление массива картинок
- TableLayoutPanel[] TB; //объявление массива панелей (4 панели для каждой записи)
- Button[] delBtn;
- Button[] redBtn;
- public Каталог()
- {
- InitializeComponent();
- SqlConnection cn; //объявление подключения
- Program.conn(out cn); //функция подключения из Program.cs
- Program.Role.id = 0;
- SqlDataAdapter da = new SqlDataAdapter(); //адаптер
- DataTable table = new DataTable(); //виртуальная таблица
- buttonBack.Visible = false; //скрытие кнопки назад
- SqlCommand command = new SqlCommand("select * from Услуги", cn); //запрос
- da.SelectCommand = command; //комманда
- da.Fill(table); //заполнение
- Program.Role.table = table; //присваивание глобальной таблице
- for (int i = 0; i < table.Rows.Count; i++) comboBox1.Items.Add((table.Rows[i]["Длительность_мин"]).ToString() + " минут");
- object[] mas = comboBox1.Items.OfType<String>().Distinct().ToArray();
- comboBox1.Items.Clear();
- comboBox1.Items.Add("Все элементы");
- comboBox1.Items.AddRange(mas);
- //подсчёт страниц
- if (table.Rows.Count % 4 == 0) strLab.Text = "/ " + (table.Rows.Count / 4).ToString();
- else strLab.Text = "/ " + (table.Rows.Count / 4 + 1).ToString();
- Fill();
- }
- public void Fill() //метод заполнения
- {
- DataTable table = new DataTable(); //создание виртуальной таблицы
- table = Program.Role.table; //присваивание глобальной
- int q = 0;
- LB = new Label[] { label1, label2, label3, label4 }; //в массиве 4 лейбла, 4 текстовых элемента для записей на 1 странице
- PB = new PictureBox[] { pic1, pic2, pic3, pic4 }; //в массиве 4 картинки для 4 записей на странице
- TB = new TableLayoutPanel[] { tLP1, tLP2, tLP3, tLP4 }; //в массиве 4 панели (контейнера) для 4 записей на странице
- redBtn = new Button[] { button1, button2, button3, button4 }; //кнопки редактировать
- delBtn = new Button[] { button5, button6, button7, button8 }; //кнопки удалить
- int n = 4; //по умолчанию количество записей на странице равно 4
- pic1.Visible = true; //картинка видна у первой записи
- //видимость навигации
- strLab.Visible = true;
- strNum.Visible = true;
- for (int i = 0; i < n; i++)
- {
- if (strNum.Text == strLab.Text.Substring(2)) //если страница последняя
- {
- buttonNext.Visible = false; //скрытие кнопки вперёд
- if (strNum.Text.Equals("1")) buttonBack.Visible = false; //если первая страница скрытие кнопки назад (первая и последняя одна страница)
- else buttonBack.Visible = true; //если не первая, кнопка назад с последней страницы видна
- if (table.Rows.Count % 4 != 0) //если на последней страницы не ровно 4 записи
- {
- if ((table.Rows.Count % 4 <= 3) && (q == 0)) //если остаётся 3 записи
- {
- tLP4.Visible = false;
- n--;
- }
- if ((table.Rows.Count % 4 <= 2) && (q == 0)) //если остаётся 2 записи
- {
- tLP3.Visible = false;
- n--;
- }
- if ((table.Rows.Count % 4 <= 1) && (q == 0)) //если осталась 1 запис,
- {
- tLP2.Visible = false;
- n--;
- }
- q++;
- }
- }
- else //если не последняя строка
- {
- if (strNum.Text.Equals("1")) buttonBack.Visible = false; //если первая страница скрытие кнопки назад
- else buttonBack.Visible = true; //если не первая, кнопка назад видна
- for (int j = 0; j < 4; j++) TB[j].Visible = true; //видны все 4 записи на странице
- if (strLab.Text.Equals("/ 1")) buttonNext.Visible = false; //если всего 1 страница скрытие кнопки назад
- else buttonNext.Visible = true; //если не одна, кнопка назад видна
- }
- if (table.Rows.Count != 0) //если количество строк не равно 0
- {
- //заполнение данные из бд
- LB[i].Text = table.Rows[Program.Role.id]["Наименование"].ToString() + "\n\n"; //первая строка в каждой записи наименование услуги
- //расчсёт скидки если она есть
- if (table.Rows[Program.Role.id]["Скидка"].ToString() != "")
- {
- LB[i].Text += table.Rows[Program.Role.id]["Стоимость_руб"].ToString();
- LB[i].Text += " " + (Convert.ToInt32(table.Rows[Program.Role.id]["Стоимость_руб"]) - (Convert.ToInt32(table.Rows[Program.Role.id]["Стоимость_руб"]) * (Convert.ToDouble(table.Rows[Program.Role.id]["Скидка"])))).ToString();
- TB[i].BackColor = Color.LightGray;
- }
- //продолжение запроса если её нет
- else
- {
- LB[i].Text += table.Rows[Program.Role.id]["Стоимость_руб"].ToString();
- TB[i].BackColor = Color.White;
- }
- //продолжение запроса (рубли за конкретное время)
- LB[i].Text += " рублей за " +
- table.Rows[Program.Role.id]["Длительность_мин"].ToString() + " минут \n";
- //указание скидки в процентах
- if (table.Rows[Program.Role.id]["Скидка"].ToString() != "")
- LB[i].Text += "* скидка " + (Convert.ToDouble(table.Rows[Program.Role.id]["Скидка"]) * 100) + "%";
- string img = table.Rows[Program.Role.id]["Изображение"].ToString().Trim();
- //поставить картинку для каждой записи
- if ((img == "") || (img == "отсутствует")) { } //если картинки нет
- else PB[i].Image = new Bitmap(img); //если картинка есть
- Program.Role.id++;
- }
- else
- {
- for (int j = 1; j < 4; j++) TB[j].Visible = false; //скрытие со 2 по 4 записи
- pic1.Visible = false; //скрытие первой картинки
- label1.Text = "По вашему запросу ничего не найдено"; //изменение строки на отсутствие результата
- //скрытие кнопок
- buttonBack.Visible = false;
- buttonNext.Visible = false;
- //скрытие навигации внизу
- strLab.Visible = false;
- strNum.Visible = false;
- TB[0].BackColor = Color.White; //цвет первой записи всегда белый
- break;
- }
- }
- }
- private void buttonNextAndBackGrid_Click(object sender, EventArgs e) //метод для кнопок вперёд и назад
- {
- DataTable table = new DataTable();
- string name = (sender as Button).Name; //строковая переменная для названия кнопок
- table = Program.Role.table;
- if (name == "buttonBack") //если нажата кнопка назад
- {
- if (strNum.Text == strLab.Text.Substring(2)) //если страница последняя
- {
- if (table.Rows.Count % 4 == 0) Program.Role.id -= 8; // 4 из 4 записей
- if (table.Rows.Count % 4 == 1) Program.Role.id -= 5; // 1 из 4 записей
- if (table.Rows.Count % 4 == 2) Program.Role.id -= 6; // 2 из 4 записей
- if (table.Rows.Count % 4 == 3) Program.Role.id -= 7; // 3 из 4 записей
- }
- else Program.Role.id -= 8; //если не последняя
- for (int j = 0; j < 4; j++) TB[j].Visible = true; //видны все 4 записи на странице
- strNum.Text = (Convert.ToInt32(strNum.Text) - 1).ToString(); //текущая страница уменьшается на 1
- }
- else strNum.Text = (Convert.ToInt32(strNum.Text) + 1).ToString(); //текущая страница увеличивается на 1 если нажата кнопка вперёд
- Fill();
- }
- private void strNum_KeyDown(object sender, KeyEventArgs e) //вывод по введённой странице
- {
- if (e.KeyCode == Keys.Enter) //по кнопке enter
- {
- if ((Convert.ToInt32(strNum.Text) > 0) && (Convert.ToInt32(strNum.Text) <= Convert.ToInt32(strLab.Text.Substring(2)))) //если номер страницы входит в диапозон
- {
- if (Convert.ToInt32(strNum.Text) >= 4) //если страница не первая
- {
- buttonBack.Visible = true; //видна кнопка вперёд
- }
- Program.Role.id = (Convert.ToInt32(strNum.Text) - 1) * 4; //поиск id по странице
- }
- else //если не входит в диапозон
- {
- //переход на первую страницу
- strNum.Text = "1";
- Program.Role.id = 0;
- MessageBox.Show("Введите число в диапозоне от 1 до " + strLab.Text.Substring(2), "Внимание", MessageBoxButtons.OK, MessageBoxIcon.Warning);
- }
- Fill();
- }
- }
- private void Sorts_SelectedIndexChanged(object sender, EventArgs e) //сортировка
- {
- DataTable table = new DataTable();
- switch (Sorts.Text) //поиск по полю в combobox
- {
- case "Цена +":
- Program.Role.table.DefaultView.Sort = " Стоимость_руб ASC"; //сортировка таблице
- break;
- case "Цена -":
- Program.Role.table.DefaultView.Sort = " Стоимость_руб DESC";
- break;
- case "Наименование +":
- Program.Role.table.DefaultView.Sort = "Наименование ASC";
- break;
- case "Наименование -":
- Program.Role.table.DefaultView.Sort = "Наименование DESC";
- break;
- case "Длительность +":
- Program.Role.table.DefaultView.Sort = "Длительность_мин ASC";
- break;
- case "Длительность -":
- Program.Role.table.DefaultView.Sort = "Длительность_мин DESC";
- break;
- }
- //переход на первую страницу
- strNum.Text = "1";
- Program.Role.id = 0;
- Program.Role.table = Program.Role.table.DefaultView.ToTable(true); //применение сортировки
- Fill();
- }
- private void Каталог_FormClosing(object sender, FormClosingEventArgs e) //закрытие формы
- {
- Program.mainf = null;
- }
- private void textBox1_TextChanged(object sender, EventArgs e) //метод поиска
- {
- try
- {
- SqlConnection dbConnection;
- Program.conn(out dbConnection);
- SqlDataAdapter da = new SqlDataAdapter();
- DataTable table = new DataTable();
- string strok = textBox1.Text;
- strNum.Text = "1";
- string SqlText;
- SqlText = "select * from Услуги"; //запрос
- if ((textBox1.Text != "") && (textBox1.Text != "Поиск")) SqlText = SqlText + " where (Наименование Like \'%" + strok + "%\' or Стоимость_руб like \'%" + strok +
- "%\' or Длительность_мин like \'%" + strok + "%\')"; //если поле поиска не пустое
- SqlCommand command = new SqlCommand(SqlText, dbConnection);
- da.SelectCommand = command;
- da.Fill(table);
- Program.Role.table = table;
- Program.Role.id = 0;
- if (table.Rows.Count % 4 == 0) strLab.Text = "/ " + (table.Rows.Count / 4).ToString();
- else strLab.Text = "/ " + (table.Rows.Count / 4 + 1).ToString();
- Fill();
- }
- catch //оповещение об ошибке
- {
- MessageBox.Show("Избегайте символа ' ", "Внимание", MessageBoxButtons.OK, MessageBoxIcon.Warning);
- textBox1.Text = "";
- }
- }
- private void textBox1_Enter(object sender, EventArgs e)
- {
- textBox1.Text = "";
- }
- private void textBox1_Leave(object sender, EventArgs e)
- {
- if (textBox1.Text == "") textBox1.Text = "Поиск";
- }
- private void comboBox1_SelectedIndexChanged(object sender, EventArgs e)
- {
- SqlConnection dbConnection;
- Program.conn(out dbConnection);
- SqlDataAdapter da = new SqlDataAdapter();
- DataTable table = new DataTable();
- string strok = textBox1.Text;
- strNum.Text = "1";
- string SqlText = "select * from Услуги";
- if (comboBox1.Text == "Все элементы") { }
- else SqlText += " where Длительность_мин = \'" + comboBox1.Text.Substring(0, 3) + "\'"; //если поле поиска не пустое
- SqlCommand command = new SqlCommand(SqlText, dbConnection);
- da.SelectCommand = command;
- da.Fill(table);
- Program.Role.table = table;
- Program.Role.id = 0;
- if (table.Rows.Count % 4 == 0) strLab.Text = "/ " + (table.Rows.Count / 4).ToString();
- else strLab.Text = "/ " + (table.Rows.Count / 4 + 1).ToString();
- Fill();
- }
- private void btn_add_Click(object sender, EventArgs e)
- {
- SqlConnection dbConnection;
- Program.conn(out dbConnection);
- Добавление f = new Добавление();
- if (f.ShowDialog() == DialogResult.OK)
- {
- SqlCommand cmd = new SqlCommand("Insert Into Услуги (Наименование, Длительность_мин, Стоимость_руб, Скидка, Изображение)"
- + "Values (@Naim, @Dlitel, @Stoim, @Skidka, @Izobr)", dbConnection);
- cmd.Parameters.Add("@Naim", SqlDbType.VarChar).Value = f.tb_naim.Text;
- cmd.Parameters.Add("@Dlitel", SqlDbType.VarChar).Value = f.tb_dlitel.Text;
- cmd.Parameters.Add("@Stoim", SqlDbType.VarChar).Value = f.tb_stoim.Text;
- cmd.Parameters.Add("@Skidka", SqlDbType.Float).Value = f.tb_skidka.Text;
- cmd.Parameters.Add("@Izobr", SqlDbType.VarChar).Value = f.tb_izobr.Text;
- if (cmd.ExecuteNonQuery() == 1)
- {
- MessageBox.Show("Запись добавлена");
- Fill();
- textBox1_TextChanged(sender, e);
- foreach (Control c in this.Controls)
- {
- if (c.GetType() == typeof(TextBox))
- c.Text = String.Empty;
- }
- }
- else
- MessageBox.Show("Ошибка добавления");
- }
- }
- private void button1_Click(object sender, EventArgs e)
- {
- Редактировать f = new Редактировать();
- string name = (sender as Button).Name;
- if(name == "button1")
- {
- f.tb_naim.Text = Program.Role.table.Rows[Program.Role.id - 4]["Наименование"].ToString();
- f.tb_dlitel.Text = Program.Role.table.Rows[Program.Role.id - 4]["Длительность_мин"].ToString();
- f.tb_stoim.Text = Program.Role.table.Rows[Program.Role.id - 4]["Стоимость_руб"].ToString();
- f.tb_skidka.Text = Program.Role.table.Rows[Program.Role.id - 4]["Скидка"].ToString();
- }
- if (name == "button2")
- {
- f.tb_naim.Text = Program.Role.table.Rows[Program.Role.id - 3]["Наименование"].ToString();
- f.tb_dlitel.Text = Program.Role.table.Rows[Program.Role.id - 3]["Длительность_мин"].ToString();
- f.tb_stoim.Text = Program.Role.table.Rows[Program.Role.id - 3]["Стоимость_руб"].ToString();
- f.tb_skidka.Text = Program.Role.table.Rows[Program.Role.id-3]["Скидка"].ToString();
- }
- if (name == "button3")
- {
- f.tb_naim.Text = Program.Role.table.Rows[Program.Role.id - 2]["Наименование"].ToString();
- f.tb_dlitel.Text = Program.Role.table.Rows[Program.Role.id - 2]["Длительность_мин"].ToString();
- f.tb_stoim.Text = Program.Role.table.Rows[Program.Role.id - 2]["Стоимость_руб"].ToString();
- f.tb_skidka.Text = Program.Role.table.Rows[Program.Role.id-2]["Скидка"].ToString();
- }
- if (name == "button4")
- {
- f.tb_naim.Text = Program.Role.table.Rows[Program.Role.id-1]["Наименование"].ToString();
- f.tb_dlitel.Text = Program.Role.table.Rows[Program.Role.id-1]["Длительность_мин"].ToString();
- f.tb_stoim.Text = Program.Role.table.Rows[Program.Role.id-1]["Стоимость_руб"].ToString();
- f.tb_skidka.Text = Program.Role.table.Rows[Program.Role.id-1]["Скидка"].ToString();
- }
- if (f.ShowDialog() == DialogResult.OK)
- {
- SqlConnection dbConnection;
- Program.conn(out dbConnection);
- SqlCommand cmd = new SqlCommand("Update Услуги Set Наименование = @Naim, Длительность_мин = @Dlitel, Стоимость_руб = @Stoim, Скидка = @Skidka WHERE Наименование =\'" + f.tb_naim.Text + "\'", dbConnection);
- cmd.Parameters.Add("@Naim", SqlDbType.VarChar).Value = f.tb_naim.Text;
- cmd.Parameters.Add("@Dlitel", SqlDbType.VarChar).Value = f.tb_dlitel.Text;
- cmd.Parameters.Add("@Stoim", SqlDbType.VarChar).Value = f.tb_stoim.Text;
- cmd.Parameters.Add("@Skidka", SqlDbType.Float).Value = f.tb_skidka.Text;
- if (cmd.ExecuteNonQuery() == 1)
- {
- MessageBox.Show("Запись изменена");
- Fill();
- }
- else
- MessageBox.Show("Ошибка добавления");
- }
- }
- private void button10_Click(object sender, EventArgs e)
- {
- this.Close();
- Program.mainf = new Авторизация();
- }
- private void button5_Click(object sender, EventArgs e)
- {
- int index, n;
- string Name = "";
- string name = (sender as Button).Name;
- SqlConnection dbConnection;
- Program.conn(out dbConnection);
- SqlDataAdapter adapter = new SqlDataAdapter();
- if (name == "button5")
- {
- Name = Program.Role.table.Rows[Program.Role.id - 4]["Наименование"].ToString();
- }
- if (name == "button6")
- {
- Name = Program.Role.table.Rows[Program.Role.id - 3]["Наименование"].ToString();
- }
- if (name == "button7")
- {
- Name = Program.Role.table.Rows[Program.Role.id - 2]["Наименование"].ToString();
- }
- if (name == "button8")
- {
- Name = Program.Role.table.Rows[Program.Role.id - 1]["Наименование"].ToString();
- }
- ;
- if (MessageBox.Show("Вы действительно хотите удалить " + Name +"?" , "Внимание", MessageBoxButtons.OKCancel, MessageBoxIcon.Question) == DialogResult.OK)
- {
- SqlCommand cmd = new SqlCommand("Delete From Услуги Where Наименование = @NomVr", dbConnection);
- cmd.Parameters.Add("@NomVr", SqlDbType.VarChar).Value = Name;
- if (cmd.ExecuteNonQuery() == 1)
- {
- MessageBox.Show("Запись удалена");
- Fill();
- }
- else
- {
- MessageBox.Show("Ошибка");
- return;
- }
- }
- }
- }
- }
|