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().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; } } } } }