Каталог.cs 23 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448
  1. using System;
  2. using System.Collections.Generic;
  3. using System.ComponentModel;
  4. using System.Data;
  5. using System.Data.SqlClient;
  6. using System.Drawing;
  7. using System.Linq;
  8. using System.Text;
  9. using System.Threading.Tasks;
  10. using System.Windows.Forms;
  11. namespace Демо
  12. {
  13. public partial class Каталог : Form
  14. {
  15. Label[] LB; //объявление массива лейблов
  16. PictureBox[] PB; //объявление массива картинок
  17. TableLayoutPanel[] TB; //объявление массива панелей (4 панели для каждой записи)
  18. Button[] delBtn;
  19. Button[] redBtn;
  20. public Каталог()
  21. {
  22. InitializeComponent();
  23. SqlConnection cn; //объявление подключения
  24. Program.conn(out cn); //функция подключения из Program.cs
  25. Program.Role.id = 0;
  26. SqlDataAdapter da = new SqlDataAdapter(); //адаптер
  27. DataTable table = new DataTable(); //виртуальная таблица
  28. buttonBack.Visible = false; //скрытие кнопки назад
  29. SqlCommand command = new SqlCommand("select * from Услуги", cn); //запрос
  30. da.SelectCommand = command; //комманда
  31. da.Fill(table); //заполнение
  32. Program.Role.table = table; //присваивание глобальной таблице
  33. for (int i = 0; i < table.Rows.Count; i++) comboBox1.Items.Add((table.Rows[i]["Длительность_мин"]).ToString() + " минут");
  34. object[] mas = comboBox1.Items.OfType<String>().Distinct().ToArray();
  35. comboBox1.Items.Clear();
  36. comboBox1.Items.Add("Все элементы");
  37. comboBox1.Items.AddRange(mas);
  38. //подсчёт страниц
  39. if (table.Rows.Count % 4 == 0) strLab.Text = "/ " + (table.Rows.Count / 4).ToString();
  40. else strLab.Text = "/ " + (table.Rows.Count / 4 + 1).ToString();
  41. Fill();
  42. }
  43. public void Fill() //метод заполнения
  44. {
  45. DataTable table = new DataTable(); //создание виртуальной таблицы
  46. table = Program.Role.table; //присваивание глобальной
  47. int q = 0;
  48. LB = new Label[] { label1, label2, label3, label4 }; //в массиве 4 лейбла, 4 текстовых элемента для записей на 1 странице
  49. PB = new PictureBox[] { pic1, pic2, pic3, pic4 }; //в массиве 4 картинки для 4 записей на странице
  50. TB = new TableLayoutPanel[] { tLP1, tLP2, tLP3, tLP4 }; //в массиве 4 панели (контейнера) для 4 записей на странице
  51. redBtn = new Button[] { button1, button2, button3, button4 }; //кнопки редактировать
  52. delBtn = new Button[] { button5, button6, button7, button8 }; //кнопки удалить
  53. int n = 4; //по умолчанию количество записей на странице равно 4
  54. pic1.Visible = true; //картинка видна у первой записи
  55. //видимость навигации
  56. strLab.Visible = true;
  57. strNum.Visible = true;
  58. for (int i = 0; i < n; i++)
  59. {
  60. if (strNum.Text == strLab.Text.Substring(2)) //если страница последняя
  61. {
  62. buttonNext.Visible = false; //скрытие кнопки вперёд
  63. if (strNum.Text.Equals("1")) buttonBack.Visible = false; //если первая страница скрытие кнопки назад (первая и последняя одна страница)
  64. else buttonBack.Visible = true; //если не первая, кнопка назад с последней страницы видна
  65. if (table.Rows.Count % 4 != 0) //если на последней страницы не ровно 4 записи
  66. {
  67. if ((table.Rows.Count % 4 <= 3) && (q == 0)) //если остаётся 3 записи
  68. {
  69. tLP4.Visible = false;
  70. n--;
  71. }
  72. if ((table.Rows.Count % 4 <= 2) && (q == 0)) //если остаётся 2 записи
  73. {
  74. tLP3.Visible = false;
  75. n--;
  76. }
  77. if ((table.Rows.Count % 4 <= 1) && (q == 0)) //если осталась 1 запис,
  78. {
  79. tLP2.Visible = false;
  80. n--;
  81. }
  82. q++;
  83. }
  84. }
  85. else //если не последняя строка
  86. {
  87. if (strNum.Text.Equals("1")) buttonBack.Visible = false; //если первая страница скрытие кнопки назад
  88. else buttonBack.Visible = true; //если не первая, кнопка назад видна
  89. for (int j = 0; j < 4; j++) TB[j].Visible = true; //видны все 4 записи на странице
  90. if (strLab.Text.Equals("/ 1")) buttonNext.Visible = false; //если всего 1 страница скрытие кнопки назад
  91. else buttonNext.Visible = true; //если не одна, кнопка назад видна
  92. }
  93. if (table.Rows.Count != 0) //если количество строк не равно 0
  94. {
  95. //заполнение данные из бд
  96. LB[i].Text = table.Rows[Program.Role.id]["Наименование"].ToString() + "\n\n"; //первая строка в каждой записи наименование услуги
  97. //расчсёт скидки если она есть
  98. if (table.Rows[Program.Role.id]["Скидка"].ToString() != "")
  99. {
  100. LB[i].Text += table.Rows[Program.Role.id]["Стоимость_руб"].ToString();
  101. 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();
  102. TB[i].BackColor = Color.LightGray;
  103. }
  104. //продолжение запроса если её нет
  105. else
  106. {
  107. LB[i].Text += table.Rows[Program.Role.id]["Стоимость_руб"].ToString();
  108. TB[i].BackColor = Color.White;
  109. }
  110. //продолжение запроса (рубли за конкретное время)
  111. LB[i].Text += " рублей за " +
  112. table.Rows[Program.Role.id]["Длительность_мин"].ToString() + " минут \n";
  113. //указание скидки в процентах
  114. if (table.Rows[Program.Role.id]["Скидка"].ToString() != "")
  115. LB[i].Text += "* скидка " + (Convert.ToDouble(table.Rows[Program.Role.id]["Скидка"]) * 100) + "%";
  116. string img = table.Rows[Program.Role.id]["Изображение"].ToString().Trim();
  117. //поставить картинку для каждой записи
  118. if ((img == "") || (img == "отсутствует")) { } //если картинки нет
  119. else PB[i].Image = new Bitmap(img); //если картинка есть
  120. Program.Role.id++;
  121. }
  122. else
  123. {
  124. for (int j = 1; j < 4; j++) TB[j].Visible = false; //скрытие со 2 по 4 записи
  125. pic1.Visible = false; //скрытие первой картинки
  126. label1.Text = "По вашему запросу ничего не найдено"; //изменение строки на отсутствие результата
  127. //скрытие кнопок
  128. buttonBack.Visible = false;
  129. buttonNext.Visible = false;
  130. //скрытие навигации внизу
  131. strLab.Visible = false;
  132. strNum.Visible = false;
  133. TB[0].BackColor = Color.White; //цвет первой записи всегда белый
  134. break;
  135. }
  136. }
  137. }
  138. private void buttonNextAndBackGrid_Click(object sender, EventArgs e) //метод для кнопок вперёд и назад
  139. {
  140. DataTable table = new DataTable();
  141. string name = (sender as Button).Name; //строковая переменная для названия кнопок
  142. table = Program.Role.table;
  143. if (name == "buttonBack") //если нажата кнопка назад
  144. {
  145. if (strNum.Text == strLab.Text.Substring(2)) //если страница последняя
  146. {
  147. if (table.Rows.Count % 4 == 0) Program.Role.id -= 8; // 4 из 4 записей
  148. if (table.Rows.Count % 4 == 1) Program.Role.id -= 5; // 1 из 4 записей
  149. if (table.Rows.Count % 4 == 2) Program.Role.id -= 6; // 2 из 4 записей
  150. if (table.Rows.Count % 4 == 3) Program.Role.id -= 7; // 3 из 4 записей
  151. }
  152. else Program.Role.id -= 8; //если не последняя
  153. for (int j = 0; j < 4; j++) TB[j].Visible = true; //видны все 4 записи на странице
  154. strNum.Text = (Convert.ToInt32(strNum.Text) - 1).ToString(); //текущая страница уменьшается на 1
  155. }
  156. else strNum.Text = (Convert.ToInt32(strNum.Text) + 1).ToString(); //текущая страница увеличивается на 1 если нажата кнопка вперёд
  157. Fill();
  158. }
  159. private void strNum_KeyDown(object sender, KeyEventArgs e) //вывод по введённой странице
  160. {
  161. if (e.KeyCode == Keys.Enter) //по кнопке enter
  162. {
  163. if ((Convert.ToInt32(strNum.Text) > 0) && (Convert.ToInt32(strNum.Text) <= Convert.ToInt32(strLab.Text.Substring(2)))) //если номер страницы входит в диапозон
  164. {
  165. if (Convert.ToInt32(strNum.Text) >= 4) //если страница не первая
  166. {
  167. buttonBack.Visible = true; //видна кнопка вперёд
  168. }
  169. Program.Role.id = (Convert.ToInt32(strNum.Text) - 1) * 4; //поиск id по странице
  170. }
  171. else //если не входит в диапозон
  172. {
  173. //переход на первую страницу
  174. strNum.Text = "1";
  175. Program.Role.id = 0;
  176. MessageBox.Show("Введите число в диапозоне от 1 до " + strLab.Text.Substring(2), "Внимание", MessageBoxButtons.OK, MessageBoxIcon.Warning);
  177. }
  178. Fill();
  179. }
  180. }
  181. private void Sorts_SelectedIndexChanged(object sender, EventArgs e) //сортировка
  182. {
  183. DataTable table = new DataTable();
  184. switch (Sorts.Text) //поиск по полю в combobox
  185. {
  186. case "Цена +":
  187. Program.Role.table.DefaultView.Sort = " Стоимость_руб ASC"; //сортировка таблице
  188. break;
  189. case "Цена -":
  190. Program.Role.table.DefaultView.Sort = " Стоимость_руб DESC";
  191. break;
  192. case "Наименование +":
  193. Program.Role.table.DefaultView.Sort = "Наименование ASC";
  194. break;
  195. case "Наименование -":
  196. Program.Role.table.DefaultView.Sort = "Наименование DESC";
  197. break;
  198. case "Длительность +":
  199. Program.Role.table.DefaultView.Sort = "Длительность_мин ASC";
  200. break;
  201. case "Длительность -":
  202. Program.Role.table.DefaultView.Sort = "Длительность_мин DESC";
  203. break;
  204. }
  205. //переход на первую страницу
  206. strNum.Text = "1";
  207. Program.Role.id = 0;
  208. Program.Role.table = Program.Role.table.DefaultView.ToTable(true); //применение сортировки
  209. Fill();
  210. }
  211. private void Каталог_FormClosing(object sender, FormClosingEventArgs e) //закрытие формы
  212. {
  213. Program.mainf = null;
  214. }
  215. private void textBox1_TextChanged(object sender, EventArgs e) //метод поиска
  216. {
  217. try
  218. {
  219. SqlConnection dbConnection;
  220. Program.conn(out dbConnection);
  221. SqlDataAdapter da = new SqlDataAdapter();
  222. DataTable table = new DataTable();
  223. string strok = textBox1.Text;
  224. strNum.Text = "1";
  225. string SqlText;
  226. SqlText = "select * from Услуги"; //запрос
  227. if ((textBox1.Text != "") && (textBox1.Text != "Поиск")) SqlText = SqlText + " where (Наименование Like \'%" + strok + "%\' or Стоимость_руб like \'%" + strok +
  228. "%\' or Длительность_мин like \'%" + strok + "%\')"; //если поле поиска не пустое
  229. SqlCommand command = new SqlCommand(SqlText, dbConnection);
  230. da.SelectCommand = command;
  231. da.Fill(table);
  232. Program.Role.table = table;
  233. Program.Role.id = 0;
  234. if (table.Rows.Count % 4 == 0) strLab.Text = "/ " + (table.Rows.Count / 4).ToString();
  235. else strLab.Text = "/ " + (table.Rows.Count / 4 + 1).ToString();
  236. Fill();
  237. }
  238. catch //оповещение об ошибке
  239. {
  240. MessageBox.Show("Избегайте символа ' ", "Внимание", MessageBoxButtons.OK, MessageBoxIcon.Warning);
  241. textBox1.Text = "";
  242. }
  243. }
  244. private void textBox1_Enter(object sender, EventArgs e)
  245. {
  246. textBox1.Text = "";
  247. }
  248. private void textBox1_Leave(object sender, EventArgs e)
  249. {
  250. if (textBox1.Text == "") textBox1.Text = "Поиск";
  251. }
  252. private void comboBox1_SelectedIndexChanged(object sender, EventArgs e)
  253. {
  254. SqlConnection dbConnection;
  255. Program.conn(out dbConnection);
  256. SqlDataAdapter da = new SqlDataAdapter();
  257. DataTable table = new DataTable();
  258. string strok = textBox1.Text;
  259. strNum.Text = "1";
  260. string SqlText = "select * from Услуги";
  261. if (comboBox1.Text == "Все элементы") { }
  262. else SqlText += " where Длительность_мин = \'" + comboBox1.Text.Substring(0, 3) + "\'"; //если поле поиска не пустое
  263. SqlCommand command = new SqlCommand(SqlText, dbConnection);
  264. da.SelectCommand = command;
  265. da.Fill(table);
  266. Program.Role.table = table;
  267. Program.Role.id = 0;
  268. if (table.Rows.Count % 4 == 0) strLab.Text = "/ " + (table.Rows.Count / 4).ToString();
  269. else strLab.Text = "/ " + (table.Rows.Count / 4 + 1).ToString();
  270. Fill();
  271. }
  272. private void btn_add_Click(object sender, EventArgs e)
  273. {
  274. SqlConnection dbConnection;
  275. Program.conn(out dbConnection);
  276. Добавление f = new Добавление();
  277. if (f.ShowDialog() == DialogResult.OK)
  278. {
  279. SqlCommand cmd = new SqlCommand("Insert Into Услуги (Наименование, Длительность_мин, Стоимость_руб, Скидка, Изображение)"
  280. + "Values (@Naim, @Dlitel, @Stoim, @Skidka, @Izobr)", dbConnection);
  281. cmd.Parameters.Add("@Naim", SqlDbType.VarChar).Value = f.tb_naim.Text;
  282. cmd.Parameters.Add("@Dlitel", SqlDbType.VarChar).Value = f.tb_dlitel.Text;
  283. cmd.Parameters.Add("@Stoim", SqlDbType.VarChar).Value = f.tb_stoim.Text;
  284. cmd.Parameters.Add("@Skidka", SqlDbType.Float).Value = f.tb_skidka.Text;
  285. cmd.Parameters.Add("@Izobr", SqlDbType.VarChar).Value = f.tb_izobr.Text;
  286. if (cmd.ExecuteNonQuery() == 1)
  287. {
  288. MessageBox.Show("Запись добавлена");
  289. Fill();
  290. textBox1_TextChanged(sender, e);
  291. foreach (Control c in this.Controls)
  292. {
  293. if (c.GetType() == typeof(TextBox))
  294. c.Text = String.Empty;
  295. }
  296. }
  297. else
  298. MessageBox.Show("Ошибка добавления");
  299. }
  300. }
  301. private void button1_Click(object sender, EventArgs e)
  302. {
  303. Редактировать f = new Редактировать();
  304. string name = (sender as Button).Name;
  305. if(name == "button1")
  306. {
  307. f.tb_naim.Text = Program.Role.table.Rows[Program.Role.id - 4]["Наименование"].ToString();
  308. f.tb_dlitel.Text = Program.Role.table.Rows[Program.Role.id - 4]["Длительность_мин"].ToString();
  309. f.tb_stoim.Text = Program.Role.table.Rows[Program.Role.id - 4]["Стоимость_руб"].ToString();
  310. f.tb_skidka.Text = Program.Role.table.Rows[Program.Role.id - 4]["Скидка"].ToString();
  311. }
  312. if (name == "button2")
  313. {
  314. f.tb_naim.Text = Program.Role.table.Rows[Program.Role.id - 3]["Наименование"].ToString();
  315. f.tb_dlitel.Text = Program.Role.table.Rows[Program.Role.id - 3]["Длительность_мин"].ToString();
  316. f.tb_stoim.Text = Program.Role.table.Rows[Program.Role.id - 3]["Стоимость_руб"].ToString();
  317. f.tb_skidka.Text = Program.Role.table.Rows[Program.Role.id-3]["Скидка"].ToString();
  318. }
  319. if (name == "button3")
  320. {
  321. f.tb_naim.Text = Program.Role.table.Rows[Program.Role.id - 2]["Наименование"].ToString();
  322. f.tb_dlitel.Text = Program.Role.table.Rows[Program.Role.id - 2]["Длительность_мин"].ToString();
  323. f.tb_stoim.Text = Program.Role.table.Rows[Program.Role.id - 2]["Стоимость_руб"].ToString();
  324. f.tb_skidka.Text = Program.Role.table.Rows[Program.Role.id-2]["Скидка"].ToString();
  325. }
  326. if (name == "button4")
  327. {
  328. f.tb_naim.Text = Program.Role.table.Rows[Program.Role.id-1]["Наименование"].ToString();
  329. f.tb_dlitel.Text = Program.Role.table.Rows[Program.Role.id-1]["Длительность_мин"].ToString();
  330. f.tb_stoim.Text = Program.Role.table.Rows[Program.Role.id-1]["Стоимость_руб"].ToString();
  331. f.tb_skidka.Text = Program.Role.table.Rows[Program.Role.id-1]["Скидка"].ToString();
  332. }
  333. if (f.ShowDialog() == DialogResult.OK)
  334. {
  335. SqlConnection dbConnection;
  336. Program.conn(out dbConnection);
  337. SqlCommand cmd = new SqlCommand("Update Услуги Set Наименование = @Naim, Длительность_мин = @Dlitel, Стоимость_руб = @Stoim, Скидка = @Skidka WHERE Наименование =\'" + f.tb_naim.Text + "\'", dbConnection);
  338. cmd.Parameters.Add("@Naim", SqlDbType.VarChar).Value = f.tb_naim.Text;
  339. cmd.Parameters.Add("@Dlitel", SqlDbType.VarChar).Value = f.tb_dlitel.Text;
  340. cmd.Parameters.Add("@Stoim", SqlDbType.VarChar).Value = f.tb_stoim.Text;
  341. cmd.Parameters.Add("@Skidka", SqlDbType.Float).Value = f.tb_skidka.Text;
  342. if (cmd.ExecuteNonQuery() == 1)
  343. {
  344. MessageBox.Show("Запись изменена");
  345. Fill();
  346. }
  347. else
  348. MessageBox.Show("Ошибка добавления");
  349. }
  350. }
  351. private void button10_Click(object sender, EventArgs e)
  352. {
  353. this.Close();
  354. Program.mainf = new Авторизация();
  355. }
  356. private void button5_Click(object sender, EventArgs e)
  357. {
  358. int index, n;
  359. string Name = "";
  360. string name = (sender as Button).Name;
  361. SqlConnection dbConnection;
  362. Program.conn(out dbConnection);
  363. SqlDataAdapter adapter = new SqlDataAdapter();
  364. if (name == "button5")
  365. {
  366. Name = Program.Role.table.Rows[Program.Role.id - 4]["Наименование"].ToString();
  367. }
  368. if (name == "button6")
  369. {
  370. Name = Program.Role.table.Rows[Program.Role.id - 3]["Наименование"].ToString();
  371. }
  372. if (name == "button7")
  373. {
  374. Name = Program.Role.table.Rows[Program.Role.id - 2]["Наименование"].ToString();
  375. }
  376. if (name == "button8")
  377. {
  378. Name = Program.Role.table.Rows[Program.Role.id - 1]["Наименование"].ToString();
  379. }
  380. ;
  381. if (MessageBox.Show("Вы действительно хотите удалить " + Name +"?" , "Внимание", MessageBoxButtons.OKCancel, MessageBoxIcon.Question) == DialogResult.OK)
  382. {
  383. SqlCommand cmd = new SqlCommand("Delete From Услуги Where Наименование = @NomVr", dbConnection);
  384. cmd.Parameters.Add("@NomVr", SqlDbType.VarChar).Value = Name;
  385. if (cmd.ExecuteNonQuery() == 1)
  386. {
  387. MessageBox.Show("Запись удалена");
  388. Fill();
  389. }
  390. else
  391. {
  392. MessageBox.Show("Ошибка");
  393. return;
  394. }
  395. }
  396. }
  397. }
  398. }