From 7a2c13872cb2e4ab35bd2ef7b390274421b9667a Mon Sep 17 00:00:00 2001 From: Ilya Date: Thu, 14 May 2026 15:24:29 +0400 Subject: [PATCH] merkylov_isp_41 --- .gitignore | 3 + DUMP_UML_ER/MerkylovISP41_Dump.sql | 333 +++++++++++++++ DUMP_UML_ER/MerkylovISP41_ER.pdf | Bin 0 -> 39050 bytes DUMP_UML_ER/UML.jpg | Bin 0 -> 55557 bytes WinFormsApp1.sln | 25 ++ WinFormsApp1/AddForm.Designer.cs | 370 +++++++++++++++++ WinFormsApp1/AddForm.cs | 198 +++++++++ WinFormsApp1/AddForm.resx | 123 ++++++ WinFormsApp1/AdmMainForm.Designer.cs | 359 ++++++++++++++++ WinFormsApp1/AdmMainForm.cs | 290 +++++++++++++ WinFormsApp1/AdmMainForm.resx | 120 ++++++ WinFormsApp1/AdmOrderForm.Designer.cs | 110 +++++ WinFormsApp1/AdmOrderForm.cs | 32 ++ WinFormsApp1/AdmOrderForm.resx | 120 ++++++ WinFormsApp1/DB.cs | 29 ++ WinFormsApp1/GuestForm.Designer.cs | 251 ++++++++++++ WinFormsApp1/GuestForm.cs | 76 ++++ WinFormsApp1/GuestForm.resx | 120 ++++++ WinFormsApp1/LoginForm.Designer.cs | 129 ++++++ WinFormsApp1/LoginForm.cs | 121 ++++++ WinFormsApp1/LoginForm.resx | 120 ++++++ WinFormsApp1/ManagerMainForm.Designer.cs | 328 +++++++++++++++ WinFormsApp1/ManagerMainForm.cs | 219 ++++++++++ WinFormsApp1/ManagerMainForm.resx | 120 ++++++ WinFormsApp1/ManagerOrder.Designer.cs | 111 +++++ WinFormsApp1/ManagerOrder.cs | 73 ++++ WinFormsApp1/ManagerOrder.resx | 120 ++++++ WinFormsApp1/Program.cs | 17 + WinFormsApp1/Properties/Resources.Designer.cs | 63 +++ WinFormsApp1/Properties/Resources.resx | 120 ++++++ WinFormsApp1/Reduct2.Designer.cs | 386 ++++++++++++++++++ WinFormsApp1/Reduct2.cs | 233 +++++++++++ WinFormsApp1/Reduct2.resx | 120 ++++++ WinFormsApp1/UserForm.Designer.cs | 266 ++++++++++++ WinFormsApp1/UserForm.cs | 84 ++++ WinFormsApp1/UserForm.resx | 120 ++++++ WinFormsApp1/WinFormsApp1.csproj | 30 ++ WinFormsApp1/WinFormsApp1.csproj.user | 32 ++ 38 files changed, 5371 insertions(+) create mode 100644 .gitignore create mode 100644 DUMP_UML_ER/MerkylovISP41_Dump.sql create mode 100644 DUMP_UML_ER/MerkylovISP41_ER.pdf create mode 100644 DUMP_UML_ER/UML.jpg create mode 100644 WinFormsApp1.sln create mode 100644 WinFormsApp1/AddForm.Designer.cs create mode 100644 WinFormsApp1/AddForm.cs create mode 100644 WinFormsApp1/AddForm.resx create mode 100644 WinFormsApp1/AdmMainForm.Designer.cs create mode 100644 WinFormsApp1/AdmMainForm.cs create mode 100644 WinFormsApp1/AdmMainForm.resx create mode 100644 WinFormsApp1/AdmOrderForm.Designer.cs create mode 100644 WinFormsApp1/AdmOrderForm.cs create mode 100644 WinFormsApp1/AdmOrderForm.resx create mode 100644 WinFormsApp1/DB.cs create mode 100644 WinFormsApp1/GuestForm.Designer.cs create mode 100644 WinFormsApp1/GuestForm.cs create mode 100644 WinFormsApp1/GuestForm.resx create mode 100644 WinFormsApp1/LoginForm.Designer.cs create mode 100644 WinFormsApp1/LoginForm.cs create mode 100644 WinFormsApp1/LoginForm.resx create mode 100644 WinFormsApp1/ManagerMainForm.Designer.cs create mode 100644 WinFormsApp1/ManagerMainForm.cs create mode 100644 WinFormsApp1/ManagerMainForm.resx create mode 100644 WinFormsApp1/ManagerOrder.Designer.cs create mode 100644 WinFormsApp1/ManagerOrder.cs create mode 100644 WinFormsApp1/ManagerOrder.resx create mode 100644 WinFormsApp1/Program.cs create mode 100644 WinFormsApp1/Properties/Resources.Designer.cs create mode 100644 WinFormsApp1/Properties/Resources.resx create mode 100644 WinFormsApp1/Reduct2.Designer.cs create mode 100644 WinFormsApp1/Reduct2.cs create mode 100644 WinFormsApp1/Reduct2.resx create mode 100644 WinFormsApp1/UserForm.Designer.cs create mode 100644 WinFormsApp1/UserForm.cs create mode 100644 WinFormsApp1/UserForm.resx create mode 100644 WinFormsApp1/WinFormsApp1.csproj create mode 100644 WinFormsApp1/WinFormsApp1.csproj.user diff --git a/.gitignore b/.gitignore new file mode 100644 index 0000000..a9b29e0 --- /dev/null +++ b/.gitignore @@ -0,0 +1,3 @@ +.vs/ +bin/ +obj/ \ No newline at end of file diff --git a/DUMP_UML_ER/MerkylovISP41_Dump.sql b/DUMP_UML_ER/MerkylovISP41_Dump.sql new file mode 100644 index 0000000..dd2b3e4 --- /dev/null +++ b/DUMP_UML_ER/MerkylovISP41_Dump.sql @@ -0,0 +1,333 @@ +-- MySQL dump 10.13 Distrib 8.0.42, for Win64 (x86_64) +-- +-- Host: 85.239.57.125 Database: Merkylov_Sportmag +-- ------------------------------------------------------ +-- Server version 8.0.45-0ubuntu0.24.04.1 + +/*!40101 SET @OLD_CHARACTER_SET_CLIENT=@@CHARACTER_SET_CLIENT */; +/*!40101 SET @OLD_CHARACTER_SET_RESULTS=@@CHARACTER_SET_RESULTS */; +/*!40101 SET @OLD_COLLATION_CONNECTION=@@COLLATION_CONNECTION */; +/*!50503 SET NAMES utf8 */; +/*!40103 SET @OLD_TIME_ZONE=@@TIME_ZONE */; +/*!40103 SET TIME_ZONE='+00:00' */; +/*!40014 SET @OLD_UNIQUE_CHECKS=@@UNIQUE_CHECKS, UNIQUE_CHECKS=0 */; +/*!40014 SET @OLD_FOREIGN_KEY_CHECKS=@@FOREIGN_KEY_CHECKS, FOREIGN_KEY_CHECKS=0 */; +/*!40101 SET @OLD_SQL_MODE=@@SQL_MODE, SQL_MODE='NO_AUTO_VALUE_ON_ZERO' */; +/*!40111 SET @OLD_SQL_NOTES=@@SQL_NOTES, SQL_NOTES=0 */; + +-- +-- Table structure for table `Category` +-- + +DROP TABLE IF EXISTS `Category`; +/*!40101 SET @saved_cs_client = @@character_set_client */; +/*!50503 SET character_set_client = utf8mb4 */; +CREATE TABLE `Category` ( + `idCategory` int NOT NULL AUTO_INCREMENT, + `CategoryName` varchar(45) NOT NULL, + PRIMARY KEY (`idCategory`) +) ENGINE=InnoDB AUTO_INCREMENT=14 DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_0900_ai_ci; +/*!40101 SET character_set_client = @saved_cs_client */; + +-- +-- Dumping data for table `Category` +-- + +LOCK TABLES `Category` WRITE; +/*!40000 ALTER TABLE `Category` DISABLE KEYS */; +INSERT INTO `Category` VALUES (1,'Единоборства'),(2,'Кардио'),(3,'Лыжный спорт'),(4,'Мячи'),(5,'Обувь'),(6,'Одежда'),(7,'Плавание'),(8,'Силовые'),(9,'Теннис'),(10,'Тренажеры'),(11,'Туризм'),(12,'Фитнес'),(13,'Экипировка'); +/*!40000 ALTER TABLE `Category` ENABLE KEYS */; +UNLOCK TABLES; + +-- +-- Table structure for table `Clients` +-- + +DROP TABLE IF EXISTS `Clients`; +/*!40101 SET @saved_cs_client = @@character_set_client */; +/*!50503 SET character_set_client = utf8mb4 */; +CREATE TABLE `Clients` ( + `idClients` int NOT NULL AUTO_INCREMENT, + `Login` varchar(45) NOT NULL, + `Password` varchar(45) NOT NULL, + `FIO` varchar(45) NOT NULL, + `Email` varchar(45) NOT NULL, + `Phone` bigint NOT NULL, + `Role_id` int NOT NULL, + PRIMARY KEY (`idClients`), + KEY `From clients to role_idx` (`Role_id`), + CONSTRAINT `From clients to role` FOREIGN KEY (`Role_id`) REFERENCES `Role` (`idRole`) +) ENGINE=InnoDB AUTO_INCREMENT=31 DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_0900_ai_ci; +/*!40101 SET character_set_client = @saved_cs_client */; + +-- +-- Dumping data for table `Clients` +-- + +LOCK TABLES `Clients` WRITE; +/*!40000 ALTER TABLE `Clients` DISABLE KEYS */; +INSERT INTO `Clients` VALUES (1,'client_001','hash45678','Сидоров Алексей Михайлович','sidorov@mail.ru',79110001122,1),(2,'client_002','hash56789','Кузнецова Елена Владимировна','kuz_el@ya.ru',89120002233,1),(3,'client_003','hash67890','Попов Дмитрий Николаевич','popov_d@gmail.com',89140004455,1),(4,'client_004','hash78901','Васильева Мария Александровна','vasya_m@mail.ru',79150005566,1),(5,'client_005','hash89012','Соколов Максим Андреевич','sokol_max@ya.ru',79160006677,1),(6,'client_006','hash90123','Михайлова Дарья Юрьевна','mikh_d@gmail.com',89170007788,1),(7,'client_007','hash01234','Федоров Артем Викторович','fedorov_a@mail.ru',89190009900,1),(8,'client_008','hash11234','Морозова Екатерина Олеговна','moroz_e@ya.ru',79200001111,1),(9,'client_009','hash22345','Волков Илья','volkov_i@gmail.com',89210002222,1),(10,'client_010','hash33456','Алексеева Анастасия Денисовна','alekseeva@mail.ru',89220003333,1),(11,'client_011','hash44567','Лебедев Никита Павлович','lebedev_n@ya.ru',792304444,1),(12,'client_012','hash55678','Семенова Ольга Константиновна','semenova_o@gmail.com',79240005555,1),(13,'client_013','hash66789','Егоров Павел','egorov_p@mail.ru',79250006666,1),(14,'client_014','hash77890','Павлова Татьяна Евгеньевна','pavlova_t@ya.ru',89260007777,1),(15,'client_015','hash88901','Козлов Роман Борисович','kozlov_r@gmail.com',79270008888,1),(16,'client_016','hash99012','Степанова Юлия Аркадьевна','stepanova_y@mail.ru',89280009999,1),(17,'client_017','hash00123','Николаев Глеб Степанович','nikolaev_g@ya.ru',792901234,1),(18,'client_018','hash11122','Орлова Виктория','orlova_v@gmail.com',79300002345,1),(19,'client_019','hash22233','Макаров Даниил Антонович','makarov_d@mail.ru',89310003456,1),(20,'client_020','hash33344','Андреева Полина Вячеславовна','andreeva_p@ya.ru',89320004567,1),(21,'client_021','hash44455','Захаров Кирилл Леонидович','zaharov_k@gmail.com',79330005678,1),(22,'client_022','hash55566','Зайцева Алина Федоровна','zaitseva_a@mail.ru',793406789,1),(23,'client_023','hash66677','Соловьев Владислав Игоревич','soloviev_v@ya.ru',89350007890,1),(24,'client_024','hash77788','Борисова Яна Станиславовна','borisova_y@gmail.com',79360008901,1),(25,'client_025','hash88899','Яковлев Арсений Максимович','yakovlev_a@mail.ru',89370009012,1),(26,'client_026','hash99900','Григорьева Вера Руслановна','grigorieva_v@ya.ru',79001112233,1),(27,'client_027','hash00011','Романов Вадим','romanov_v@gmail.com',89002223344,1),(28,'1','1','Проверка имени Админ','1',1,1),(29,'2','2','Проверка имени Авторизованный','2',2,3),(30,'3','3','Проверка имени Менеджер','3',3,2); +/*!40000 ALTER TABLE `Clients` ENABLE KEYS */; +UNLOCK TABLES; + +-- +-- Table structure for table `Manufacturer` +-- + +DROP TABLE IF EXISTS `Manufacturer`; +/*!40101 SET @saved_cs_client = @@character_set_client */; +/*!50503 SET character_set_client = utf8mb4 */; +CREATE TABLE `Manufacturer` ( + `idManufacturer` int NOT NULL AUTO_INCREMENT, + `ManufacturerName` varchar(45) NOT NULL, + PRIMARY KEY (`idManufacturer`) +) ENGINE=InnoDB AUTO_INCREMENT=24 DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_0900_ai_ci; +/*!40101 SET character_set_client = @saved_cs_client */; + +-- +-- Dumping data for table `Manufacturer` +-- + +LOCK TABLES `Manufacturer` WRITE; +/*!40000 ALTER TABLE `Manufacturer` DISABLE KEYS */; +INSERT INTO `Manufacturer` VALUES (1,'Adidas'),(2,'Barbell'),(3,'Demix'),(4,'Deuter'),(5,'Everlast'),(6,'Fischer'),(7,'Head'),(8,'Joss'),(9,'Kettler'),(10,'Mikasa'),(11,'Nike'),(12,'Nordway'),(13,'Outventure'),(14,'Puma'),(15,'Reebok'),(16,'Spalding'),(17,'Speedo'),(18,'Stanley'),(19,'Torneo'),(20,'Under Armour'),(21,'Venum'),(22,'Wilson'),(23,'СпортМастер'); +/*!40000 ALTER TABLE `Manufacturer` ENABLE KEYS */; +UNLOCK TABLES; + +-- +-- Table structure for table `OrderItems` +-- + +DROP TABLE IF EXISTS `OrderItems`; +/*!40101 SET @saved_cs_client = @@character_set_client */; +/*!50503 SET character_set_client = utf8mb4 */; +CREATE TABLE `OrderItems` ( + `idOrderItems` int NOT NULL AUTO_INCREMENT, + `Orders_id` int NOT NULL, + `Products_id` int NOT NULL, + `QuanityInOrder` int NOT NULL, + PRIMARY KEY (`idOrderItems`), + KEY `From orderItem to order_idx` (`Orders_id`), + KEY `from orderItem to products_idx` (`Products_id`), + CONSTRAINT `From orderItem to order` FOREIGN KEY (`Orders_id`) REFERENCES `Orders` (`idOrders`), + CONSTRAINT `from orderItem to products` FOREIGN KEY (`Products_id`) REFERENCES `Products` (`idProducts`) +) ENGINE=InnoDB AUTO_INCREMENT=38 DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_0900_ai_ci; +/*!40101 SET character_set_client = @saved_cs_client */; + +-- +-- Dumping data for table `OrderItems` +-- + +LOCK TABLES `OrderItems` WRITE; +/*!40000 ALTER TABLE `OrderItems` DISABLE KEYS */; +INSERT INTO `OrderItems` VALUES (1,1,1,2),(2,1,11,1),(3,2,8,1),(4,3,14,1),(5,3,18,2),(6,4,4,1),(7,5,20,1),(8,5,21,2),(9,5,23,1),(10,6,2,1),(11,7,6,1),(12,7,7,4),(13,8,24,1),(14,8,25,1),(15,9,27,1),(16,9,28,3),(17,10,10,1),(18,11,15,1),(19,12,19,1),(20,13,13,5),(21,14,12,2),(22,15,3,1),(23,16,22,1),(24,17,17,2),(25,18,29,1),(26,18,30,2),(27,19,1,10),(28,20,16,1),(29,21,26,1),(30,22,9,1),(31,23,5,2),(32,24,6,1),(33,25,11,3),(34,26,12,1),(35,27,24,2),(36,28,29,2),(37,29,20,1); +/*!40000 ALTER TABLE `OrderItems` ENABLE KEYS */; +UNLOCK TABLES; + +-- +-- Table structure for table `Orders` +-- + +DROP TABLE IF EXISTS `Orders`; +/*!40101 SET @saved_cs_client = @@character_set_client */; +/*!50503 SET character_set_client = utf8mb4 */; +CREATE TABLE `Orders` ( + `idOrders` int NOT NULL AUTO_INCREMENT, + `Article` varchar(45) NOT NULL, + `Clients_id` int NOT NULL, + `Status_id` int NOT NULL, + `PickUp_id` int NOT NULL, + `Order_date` date NOT NULL, + `Delivery_date` date DEFAULT NULL, + PRIMARY KEY (`idOrders`), + KEY `From order to clients_idx` (`Clients_id`), + KEY `From order to status_idx` (`Status_id`), + KEY `From order to pickup_idx` (`PickUp_id`), + CONSTRAINT `From order to clients` FOREIGN KEY (`Clients_id`) REFERENCES `Clients` (`idClients`), + CONSTRAINT `From order to pickup` FOREIGN KEY (`PickUp_id`) REFERENCES `PickUp` (`idPickUp`), + CONSTRAINT `From order to status` FOREIGN KEY (`Status_id`) REFERENCES `Status` (`idStatus`) +) ENGINE=InnoDB AUTO_INCREMENT=31 DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_0900_ai_ci; +/*!40101 SET character_set_client = @saved_cs_client */; + +-- +-- Dumping data for table `Orders` +-- + +LOCK TABLES `Orders` WRITE; +/*!40000 ALTER TABLE `Orders` DISABLE KEYS */; +INSERT INTO `Orders` VALUES (1,'ORD-1011',1,1,11,'2023-09-18','2023-09-22'),(2,'ORD-1022',2,2,13,'2023-10-10',NULL),(3,'ORD-1005',3,3,5,'2023-10-24','2023-10-29'),(4,'ORD-1010',3,2,10,'2023-09-15',NULL),(5,'ORD-1024',3,3,15,'2023-10-24','2023-10-29'),(6,'ORD-1017',4,1,17,'2023-09-25','2023-09-28'),(7,'ORD-1002',4,2,2,'2023-09-02',NULL),(8,'ORD-1012',6,1,12,'2023-09-20','2023-09-25'),(9,'ORD-1026',6,1,17,'2023-10-15','2023-10-18'),(10,'ORD-1016',6,2,16,'2023-10-01',NULL),(11,'ORD-1007',7,1,7,'2023-09-11','2023-09-14'),(12,'ORD-1028',7,3,12,'2023-10-25','2023-10-30'),(13,'ORD-1013',7,4,13,'2023-10-26','2023-10-31'),(14,'ORD-1018',7,4,18,'2023-10-26','2023-11-02'),(15,'ORD-1023',7,4,15,'2023-10-26','2023-11-01'),(16,'ORD-1009',8,3,9,'2023-10-23','2023-10-28'),(17,'ORD-1019',9,3,19,'2023-10-22','2023-10-27'),(18,'ORD-1020',10,1,1,'2023-10-05','2023-10-09'),(19,'ORD-1015',1,1,15,'2023-09-22','2023-09-26'),(20,'ORD-1003',12,3,3,'2023-09-05','2023-09-08'),(21,'ORD-1029',13,1,4,'2023-10-18','2023-10-22'),(22,'ORD-1001',14,1,1,'2023-09-01','2023-09-05'),(23,'ORD-1004',14,4,4,'2023-10-25','2023-10-30'),(24,'ORD-1006',15,1,6,'2023-09-10','2023-09-15'),(25,'ORD-1025',17,1,6,'2023-10-12','2023-10-16'),(26,'ORD-1021',18,1,7,'2023-10-08','2023-10-12'),(27,'ORD-1030',18,2,8,'2023-10-20',NULL),(28,'ORD-1014',18,3,14,'2023-10-25','2023-10-29'),(29,'ORD-1008',18,4,8,'2023-10-26','2023-11-01'),(30,'ORD-1027',18,4,11,'2023-10-26','2023-11-03'); +/*!40000 ALTER TABLE `Orders` ENABLE KEYS */; +UNLOCK TABLES; + +-- +-- Table structure for table `PickUp` +-- + +DROP TABLE IF EXISTS `PickUp`; +/*!40101 SET @saved_cs_client = @@character_set_client */; +/*!50503 SET character_set_client = utf8mb4 */; +CREATE TABLE `PickUp` ( + `idPickUp` int NOT NULL AUTO_INCREMENT, + `PickUpPoint` varchar(45) NOT NULL, + PRIMARY KEY (`idPickUp`) +) ENGINE=InnoDB AUTO_INCREMENT=20 DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_0900_ai_ci; +/*!40101 SET character_set_client = @saved_cs_client */; + +-- +-- Dumping data for table `PickUp` +-- + +LOCK TABLES `PickUp` WRITE; +/*!40000 ALTER TABLE `PickUp` DISABLE KEYS */; +INSERT INTO `PickUp` VALUES (1,'пер. Тихий, 4'),(2,'пер. Школьный, 1'),(3,'пр. Ленина, 100'),(4,'Пр. Мира, 42'),(5,'пр. Победы, 50'),(6,'пр. Строителей, 1'),(7,'ул. Гагарина, 8'),(8,'ул. Зеленая, 8'),(9,'ул. Кирова, 12'),(10,'ул. Ленина, 15'),(11,'ул. Новая, 2'),(12,'ул. Пушкина, 10'),(13,'ул. Садовая, 19'),(14,'ул. Северная, 9'),(15,'ул. Советская, 3'),(16,'ул. Труда, 14'),(17,'ул. Цветочная, 5'),(18,'ул. Чехова, 33'),(19,'ул. Южная, 11'); +/*!40000 ALTER TABLE `PickUp` ENABLE KEYS */; +UNLOCK TABLES; + +-- +-- Table structure for table `Products` +-- + +DROP TABLE IF EXISTS `Products`; +/*!40101 SET @saved_cs_client = @@character_set_client */; +/*!50503 SET character_set_client = utf8mb4 */; +CREATE TABLE `Products` ( + `idProducts` int NOT NULL AUTO_INCREMENT, + `Article` varchar(45) NOT NULL, + `ProductName` varchar(45) NOT NULL, + `Category_id` int NOT NULL, + `ProductDescryption` varchar(90) NOT NULL, + `Manufacturer_id` int NOT NULL, + `Supplier_id` int NOT NULL, + `Price` decimal(10,2) NOT NULL, + `Discount` varchar(45) DEFAULT NULL, + `QuantityStock` int NOT NULL, + `UnitType_id` int NOT NULL, + `Image` mediumblob, + PRIMARY KEY (`idProducts`), + KEY `From prod to category_idx` (`Category_id`), + KEY `From prod to manufacturer_idx` (`Manufacturer_id`), + KEY `From prod to supplier_idx` (`Supplier_id`), + KEY `From prod to unittype_idx` (`UnitType_id`), + CONSTRAINT `From prod to category` FOREIGN KEY (`Category_id`) REFERENCES `Category` (`idCategory`), + CONSTRAINT `From prod to manufacturer` FOREIGN KEY (`Manufacturer_id`) REFERENCES `Manufacturer` (`idManufacturer`), + CONSTRAINT `From prod to supplier` FOREIGN KEY (`Supplier_id`) REFERENCES `Supplier` (`idSupplier`), + CONSTRAINT `From prod to unittype` FOREIGN KEY (`UnitType_id`) REFERENCES `UnitType` (`idUnitType`) +) ENGINE=InnoDB AUTO_INCREMENT=112 DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_0900_ai_ci; +/*!40101 SET character_set_client = @saved_cs_client */; + +-- +-- Dumping data for table `Products` +-- + +LOCK TABLES `Products` WRITE; +/*!40000 ALTER TABLE `Products` DISABLE KEYS */; +INSERT INTO `Products` VALUES (1,'P-001','Мяч футбольный Pro',4,'Профессиональный мяч',1,8,4500.00,'10%',15,5,''),(2,'P-002','Кроссовки беговые X1',5,'Для бега по асфальту',11,2,8990.50,NULL,42,3,_binary 'cross x1.jpg'),(3,'P-003','Велотренажер Fit-3',10,'Домашний велотренажер',9,8,25000.00,'25%',5,5,_binary 'bike fit.png'),(4,'P-004','Лыжи беговые Skate',1,'Коньковый ход',1,1,12500.00,'5%',0,1,_binary 'ski skate.jpg'),(5,'P-005','Гантели разборные 15кг',10,'Стальные гантели',23,4,3200.75,'30%',20,3,''),(6,'P-006','Спортивный костюм',13,'Хлопок 100%',1,8,6500.00,'15%',8,5,_binary 'suit.jpg'),(7,'P-007','Мяч баскетбольный',4,'Для игры в зале',11,8,3100.00,NULL,12,5,_binary 'basket.png'),(8,'P-008','Беговая дорожка RunMax',10,'Складная конструкция',9,2,45900.00,'5%',0,5,''),(9,'P-009','Бутсы футбольные',5,'Шиповки',11,8,7500.00,'25%',30,3,_binary 'boots.jpg'),(10,'P-010','Палки лыжные',3,'Карбоновые',6,2,4100.50,'10%',18,3,_binary 'poles.jpg'),(11,'P-011','Эспандер трубчатый',10,'Набор 5 шт',23,4,950.00,'50%',100,1,''),(12,'P-012','Футболка спортивная',13,'Дышащая ткань',1,8,1800.00,NULL,50,5,_binary 'tshirt.jpg'),(13,'P-013','Мяч волейбольный',4,'Тренировочный',23,4,2200.00,'15%',25,5,_binary 'volley.png'),(14,'P-014','Перчатки для фитнеса',13,'Кожа/текстиль',11,2,1250.00,'25%',0,3,_binary 'gloves.jpg'),(15,'P-015','Мяч футбольный',4,'Профессиональный мяч для игр на газоне',1,8,4500.50,'10%',50,5,_binary 'adidas_ball.jpg'),(16,'P-016','Мяч баскетбольный',4,'Мяч для зала и улицы, размер 7',16,1,3200.00,NULL,30,5,_binary 'bball_spalding.png'),(17,'P-017','Мяч волейбольный',4,'Мяч для классического волейбола',10,8,3800.75,'5%',120,5,_binary 'mikasa_vol.jpg'),(18,'P-018','Гантели разборные 15кг',8,'Набор гантелей в кейсе',3,3,2500.00,'25%',15,2,_binary 'dumbbell_15.png'),(19,'P-019','Гантели литые 5кг',8,'Неопреновое покрытие',19,3,900.00,NULL,0,3,_binary 'dumbbell_5.jpg'),(20,'P-020','Штанга олимпийская',8,'Гриф 20кг + замки',9,1,15000.00,'15%',8,5,_binary 'barbell.png'),(21,'P-021','Блины для штанги 10кг',8,'Обрезиненные диски',2,1,2100.50,NULL,40,5,_binary 'disk_10.jpg'),(22,'P-022','Беговая дорожка',2,'Складная, до 15 км/ч',9,11,45000.00,'30%',5,5,_binary 'treadmill.jpg'),(23,'P-023','Эллиптический тренажер',2,'Магнитная система нагрузки',19,11,32000.00,'10%',0,5,_binary 'elliptic.png'),(24,'P-024','Велотренажер',2,'Вертикальная посадка',9,11,28000.00,'5%',12,5,_binary 'bike.jpg'),(25,'P-025','Коврик для йоги',12,'Толщина 6мм, TPE',11,8,1200.00,'15%',200,5,_binary 'yoga_mat.jpg'),(26,'P-026','Фитнес-резинки',12,'Набор из 5 эспандеров',3,3,600.00,'25%',150,2,_binary 'bands.png'),(27,'P-027','Скакалка скоростная',12,'Металлический трос',15,1,850.50,NULL,80,5,_binary 'rope.jpg'),(28,'P-028','Кроссовки беговые',5,'Амортизирующая подошва',11,6,8900.00,'20%',45,3,_binary 'nike_run.jpg'),(29,'P-029','Бутсы футбольные',5,'Шиповки для натурального газона',14,6,7500.00,'35%',25,3,_binary 'puma_boots.png'),(30,'P-030','Штангетки',5,'Обувь для тяжелой атлетики',1,6,12000.00,NULL,10,3,_binary 'adipower.jpg'),(31,'P-031','Футболка компрессионная',6,'Отводит влагу',20,9,2500.00,'10%',60,5,_binary 'ua_shirt.png'),(32,'P-032','Шорты спортивные',6,'Легкие дышащие шорты',11,9,1800.00,NULL,85,5,_binary 'nike_shorts.jpg'),(33,'P-033','Костюм спортивный',6,'Хлопок + полиэстер',14,9,5500.00,'15%',30,5,_binary 'puma_suit.jpg'),(34,'P-034','Палатка 3-местная',11,'Водостойкость 3000мм',13,10,8500.00,'25%',20,5,_binary 'tent_3.png'),(35,'P-035','Спальный мешок',11,'До -5 градусов комфорт',12,10,3200.50,'5%',40,5,_binary 'sleeping_bag.jpg'),(36,'P-036','Рюкзак туристический',11,'Объем 60 литров',4,1,11000.00,NULL,15,5,_binary 'backpack.png'),(37,'P-037','Термос 1 литр',11,'Держит тепло 24 часа',18,10,2800.00,'10%',50,5,_binary 'thermos.jpg'),(38,'P-038','Боксерские перчатки',1,'Натуральная кожа, 12 унций',5,7,4500.00,NULL,35,3,_binary 'gloves.png'),(39,'P-039','Капа одночелюстная',1,'Термопластичная',21,7,500.00,NULL,100,5,_binary 'mouthguard.jpg'),(40,'P-040','Шлем боксерский',1,'С защитой скул',5,7,3500.00,'15%',18,5,_binary 'helmet.jpg'),(41,'P-041','Ракетка для тенниса',9,'Легкий графит',22,1,9500.00,'20%',12,5,_binary 'racket.png'),(43,'P-043','Очки для плавания',7,'Антифог, защита от УФ',17,5,1800.00,'5%',80,5,_binary 'goggles.png'); +/*!40000 ALTER TABLE `Products` ENABLE KEYS */; +UNLOCK TABLES; + +-- +-- Table structure for table `Role` +-- + +DROP TABLE IF EXISTS `Role`; +/*!40101 SET @saved_cs_client = @@character_set_client */; +/*!50503 SET character_set_client = utf8mb4 */; +CREATE TABLE `Role` ( + `idRole` int NOT NULL AUTO_INCREMENT, + `Role_name` varchar(45) NOT NULL, + PRIMARY KEY (`idRole`) +) ENGINE=InnoDB AUTO_INCREMENT=5 DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_0900_ai_ci; +/*!40101 SET character_set_client = @saved_cs_client */; + +-- +-- Dumping data for table `Role` +-- + +LOCK TABLES `Role` WRITE; +/*!40000 ALTER TABLE `Role` DISABLE KEYS */; +INSERT INTO `Role` VALUES (1,'Клиент'),(2,'Менеджер'),(3,'Админ'),(4,'Гость'); +/*!40000 ALTER TABLE `Role` ENABLE KEYS */; +UNLOCK TABLES; + +-- +-- Table structure for table `Status` +-- + +DROP TABLE IF EXISTS `Status`; +/*!40101 SET @saved_cs_client = @@character_set_client */; +/*!50503 SET character_set_client = utf8mb4 */; +CREATE TABLE `Status` ( + `idStatus` int NOT NULL AUTO_INCREMENT, + `StatusName` varchar(45) NOT NULL, + PRIMARY KEY (`idStatus`) +) ENGINE=InnoDB AUTO_INCREMENT=5 DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_0900_ai_ci; +/*!40101 SET character_set_client = @saved_cs_client */; + +-- +-- Dumping data for table `Status` +-- + +LOCK TABLES `Status` WRITE; +/*!40000 ALTER TABLE `Status` DISABLE KEYS */; +INSERT INTO `Status` VALUES (1,'Доставлен'),(2,'Отменен'),(3,'Отправлен'),(4,'Формируется'); +/*!40000 ALTER TABLE `Status` ENABLE KEYS */; +UNLOCK TABLES; + +-- +-- Table structure for table `Supplier` +-- + +DROP TABLE IF EXISTS `Supplier`; +/*!40101 SET @saved_cs_client = @@character_set_client */; +/*!50503 SET character_set_client = utf8mb4 */; +CREATE TABLE `Supplier` ( + `idSupplier` int NOT NULL AUTO_INCREMENT, + `SupplierName` varchar(45) NOT NULL, + PRIMARY KEY (`idSupplier`) +) ENGINE=InnoDB AUTO_INCREMENT=12 DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_0900_ai_ci; +/*!40101 SET character_set_client = @saved_cs_client */; + +-- +-- Dumping data for table `Supplier` +-- + +LOCK TABLES `Supplier` WRITE; +/*!40000 ALTER TABLE `Supplier` DISABLE KEYS */; +INSERT INTO `Supplier` VALUES (1,'ЗАО Актив'),(2,'ЗАО АктивЛайф'),(3,'ИП Иванов'),(4,'ИП Смирнов'),(5,'ООО ВодаСпорт'),(6,'ООО ОбувьПро'),(7,'ООО Ринг'),(8,'ООО СпортОпт'),(9,'ООО Текстиль'),(10,'ООО ТурСнаб'),(11,'ООО ФитнесПро'); +/*!40000 ALTER TABLE `Supplier` ENABLE KEYS */; +UNLOCK TABLES; + +-- +-- Table structure for table `UnitType` +-- + +DROP TABLE IF EXISTS `UnitType`; +/*!40101 SET @saved_cs_client = @@character_set_client */; +/*!50503 SET character_set_client = utf8mb4 */; +CREATE TABLE `UnitType` ( + `idUnitType` int NOT NULL AUTO_INCREMENT, + `UnitTypeName` varchar(45) NOT NULL, + PRIMARY KEY (`idUnitType`) +) ENGINE=InnoDB AUTO_INCREMENT=6 DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_0900_ai_ci; +/*!40101 SET character_set_client = @saved_cs_client */; + +-- +-- Dumping data for table `UnitType` +-- + +LOCK TABLES `UnitType` WRITE; +/*!40000 ALTER TABLE `UnitType` DISABLE KEYS */; +INSERT INTO `UnitType` VALUES (1,'компл.'),(2,'набор'),(3,'пара'),(4,'туба'),(5,'шт.'); +/*!40000 ALTER TABLE `UnitType` ENABLE KEYS */; +UNLOCK TABLES; +/*!40103 SET TIME_ZONE=@OLD_TIME_ZONE */; + +/*!40101 SET SQL_MODE=@OLD_SQL_MODE */; +/*!40014 SET FOREIGN_KEY_CHECKS=@OLD_FOREIGN_KEY_CHECKS */; +/*!40014 SET UNIQUE_CHECKS=@OLD_UNIQUE_CHECKS */; +/*!40101 SET CHARACTER_SET_CLIENT=@OLD_CHARACTER_SET_CLIENT */; +/*!40101 SET CHARACTER_SET_RESULTS=@OLD_CHARACTER_SET_RESULTS */; +/*!40101 SET COLLATION_CONNECTION=@OLD_COLLATION_CONNECTION */; +/*!40111 SET SQL_NOTES=@OLD_SQL_NOTES */; + +-- Dump completed on 2026-05-14 14:59:47 diff --git a/DUMP_UML_ER/MerkylovISP41_ER.pdf b/DUMP_UML_ER/MerkylovISP41_ER.pdf new file mode 100644 index 0000000000000000000000000000000000000000..48887242ba5d2baa5b4a3af97586139511f4f940 GIT binary patch literal 39050 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 literal 0 HcmV?d00001 diff --git a/WinFormsApp1.sln b/WinFormsApp1.sln new file mode 100644 index 0000000..205c711 --- /dev/null +++ b/WinFormsApp1.sln @@ -0,0 +1,25 @@ + +Microsoft Visual Studio Solution File, Format Version 12.00 +# Visual Studio Version 17 +VisualStudioVersion = 17.14.36915.13 d17.14 +MinimumVisualStudioVersion = 10.0.40219.1 +Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "WinFormsApp1", "WinFormsApp1\WinFormsApp1.csproj", "{640976E5-3DC4-421F-A6E5-BD05DD9D08BC}" +EndProject +Global + GlobalSection(SolutionConfigurationPlatforms) = preSolution + Debug|Any CPU = Debug|Any CPU + Release|Any CPU = Release|Any CPU + EndGlobalSection + GlobalSection(ProjectConfigurationPlatforms) = postSolution + {640976E5-3DC4-421F-A6E5-BD05DD9D08BC}.Debug|Any CPU.ActiveCfg = Debug|Any CPU + {640976E5-3DC4-421F-A6E5-BD05DD9D08BC}.Debug|Any CPU.Build.0 = Debug|Any CPU + {640976E5-3DC4-421F-A6E5-BD05DD9D08BC}.Release|Any CPU.ActiveCfg = Release|Any CPU + {640976E5-3DC4-421F-A6E5-BD05DD9D08BC}.Release|Any CPU.Build.0 = Release|Any CPU + EndGlobalSection + GlobalSection(SolutionProperties) = preSolution + HideSolutionNode = FALSE + EndGlobalSection + GlobalSection(ExtensibilityGlobals) = postSolution + SolutionGuid = {2F0041A0-7308-4BD5-AB23-38ED95B9D881} + EndGlobalSection +EndGlobal diff --git a/WinFormsApp1/AddForm.Designer.cs b/WinFormsApp1/AddForm.Designer.cs new file mode 100644 index 0000000..1c6842d --- /dev/null +++ b/WinFormsApp1/AddForm.Designer.cs @@ -0,0 +1,370 @@ +namespace WinFormsApp1 +{ + partial class AddForm + { + /// + /// Required designer variable. + /// + private System.ComponentModel.IContainer components = null; + + /// + /// Clean up any resources being used. + /// + /// true if managed resources should be disposed; otherwise, false. + protected override void Dispose(bool disposing) + { + if (disposing && (components != null)) + { + components.Dispose(); + } + base.Dispose(disposing); + } + + #region Windows Form Designer generated code + + /// + /// Required method for Designer support - do not modify + /// the contents of this method with the code editor. + /// + private void InitializeComponent() + { + components = new System.ComponentModel.Container(); + comboBoxSupplier = new ComboBox(); + textBoxArticle = new TextBox(); + textBoxProdName = new TextBox(); + textBoxDesc = new TextBox(); + comboBoxUnitType = new ComboBox(); + comboBoxManufacturer = new ComboBox(); + button1 = new Button(); + comboBoxCategories = new ComboBox(); + textBoxPrice = new TextBox(); + textBoxSale = new TextBox(); + textBoxStockQuan = new TextBox(); + imageList1 = new ImageList(components); + button2 = new Button(); + label11 = new Label(); + label1 = new Label(); + label2 = new Label(); + label3 = new Label(); + label4 = new Label(); + label5 = new Label(); + label6 = new Label(); + label7 = new Label(); + label8 = new Label(); + label9 = new Label(); + label10 = new Label(); + button3 = new Button(); + SuspendLayout(); + // + // comboBoxSupplier + // + comboBoxSupplier.BackColor = Color.FromArgb(133, 242, 189); + comboBoxSupplier.Font = new Font("Comic Sans MS", 9F); + comboBoxSupplier.FormattingEnabled = true; + comboBoxSupplier.Location = new Point(160, 258); + comboBoxSupplier.Name = "comboBoxSupplier"; + comboBoxSupplier.Size = new Size(208, 25); + comboBoxSupplier.TabIndex = 0; + // + // textBoxArticle + // + textBoxArticle.BackColor = Color.FromArgb(133, 242, 189); + textBoxArticle.Font = new Font("Comic Sans MS", 9F); + textBoxArticle.Location = new Point(160, 113); + textBoxArticle.Name = "textBoxArticle"; + textBoxArticle.Size = new Size(208, 24); + textBoxArticle.TabIndex = 1; + // + // textBoxProdName + // + textBoxProdName.BackColor = Color.FromArgb(133, 242, 189); + textBoxProdName.Font = new Font("Comic Sans MS", 9F); + textBoxProdName.Location = new Point(160, 142); + textBoxProdName.Name = "textBoxProdName"; + textBoxProdName.Size = new Size(208, 24); + textBoxProdName.TabIndex = 2; + // + // textBoxDesc + // + textBoxDesc.BackColor = Color.FromArgb(133, 242, 189); + textBoxDesc.Font = new Font("Comic Sans MS", 9F); + textBoxDesc.Location = new Point(160, 200); + textBoxDesc.Name = "textBoxDesc"; + textBoxDesc.Size = new Size(208, 24); + textBoxDesc.TabIndex = 3; + // + // comboBoxUnitType + // + comboBoxUnitType.BackColor = Color.FromArgb(133, 242, 189); + comboBoxUnitType.Font = new Font("Comic Sans MS", 9F); + comboBoxUnitType.FormattingEnabled = true; + comboBoxUnitType.Location = new Point(160, 374); + comboBoxUnitType.Name = "comboBoxUnitType"; + comboBoxUnitType.Size = new Size(208, 25); + comboBoxUnitType.TabIndex = 4; + // + // comboBoxManufacturer + // + comboBoxManufacturer.BackColor = Color.FromArgb(133, 242, 189); + comboBoxManufacturer.Font = new Font("Comic Sans MS", 9F); + comboBoxManufacturer.FormattingEnabled = true; + comboBoxManufacturer.Location = new Point(160, 229); + comboBoxManufacturer.Name = "comboBoxManufacturer"; + comboBoxManufacturer.Size = new Size(208, 25); + comboBoxManufacturer.TabIndex = 5; + // + // button1 + // + button1.BackColor = Color.Red; + button1.Font = new Font("Comic Sans MS", 9F); + button1.Location = new Point(447, 12); + button1.Name = "button1"; + button1.Size = new Size(36, 31); + button1.TabIndex = 6; + button1.Text = "X"; + button1.UseVisualStyleBackColor = false; + button1.Click += button1_Click; + // + // comboBoxCategories + // + comboBoxCategories.BackColor = Color.FromArgb(133, 242, 189); + comboBoxCategories.Font = new Font("Comic Sans MS", 9F); + comboBoxCategories.FormattingEnabled = true; + comboBoxCategories.Location = new Point(160, 171); + comboBoxCategories.Name = "comboBoxCategories"; + comboBoxCategories.Size = new Size(208, 25); + comboBoxCategories.TabIndex = 7; + // + // textBoxPrice + // + textBoxPrice.BackColor = Color.FromArgb(133, 242, 189); + textBoxPrice.Font = new Font("Comic Sans MS", 9F); + textBoxPrice.Location = new Point(160, 287); + textBoxPrice.Name = "textBoxPrice"; + textBoxPrice.Size = new Size(208, 24); + textBoxPrice.TabIndex = 8; + // + // textBoxSale + // + textBoxSale.BackColor = Color.FromArgb(133, 242, 189); + textBoxSale.Font = new Font("Comic Sans MS", 9F); + textBoxSale.Location = new Point(160, 316); + textBoxSale.Name = "textBoxSale"; + textBoxSale.Size = new Size(208, 24); + textBoxSale.TabIndex = 9; + // + // textBoxStockQuan + // + textBoxStockQuan.BackColor = Color.FromArgb(133, 242, 189); + textBoxStockQuan.Font = new Font("Comic Sans MS", 9F); + textBoxStockQuan.Location = new Point(160, 345); + textBoxStockQuan.Name = "textBoxStockQuan"; + textBoxStockQuan.Size = new Size(208, 24); + textBoxStockQuan.TabIndex = 10; + // + // imageList1 + // + imageList1.ColorDepth = ColorDepth.Depth32Bit; + imageList1.ImageSize = new Size(16, 16); + imageList1.TransparentColor = Color.Transparent; + // + // button2 + // + button2.BackColor = Color.Red; + button2.Font = new Font("Comic Sans MS", 9F); + button2.Location = new Point(219, 405); + button2.Name = "button2"; + button2.Size = new Size(98, 23); + button2.TabIndex = 11; + button2.Text = "Добавить"; + button2.UseVisualStyleBackColor = false; + button2.Click += btnAdd_Click; + // + // label11 + // + label11.AutoSize = true; + label11.Font = new Font("Comic Sans MS", 9F, FontStyle.Regular, GraphicsUnit.Point, 204); + label11.Location = new Point(69, 378); + label11.Name = "label11"; + label11.Size = new Size(91, 17); + label11.TabIndex = 21; + label11.Text = "Ед. измерения"; + // + // label1 + // + label1.AutoSize = true; + label1.Font = new Font("Comic Sans MS", 9F, FontStyle.Regular, GraphicsUnit.Point, 204); + label1.Location = new Point(69, 116); + label1.Name = "label1"; + label1.Size = new Size(56, 17); + label1.TabIndex = 22; + label1.Text = "Артикул"; + // + // label2 + // + label2.AutoSize = true; + label2.Font = new Font("Comic Sans MS", 9F, FontStyle.Regular, GraphicsUnit.Point, 204); + label2.Location = new Point(69, 174); + label2.Name = "label2"; + label2.Size = new Size(67, 17); + label2.TabIndex = 23; + label2.Text = "Категория"; + // + // label3 + // + label3.AutoSize = true; + label3.Font = new Font("Comic Sans MS", 9F, FontStyle.Regular, GraphicsUnit.Point, 204); + label3.Location = new Point(69, 348); + label3.Name = "label3"; + label3.Size = new Size(76, 17); + label3.TabIndex = 24; + label3.Text = "Количество"; + // + // label4 + // + label4.AutoSize = true; + label4.Font = new Font("Comic Sans MS", 9F, FontStyle.Regular, GraphicsUnit.Point, 204); + label4.Location = new Point(69, 319); + label4.Name = "label4"; + label4.Size = new Size(48, 17); + label4.TabIndex = 25; + label4.Text = "Скидка"; + // + // label5 + // + label5.AutoSize = true; + label5.Font = new Font("Comic Sans MS", 9F, FontStyle.Regular, GraphicsUnit.Point, 204); + label5.Location = new Point(69, 290); + label5.Name = "label5"; + label5.Size = new Size(36, 17); + label5.TabIndex = 26; + label5.Text = "Цена"; + // + // label6 + // + label6.AutoSize = true; + label6.Font = new Font("Comic Sans MS", 9F, FontStyle.Regular, GraphicsUnit.Point, 204); + label6.Location = new Point(69, 261); + label6.Name = "label6"; + label6.Size = new Size(74, 17); + label6.TabIndex = 27; + label6.Text = "Поставщик"; + // + // label7 + // + label7.AutoSize = true; + label7.Font = new Font("Comic Sans MS", 9F, FontStyle.Regular, GraphicsUnit.Point, 204); + label7.Location = new Point(61, 232); + label7.Name = "label7"; + label7.Size = new Size(99, 17); + label7.TabIndex = 28; + label7.Text = "Производитель"; + // + // label8 + // + label8.AutoSize = true; + label8.Font = new Font("Comic Sans MS", 9F, FontStyle.Regular, GraphicsUnit.Point, 204); + label8.Location = new Point(69, 203); + label8.Name = "label8"; + label8.Size = new Size(67, 17); + label8.TabIndex = 29; + label8.Text = "Описание"; + // + // label9 + // + label9.AutoSize = true; + label9.Font = new Font("Comic Sans MS", 9F, FontStyle.Regular, GraphicsUnit.Point, 204); + label9.Location = new Point(69, 145); + label9.Name = "label9"; + label9.Size = new Size(61, 17); + label9.TabIndex = 30; + label9.Text = "Название"; + // + // label10 + // + label10.AutoSize = true; + label10.Font = new Font("Comic Sans MS", 26.25F, FontStyle.Regular, GraphicsUnit.Point, 204); + label10.Location = new Point(121, 9); + label10.Name = "label10"; + label10.Size = new Size(269, 49); + label10.TabIndex = 31; + label10.Text = "ДОБАВЛЕНИЕ"; + // + // button3 + // + button3.BackColor = Color.Red; + button3.Font = new Font("Comic Sans MS", 9F, FontStyle.Regular, GraphicsUnit.Point, 204); + button3.Location = new Point(408, 415); + button3.Name = "button3"; + button3.Size = new Size(75, 23); + button3.TabIndex = 37; + button3.Text = "Назад"; + button3.UseVisualStyleBackColor = false; + button3.Click += button3_Click; + // + // AddForm + // + AutoScaleDimensions = new SizeF(7F, 15F); + AutoScaleMode = AutoScaleMode.Font; + BackColor = Color.FromArgb(192, 237, 215); + ClientSize = new Size(495, 450); + Controls.Add(button3); + Controls.Add(label10); + Controls.Add(label9); + Controls.Add(label8); + Controls.Add(label7); + Controls.Add(label6); + Controls.Add(label5); + Controls.Add(label4); + Controls.Add(label3); + Controls.Add(label2); + Controls.Add(label1); + Controls.Add(label11); + Controls.Add(button2); + Controls.Add(textBoxStockQuan); + Controls.Add(textBoxSale); + Controls.Add(textBoxPrice); + Controls.Add(comboBoxCategories); + Controls.Add(button1); + Controls.Add(comboBoxManufacturer); + Controls.Add(comboBoxUnitType); + Controls.Add(textBoxDesc); + Controls.Add(textBoxProdName); + Controls.Add(textBoxArticle); + Controls.Add(comboBoxSupplier); + FormBorderStyle = FormBorderStyle.None; + Name = "AddForm"; + Text = "AddForm"; + ResumeLayout(false); + PerformLayout(); + } + + #endregion + + private ComboBox comboBoxSupplier; + private TextBox textBoxArticle; + private TextBox textBoxProdName; + private TextBox textBoxDesc; + private ComboBox comboBoxUnitType; + private ComboBox comboBoxManufacturer; + private Button button1; + private ComboBox comboBoxCategories; + private TextBox textBoxPrice; + private TextBox textBoxSale; + private TextBox textBoxStockQuan; + private ImageList imageList1; + private Button button2; + private Label label11; + private Label label1; + private Label label2; + private Label label3; + private Label label4; + private Label label5; + private Label label6; + private Label label7; + private Label label8; + private Label label9; + private Label label10; + private Button button3; + } +} \ No newline at end of file diff --git a/WinFormsApp1/AddForm.cs b/WinFormsApp1/AddForm.cs new file mode 100644 index 0000000..0dd6037 --- /dev/null +++ b/WinFormsApp1/AddForm.cs @@ -0,0 +1,198 @@ +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 MySql.Data.MySqlClient; + +namespace WinFormsApp1 +{ + public partial class AddForm : Form + { + public AddForm() + { + InitializeComponent(); + LoadCategories(); + LoadManufacteries(); + LoadUnitType(); + LoadSuppliers(); + } + private void LoadCategories() + { + DB db = new DB(); + DataTable categories = new DataTable(); + MySqlDataAdapter adapter = new MySqlDataAdapter(); + MySqlCommand command = new MySqlCommand("SELECT idCategory, CategoryName FROM Category", db.getConnection()); + + try + { + db.openConnection(); + adapter.SelectCommand = command; + adapter.Fill(categories); + + comboBoxCategories.DataSource = categories; + comboBoxCategories.DisplayMember = "CategoryName"; + comboBoxCategories.ValueMember = "idCategory"; + } + catch (Exception ex) + { + MessageBox.Show("Ошибка загрузки категорий " + ex.Message); + } + finally + { + db.closeConnection(); + } + } + private void LoadManufacteries() + { + DB db = new DB(); + DataTable manufacturer = new DataTable(); + MySqlDataAdapter adapter = new MySqlDataAdapter(); + MySqlCommand command = new MySqlCommand("SELECT idManufacturer, ManufacturerName FROM Manufacturer", db.getConnection()); + + try + { + db.openConnection(); + adapter.SelectCommand = command; + adapter.Fill(manufacturer); + + comboBoxManufacturer.DataSource = manufacturer; + comboBoxManufacturer.DisplayMember = "ManufacturerName"; + comboBoxManufacturer.ValueMember = "idManufacturer"; + } + catch (Exception ex) + { + MessageBox.Show("Ошибка загрузки категорий " + ex.Message); + } + finally + { + db.closeConnection(); + } + } + private void LoadUnitType() + { + DB db = new DB(); + DataTable UnitType = new DataTable(); + MySqlDataAdapter adapter = new MySqlDataAdapter(); + MySqlCommand command = new MySqlCommand("SELECT idUnitType, UnitTypeName FROM UnitType", db.getConnection()); + + try + { + db.openConnection(); + adapter.SelectCommand = command; + adapter.Fill(UnitType); + + comboBoxUnitType.DataSource = UnitType; + comboBoxUnitType.DisplayMember = "UnitTypeName"; + comboBoxUnitType.ValueMember = "idUnitType"; + } + catch (Exception ex) + { + MessageBox.Show("Ошибка загрузки категорий " + ex.Message); + } + finally + { + db.closeConnection(); + } + } + private void LoadSuppliers() + { + DB db = new DB(); + DataTable suppliers = new DataTable(); + MySqlDataAdapter adapter = new MySqlDataAdapter(); + MySqlCommand command = new MySqlCommand("SELECT idSupplier, SupplierName FROM Supplier", db.getConnection()); + + try + { + db.openConnection(); + adapter.SelectCommand = command; + adapter.Fill(suppliers); + + comboBoxSupplier.DataSource = suppliers; + comboBoxSupplier.DisplayMember = "SupplierName"; + comboBoxSupplier.ValueMember = "idSupplier"; + } + catch (Exception ex) + { + MessageBox.Show("Ошибка загрузки категорий " + ex.Message); + } + finally + { + db.closeConnection(); + } + } + private async void btnAdd_Click(object sender, EventArgs e) + { + + DB db = new DB(); + + try + { + db.openConnection(); + + string query = "INSERT INTO Products (Article, ProductName, Category_id, ProductDescryption, Manufacturer_id, Supplier_id, Price, Discount, QuantityStock, UnitType_id)" + + "VALUES (@art, @prodname, @cat, @des, @manu, @supp, @price, @sale, @quan, @Unit)"; + + using (MySqlCommand command = new MySqlCommand(query, db.getConnection())) + { + command.Parameters.AddWithValue("@art", textBoxArticle.Text); + command.Parameters.AddWithValue("@prodname", textBoxProdName.Text); + command.Parameters.AddWithValue("@cat", comboBoxCategories.SelectedValue.ToString()); + command.Parameters.AddWithValue("@des", textBoxDesc.Text); + command.Parameters.AddWithValue("@manu", comboBoxManufacturer.SelectedValue.ToString()); + command.Parameters.AddWithValue("@supp", comboBoxSupplier.SelectedValue.ToString()); + command.Parameters.AddWithValue("@price", textBoxPrice.Text); + command.Parameters.AddWithValue("@sale", textBoxSale.Text); + command.Parameters.AddWithValue("@quan", textBoxStockQuan.Text); + command.Parameters.AddWithValue("@Unit", comboBoxUnitType.SelectedValue.ToString()); + + + int rowsAffected = await command.ExecuteNonQueryAsync(); + + if (rowsAffected > 0) + { + MessageBox.Show("Заказ успешно добавлен!"); + DialogResult = DialogResult.OK; + this.Close(); + AdmMainForm ado = new AdmMainForm(); + ado.Show(); + } + else + { + MessageBox.Show("Ошибка при добавлении заказа."); + } + } + } + catch (MySqlException ex) + { + MessageBox.Show("Ошибка базы данных: " + ex.Message); + } + catch (Exception ex) + { + MessageBox.Show("Произошла: " + ex.Message); + } + finally + { + db.closeConnection(); + } + } + + private void button1_Click(object sender, EventArgs e) + { + this.Hide(); + AdmMainForm Adm = new AdmMainForm(); + Adm.Show(); + } + + private void button3_Click(object sender, EventArgs e) + { + this.Hide(); + AdmMainForm af = new AdmMainForm(); + af.Show(); + } + } +} diff --git a/WinFormsApp1/AddForm.resx b/WinFormsApp1/AddForm.resx new file mode 100644 index 0000000..d610c39 --- /dev/null +++ b/WinFormsApp1/AddForm.resx @@ -0,0 +1,123 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + text/microsoft-resx + + + 2.0 + + + System.Resources.ResXResourceReader, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + 17, 17 + + \ No newline at end of file diff --git a/WinFormsApp1/AdmMainForm.Designer.cs b/WinFormsApp1/AdmMainForm.Designer.cs new file mode 100644 index 0000000..7f8447b --- /dev/null +++ b/WinFormsApp1/AdmMainForm.Designer.cs @@ -0,0 +1,359 @@ +namespace WinFormsApp1 +{ + partial class AdmMainForm + { + /// + /// Required designer variable. + /// + private System.ComponentModel.IContainer components = null; + + /// + /// Clean up any resources being used. + /// + /// true if managed resources should be disposed; otherwise, false. + protected override void Dispose(bool disposing) + { + if (disposing && (components != null)) + { + components.Dispose(); + } + base.Dispose(disposing); + } + + #region Windows Form Designer generated code + + /// + /// Required method for Designer support - do not modify + /// the contents of this method with the code editor. + /// + private void InitializeComponent() + { + dataGridViewProduct = new DataGridView(); + NameLabel = new Label(); + CategoryLabel = new Label(); + comboBoxSort = new ComboBox(); + comboBoxFilter = new ComboBox(); + textBoxSearch = new TextBox(); + button1 = new Button(); + button2 = new Button(); + delete = new Button(); + labelFIO = new Label(); + ExitButton = new Button(); + panel1 = new Panel(); + panel2 = new Panel(); + CountLabel = new Label(); + PriceLabel = new Label(); + pictureBox1 = new PictureBox(); + panel3 = new Panel(); + Descyption = new Label(); + SupplierLabel = new Label(); + ManufacturerLabel = new Label(); + label10 = new Label(); + button3 = new Button(); + ((System.ComponentModel.ISupportInitialize)dataGridViewProduct).BeginInit(); + panel1.SuspendLayout(); + panel2.SuspendLayout(); + ((System.ComponentModel.ISupportInitialize)pictureBox1).BeginInit(); + panel3.SuspendLayout(); + SuspendLayout(); + // + // dataGridViewProduct + // + dataGridViewProduct.AllowUserToAddRows = false; + dataGridViewProduct.AllowUserToDeleteRows = false; + dataGridViewProduct.AllowUserToResizeColumns = false; + dataGridViewProduct.AllowUserToResizeRows = false; + dataGridViewProduct.AutoSizeColumnsMode = DataGridViewAutoSizeColumnsMode.AllCells; + dataGridViewProduct.AutoSizeRowsMode = DataGridViewAutoSizeRowsMode.DisplayedCells; + dataGridViewProduct.ColumnHeadersHeightSizeMode = DataGridViewColumnHeadersHeightSizeMode.AutoSize; + dataGridViewProduct.Location = new Point(12, 112); + dataGridViewProduct.Name = "dataGridViewProduct"; + dataGridViewProduct.Size = new Size(764, 245); + dataGridViewProduct.TabIndex = 0; + dataGridViewProduct.Click += dataGridViewProd_Click; + // + // NameLabel + // + NameLabel.AutoSize = true; + NameLabel.Font = new Font("Comic Sans MS", 15F, FontStyle.Bold); + NameLabel.Location = new Point(162, -1); + NameLabel.Name = "NameLabel"; + NameLabel.Size = new Size(157, 29); + NameLabel.TabIndex = 4; + NameLabel.Text = "Наименование"; + // + // CategoryLabel + // + CategoryLabel.AutoSize = true; + CategoryLabel.Font = new Font("Comic Sans MS", 13F); + CategoryLabel.Location = new Point(162, 28); + CategoryLabel.Name = "CategoryLabel"; + CategoryLabel.Size = new Size(97, 24); + CategoryLabel.TabIndex = 5; + CategoryLabel.Text = "Категория"; + // + // comboBoxSort + // + comboBoxSort.BackColor = Color.FromArgb(133, 242, 189); + comboBoxSort.Font = new Font("Comic Sans MS", 9F); + comboBoxSort.FormattingEnabled = true; + comboBoxSort.Location = new Point(12, 83); + comboBoxSort.Name = "comboBoxSort"; + comboBoxSort.Size = new Size(121, 25); + comboBoxSort.TabIndex = 6; + comboBoxSort.SelectedIndexChanged += comboBoxSort_SelectedIndexChanged; + // + // comboBoxFilter + // + comboBoxFilter.BackColor = Color.FromArgb(133, 242, 189); + comboBoxFilter.Font = new Font("Comic Sans MS", 9F); + comboBoxFilter.FormattingEnabled = true; + comboBoxFilter.Location = new Point(200, 83); + comboBoxFilter.Name = "comboBoxFilter"; + comboBoxFilter.Size = new Size(121, 25); + comboBoxFilter.TabIndex = 7; + comboBoxFilter.SelectedIndexChanged += comboBoxFilter_SelectedIndexChanged; + // + // textBoxSearch + // + textBoxSearch.BackColor = Color.FromArgb(133, 242, 189); + textBoxSearch.Font = new Font("Comic Sans MS", 9F); + textBoxSearch.Location = new Point(378, 83); + textBoxSearch.Name = "textBoxSearch"; + textBoxSearch.Size = new Size(141, 24); + textBoxSearch.TabIndex = 8; + textBoxSearch.TextChanged += textBoxSearch_TextChanged; + // + // button1 + // + button1.BackColor = Color.Red; + button1.Font = new Font("Comic Sans MS", 9F, FontStyle.Regular, GraphicsUnit.Point, 204); + button1.Location = new Point(681, 376); + button1.Name = "button1"; + button1.Size = new Size(107, 23); + button1.TabIndex = 9; + button1.Text = "Добавить"; + button1.UseVisualStyleBackColor = false; + button1.Click += button1_Click; + // + // button2 + // + button2.BackColor = Color.Red; + button2.Font = new Font("Comic Sans MS", 9F); + button2.Location = new Point(681, 463); + button2.Name = "button2"; + button2.Size = new Size(107, 23); + button2.TabIndex = 10; + button2.Text = "Редактировать"; + button2.UseVisualStyleBackColor = false; + button2.Click += button2_Click; + // + // delete + // + delete.BackColor = Color.Red; + delete.Font = new Font("Comic Sans MS", 9F); + delete.Location = new Point(681, 419); + delete.Name = "delete"; + delete.Size = new Size(107, 23); + delete.TabIndex = 11; + delete.Text = "Удалить"; + delete.UseVisualStyleBackColor = false; + delete.Click += btnDelete_Click; + // + // labelFIO + // + labelFIO.AutoSize = true; + labelFIO.Font = new Font("Comic Sans MS", 9F); + labelFIO.Location = new Point(547, 87); + labelFIO.Name = "labelFIO"; + labelFIO.Size = new Size(35, 17); + labelFIO.TabIndex = 12; + labelFIO.Text = "ФИО"; + // + // ExitButton + // + ExitButton.BackColor = Color.Red; + ExitButton.Location = new Point(757, 9); + ExitButton.Name = "ExitButton"; + ExitButton.Size = new Size(31, 26); + ExitButton.TabIndex = 13; + ExitButton.Text = "X"; + ExitButton.UseVisualStyleBackColor = false; + ExitButton.Click += ExitButton_Click; + // + // panel1 + // + panel1.BackColor = Color.FromArgb(133, 242, 189); + panel1.BorderStyle = BorderStyle.FixedSingle; + panel1.Controls.Add(panel2); + panel1.Controls.Add(pictureBox1); + panel1.Controls.Add(panel3); + panel1.Controls.Add(SupplierLabel); + panel1.Controls.Add(ManufacturerLabel); + panel1.Controls.Add(NameLabel); + panel1.Controls.Add(CategoryLabel); + panel1.Location = new Point(66, 363); + panel1.Name = "panel1"; + panel1.Size = new Size(609, 150); + panel1.TabIndex = 14; + // + // panel2 + // + panel2.BorderStyle = BorderStyle.FixedSingle; + panel2.Controls.Add(CountLabel); + panel2.Controls.Add(PriceLabel); + panel2.Location = new Point(444, -1); + panel2.Name = "panel2"; + panel2.Size = new Size(164, 150); + panel2.TabIndex = 15; + // + // CountLabel + // + CountLabel.AutoSize = true; + CountLabel.Font = new Font("Comic Sans MS", 9.75F, FontStyle.Regular, GraphicsUnit.Point, 204); + CountLabel.Location = new Point(58, 43); + CountLabel.Name = "CountLabel"; + CountLabel.Size = new Size(82, 18); + CountLabel.TabIndex = 1; + CountLabel.Text = "Количество"; + // + // PriceLabel + // + PriceLabel.AutoSize = true; + PriceLabel.Font = new Font("Comic Sans MS", 12F, FontStyle.Regular, GraphicsUnit.Point, 204); + PriceLabel.Location = new Point(35, 10); + PriceLabel.Name = "PriceLabel"; + PriceLabel.Size = new Size(0, 23); + PriceLabel.TabIndex = 0; + // + // pictureBox1 + // + pictureBox1.BorderStyle = BorderStyle.FixedSingle; + pictureBox1.Location = new Point(19, 10); + pictureBox1.Name = "pictureBox1"; + pictureBox1.Size = new Size(137, 127); + pictureBox1.TabIndex = 19; + pictureBox1.TabStop = false; + // + // panel3 + // + panel3.BorderStyle = BorderStyle.FixedSingle; + panel3.Controls.Add(Descyption); + panel3.Location = new Point(162, 55); + panel3.Name = "panel3"; + panel3.Size = new Size(276, 44); + panel3.TabIndex = 18; + // + // Descyption + // + Descyption.AutoSize = true; + Descyption.Font = new Font("Comic Sans MS", 9.5F); + Descyption.Location = new Point(-1, -1); + Descyption.Name = "Descyption"; + Descyption.Size = new Size(70, 18); + Descyption.TabIndex = 15; + Descyption.Text = "Описание"; + // + // SupplierLabel + // + SupplierLabel.AutoSize = true; + SupplierLabel.Font = new Font("Comic Sans MS", 10F); + SupplierLabel.Location = new Point(162, 99); + SupplierLabel.Name = "SupplierLabel"; + SupplierLabel.Size = new Size(119, 19); + SupplierLabel.TabIndex = 17; + SupplierLabel.Text = "Производитель:"; + // + // ManufacturerLabel + // + ManufacturerLabel.AutoSize = true; + ManufacturerLabel.Font = new Font("Comic Sans MS", 10F); + ManufacturerLabel.Location = new Point(162, 118); + ManufacturerLabel.Name = "ManufacturerLabel"; + ManufacturerLabel.Size = new Size(89, 19); + ManufacturerLabel.TabIndex = 16; + ManufacturerLabel.Text = "Поставщик:"; + // + // label10 + // + label10.AutoSize = true; + label10.Font = new Font("Comic Sans MS", 26.25F, FontStyle.Regular, GraphicsUnit.Point, 204); + label10.Location = new Point(67, 9); + label10.Name = "label10"; + label10.Size = new Size(684, 49); + label10.TabIndex = 32; + label10.Text = "ГЛАВНАЯ ФОРМА АДМИНИСТРАТОРА"; + // + // button3 + // + button3.BackColor = Color.Red; + button3.Font = new Font("Comic Sans MS", 9F, FontStyle.Regular, GraphicsUnit.Point, 204); + button3.Location = new Point(701, 504); + button3.Name = "button3"; + button3.Size = new Size(75, 23); + button3.TabIndex = 37; + button3.Text = "Назад"; + button3.UseVisualStyleBackColor = false; + button3.Click += button3_Click; + // + // AdmMainForm + // + AutoScaleDimensions = new SizeF(7F, 15F); + AutoScaleMode = AutoScaleMode.Font; + BackColor = Color.FromArgb(192, 237, 215); + ClientSize = new Size(800, 539); + Controls.Add(button3); + Controls.Add(label10); + Controls.Add(panel1); + Controls.Add(ExitButton); + Controls.Add(button1); + Controls.Add(labelFIO); + Controls.Add(delete); + Controls.Add(button2); + Controls.Add(textBoxSearch); + Controls.Add(comboBoxFilter); + Controls.Add(comboBoxSort); + Controls.Add(dataGridViewProduct); + FormBorderStyle = FormBorderStyle.None; + Name = "AdmMainForm"; + StartPosition = FormStartPosition.CenterScreen; + Text = "AdmMainForm"; + Load += AdmMainForm_Load; + ((System.ComponentModel.ISupportInitialize)dataGridViewProduct).EndInit(); + panel1.ResumeLayout(false); + panel1.PerformLayout(); + panel2.ResumeLayout(false); + panel2.PerformLayout(); + ((System.ComponentModel.ISupportInitialize)pictureBox1).EndInit(); + panel3.ResumeLayout(false); + panel3.PerformLayout(); + ResumeLayout(false); + PerformLayout(); + } + + #endregion + + private DataGridView dataGridViewProduct; + private Label NameLabel; + private Label CategoryLabel; + private ComboBox comboBoxSort; + private ComboBox comboBoxFilter; + private TextBox textBoxSearch; + private Button button1; + private Button button2; + private Button delete; + private Label labelFIO; + private Button ExitButton; + private Panel panel1; + private Label Descyption; + private Panel panel2; + private Label SupplierLabel; + private Label ManufacturerLabel; + private Label CountLabel; + private Label PriceLabel; + private Panel panel3; + private PictureBox pictureBox1; + private Label label10; + private Button button3; + } +} \ No newline at end of file diff --git a/WinFormsApp1/AdmMainForm.cs b/WinFormsApp1/AdmMainForm.cs new file mode 100644 index 0000000..1969de3 --- /dev/null +++ b/WinFormsApp1/AdmMainForm.cs @@ -0,0 +1,290 @@ +using MySql.Data.MySqlClient; +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 WinFormsApp1; + +namespace WinFormsApp1 +{ + public partial class AdmMainForm : Form + { + public AdmMainForm() + { + InitializeComponent(); + LoadProdData(); + LoadSortOptions(); + LoadFilterOptions(); + } + private MySqlDataAdapter dataAdapter; + private DataTable prodTable; + private BindingSource bindingSource = new BindingSource(); + private void LoadProdData() + { + try + { + DB db = new DB(); + using (MySqlConnection connection = db.getConnection()) + { + connection.Open(); + string query = "SELECT idProducts, Article AS `Артикул`, ProductName AS `название товара`, CategoryName AS `Категория`, ProductDescryption AS `Описание`, ManufacturerName AS `Производитель`, SupplierName AS `Поставщик`, Price AS `Цена`, Discount AS `Возможная скидка`, QuantityStock AS `Количество на складе`, UnitTypeName AS `Единица измерения` FROM Products LEFT JOIN Category ON Products.Category_id = Category.idCategory JOIN Manufacturer ON Products.Manufacturer_id = Manufacturer.idManufacturer JOIN Supplier ON Products.Supplier_id = Supplier.idSupplier JOIN UnitType ON Products.UnitType_id = UnitType.idUnitType"; + + dataAdapter = new MySqlDataAdapter(query, connection); + prodTable = new DataTable(); + dataAdapter.Fill(prodTable); + dataGridViewProduct.RowTemplate.Height = 60; + bindingSource.DataSource = prodTable; + dataGridViewProduct.DataSource = bindingSource; + + + } + } + catch (MySqlException ex) + { + MessageBox.Show("Ошибка при подключении к базе данных или выполнении запроса: " + ex.Message); + } + catch (Exception ex) + { + MessageBox.Show("Произошла общая ошибка: " + ex.Message); + } + } + private void dataGridViewProd_Click(object sender, EventArgs e) + { + CategoryLabel.Text = dataGridViewProduct.CurrentRow.Cells[3].Value.ToString(); + NameLabel.Text = dataGridViewProduct.CurrentRow.Cells[2].Value.ToString(); + Descyption.Text = dataGridViewProduct.CurrentRow.Cells[4].Value.ToString(); + PriceLabel.Text = dataGridViewProduct.CurrentRow.Cells[7].Value.ToString(); + CountLabel.Text = dataGridViewProduct.CurrentRow.Cells[9].Value.ToString(); + ManufacturerLabel.Text = dataGridViewProduct.CurrentRow.Cells[5].Value.ToString(); + SupplierLabel.Text = dataGridViewProduct.CurrentRow.Cells[6].Value.ToString(); + } + private void LoadSortOptions() + { + comboBoxSort.Items.Add("По умолчанию"); + comboBoxSort.Items.Add("Цена (возрастающая)"); + comboBoxSort.Items.Add("Цена (убывающая)"); + comboBoxSort.SelectedIndex = 0; + } + + private void comboBoxSort_SelectedIndexChanged(object sender, EventArgs e) + { + string sortOption = comboBoxSort.SelectedItem.ToString(); + + switch (sortOption) + { + case "По умолчанию": + bindingSource.Sort = ""; + break; + case "Цена (возрастающая)": + bindingSource.Sort = "Цена ASC"; + break; + case "Цена (убывающая)": + bindingSource.Sort = "Цена DESC"; + break; + } + } + private void LoadFilterOptions() + { + comboBoxFilter.Items.Add("Все производители"); + comboBoxFilter.Items.Add("Adidas"); + comboBoxFilter.Items.Add("Barbell"); + comboBoxFilter.Items.Add("Demix"); + comboBoxFilter.Items.Add("Deuter"); + comboBoxFilter.Items.Add("Everlast"); + comboBoxFilter.Items.Add("Fischer"); + comboBoxFilter.Items.Add("Head"); + comboBoxFilter.Items.Add("Joss"); + comboBoxFilter.Items.Add("Kettler"); + comboBoxFilter.Items.Add("Mikasa"); + comboBoxFilter.Items.Add("Nike"); + comboBoxFilter.Items.Add("Nordway"); + comboBoxFilter.Items.Add("Outventure"); + comboBoxFilter.Items.Add("Puma"); + comboBoxFilter.Items.Add("Reebok"); + comboBoxSort.SelectedIndex = 0; + } + private void comboBoxFilter_SelectedIndexChanged(object sender, EventArgs e) + { + string filterOption = comboBoxFilter.SelectedItem.ToString().Trim(); + switch (filterOption) + { + case "Все производители": + bindingSource.Filter = ""; + break; + + case "Adidas": + bindingSource.Filter = "[Производитель] = 'Adidas'"; + break; + + case "Barbell": + bindingSource.Filter = "[Производитель] = 'Barbell'"; + break; + + case "Demix": + bindingSource.Filter = "[Производитель] = 'Demix'"; + break; + + case "Deuter": + bindingSource.Filter = "[Производитель] = 'Deuter'"; + break; + + case "Everlast": + bindingSource.Filter = "[Производитель] = 'Everlast'"; + break; + + case "Fischer": + bindingSource.Filter = "[Производитель] = 'Fischer'"; + break; + + case "Head": + bindingSource.Filter = "[Производитель] = 'Head'"; + break; + + case "Joss": + bindingSource.Filter = "[Производитель] = 'Joss'"; + break; + + case "Kettler": + bindingSource.Filter = "[Производитель] = 'Kettler'"; + break; + + case "Mikasa": + bindingSource.Filter = "[Производитель] = 'Mikasa'"; + break; + + case "Nike": + bindingSource.Filter = "[Производитель] = 'Nike'"; + break; + + case "Nordway": + bindingSource.Filter = "[Производитель] = 'Nordway'"; + break; + + case "Outventure": + bindingSource.Filter = "[Производитель] = 'Outventure'"; + break; + + case "Puma": + bindingSource.Filter = "[Производитель] = 'Puma'"; + break; + + case "Reebok": + bindingSource.Filter = "[Производитель] = 'Reebok'"; + break; + } + } + private void textBoxSearch_TextChanged(object sender, EventArgs e) + { + var value = textBoxSearch.Text.Trim().Replace("'", "''"); + + bindingSource.Filter = string.IsNullOrWhiteSpace(value) + ? "" + : $"[Артикул] LIKE '%{value}%' OR " + + $"[Производитель] LIKE '%{value}%' OR " + + $"[Поставщик] LIKE '%{value}%' OR " + + $"[Категория] LIKE '%{value}%' OR " + + $"Convert([Цена], 'System.String') LIKE '%{value}%' OR " + + $"Convert([Возможная скидка], 'System.String') LIKE '%{value}%'"; + } + + private void button1_Click(object sender, EventArgs e) + { + this.Hide(); + AddForm adm = new AddForm(); + adm.Show(); + } + private void button2_Click(object sender, EventArgs e) + { + if (dataGridViewProduct.SelectedRows.Count > 0) + { + string articleToEdit = Convert.ToString(dataGridViewProduct.SelectedRows[0].Cells["idProducts"].Value); + + this.Hide(); + + Reduct2 editProductForm = new Reduct2(articleToEdit); + + DialogResult result = editProductForm.ShowDialog(); + + + if (result == DialogResult.OK) + { + LoadProdData(); + } + } + else + { + MessageBox.Show("Пожалуйста, выберите строку для редактирования."); + } + } + private void btnDelete_Click(object sender, EventArgs e) + { + if (dataGridViewProduct.SelectedRows.Count > 0) + { + int rowIndex = dataGridViewProduct.SelectedRows[0].Index; + int idToDelete = Convert.ToInt32(dataGridViewProduct.SelectedRows[0].Cells["idProducts"].Value); + DeleteData(idToDelete); + } + else + { + MessageBox.Show("Пожалуйста, выберите строку для удаления."); + } + } + private void DeleteData(int idToDelete) + { + try + { + DB db = new DB(); + using (MySqlConnection connection = db.getConnection()) + { + connection.Open(); + string query = "DELETE FROM Products WHERE idProducts = @id"; + using (MySqlCommand command = new MySqlCommand(query, connection)) + { + command.Parameters.AddWithValue("@id", idToDelete); + + int rowsAffected = command.ExecuteNonQuery(); + + if (rowsAffected > 0) + { + MessageBox.Show("Запись успешно удалена."); + LoadProdData(); + } + else + { + MessageBox.Show("Не удалось удалить запись."); + } + } + } + } + catch (MySqlException ex) when (ex.Number == 1451) + { + MessageBox.Show("Невозможно удалить товар который находится в заказе."); + } + catch (MySqlException ex) + { + MessageBox.Show("Произошла общая ошибка при удалении: " + ex.Message); + } + } + + private void ExitButton_Click(object sender, EventArgs e) + { + Application.Exit(); + } + private void AdmMainForm_Load(object sender, EventArgs e) + { + labelFIO.Text = loginForm.FIO; + } + + private void button3_Click(object sender, EventArgs e) + { + this.Hide(); + loginForm lf = new loginForm(); + lf.Show(); + } + } +} \ No newline at end of file diff --git a/WinFormsApp1/AdmMainForm.resx b/WinFormsApp1/AdmMainForm.resx new file mode 100644 index 0000000..8b2ff64 --- /dev/null +++ b/WinFormsApp1/AdmMainForm.resx @@ -0,0 +1,120 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + text/microsoft-resx + + + 2.0 + + + System.Resources.ResXResourceReader, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + \ No newline at end of file diff --git a/WinFormsApp1/AdmOrderForm.Designer.cs b/WinFormsApp1/AdmOrderForm.Designer.cs new file mode 100644 index 0000000..fb7c42a --- /dev/null +++ b/WinFormsApp1/AdmOrderForm.Designer.cs @@ -0,0 +1,110 @@ +namespace WinFormsApp1 +{ + partial class AdmOrderForm + { + /// + /// Required designer variable. + /// + private System.ComponentModel.IContainer components = null; + + /// + /// Clean up any resources being used. + /// + /// true if managed resources should be disposed; otherwise, false. + protected override void Dispose(bool disposing) + { + if (disposing && (components != null)) + { + components.Dispose(); + } + base.Dispose(disposing); + } + + #region Windows Form Designer generated code + + /// + /// Required method for Designer support - do not modify + /// the contents of this method with the code editor. + /// + private void InitializeComponent() + { + button1 = new Button(); + label10 = new Label(); + dataGridViewProduct = new DataGridView(); + ExitButton = new Button(); + ((System.ComponentModel.ISupportInitialize)dataGridViewProduct).BeginInit(); + SuspendLayout(); + // + // button1 + // + button1.BackColor = Color.Red; + button1.Font = new Font("Comic Sans MS", 9F, FontStyle.Regular, GraphicsUnit.Point, 204); + button1.Location = new Point(713, 415); + button1.Name = "button1"; + button1.Size = new Size(75, 23); + button1.TabIndex = 37; + button1.Text = "Назад"; + button1.UseVisualStyleBackColor = false; + button1.Click += button1_Click; + // + // label10 + // + label10.AutoSize = true; + label10.Font = new Font("Comic Sans MS", 26.25F, FontStyle.Regular, GraphicsUnit.Point, 204); + label10.Location = new Point(62, 9); + label10.Name = "label10"; + label10.Size = new Size(679, 49); + label10.TabIndex = 39; + label10.Text = "ФОРМА ЗАКАЗОВ АДМИНИСТРАТОРА"; + // + // dataGridViewProduct + // + dataGridViewProduct.AllowUserToAddRows = false; + dataGridViewProduct.AllowUserToDeleteRows = false; + dataGridViewProduct.AllowUserToResizeColumns = false; + dataGridViewProduct.AllowUserToResizeRows = false; + dataGridViewProduct.AutoSizeColumnsMode = DataGridViewAutoSizeColumnsMode.AllCells; + dataGridViewProduct.AutoSizeRowsMode = DataGridViewAutoSizeRowsMode.DisplayedCells; + dataGridViewProduct.ColumnHeadersHeightSizeMode = DataGridViewColumnHeadersHeightSizeMode.AutoSize; + dataGridViewProduct.Location = new Point(12, 84); + dataGridViewProduct.Name = "dataGridViewProduct"; + dataGridViewProduct.Size = new Size(776, 308); + dataGridViewProduct.TabIndex = 38; + // + // ExitButton + // + ExitButton.BackColor = Color.Red; + ExitButton.Location = new Point(758, 9); + ExitButton.Name = "ExitButton"; + ExitButton.Size = new Size(30, 27); + ExitButton.TabIndex = 40; + ExitButton.Text = "X"; + ExitButton.UseVisualStyleBackColor = false; + ExitButton.Click += ExitButton_Click; + // + // AdmOrderForm + // + AutoScaleDimensions = new SizeF(7F, 15F); + AutoScaleMode = AutoScaleMode.Font; + BackColor = Color.FromArgb(192, 237, 215); + ClientSize = new Size(800, 450); + Controls.Add(ExitButton); + Controls.Add(label10); + Controls.Add(dataGridViewProduct); + Controls.Add(button1); + FormBorderStyle = FormBorderStyle.None; + Name = "AdmOrderForm"; + Text = "AdmOrderForm"; + ((System.ComponentModel.ISupportInitialize)dataGridViewProduct).EndInit(); + ResumeLayout(false); + PerformLayout(); + } + + #endregion + + private Button button1; + private Label label10; + private DataGridView dataGridViewProduct; + private Button ExitButton; + } +} \ No newline at end of file diff --git a/WinFormsApp1/AdmOrderForm.cs b/WinFormsApp1/AdmOrderForm.cs new file mode 100644 index 0000000..a3af8e7 --- /dev/null +++ b/WinFormsApp1/AdmOrderForm.cs @@ -0,0 +1,32 @@ +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 WinFormsApp1 +{ + public partial class AdmOrderForm : Form + { + public AdmOrderForm() + { + InitializeComponent(); + } + + private void button1_Click(object sender, EventArgs e) + { + this.Hide(); + AdmMainForm af = new AdmMainForm(); + af.Show(); + } + + private void ExitButton_Click(object sender, EventArgs e) + { + Application.Exit(); + } + } +} diff --git a/WinFormsApp1/AdmOrderForm.resx b/WinFormsApp1/AdmOrderForm.resx new file mode 100644 index 0000000..8b2ff64 --- /dev/null +++ b/WinFormsApp1/AdmOrderForm.resx @@ -0,0 +1,120 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + text/microsoft-resx + + + 2.0 + + + System.Resources.ResXResourceReader, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + \ No newline at end of file diff --git a/WinFormsApp1/DB.cs b/WinFormsApp1/DB.cs new file mode 100644 index 0000000..a2b741e --- /dev/null +++ b/WinFormsApp1/DB.cs @@ -0,0 +1,29 @@ +using System; + using System.Collections.Generic; + using System.Linq; + using System.Text; + using System.Threading.Tasks; + using MySql.Data.MySqlClient; + + namespace WinFormsApp1 + { + internal class DB + { + MySqlConnection connection = new MySqlConnection("server=85.239.57.125;port=3306;username=ISP41_Merkylov;password=ISP41_Merkylov;database=Merkylov_Sportmag"); + public void openConnection() + { + if (connection.State == System.Data.ConnectionState.Closed) + connection.Open(); + } + public void closeConnection() + { + if (connection.State == System.Data.ConnectionState.Open) + connection.Close(); + } + public MySqlConnection getConnection() + { + return connection; + } + } + } + \ No newline at end of file diff --git a/WinFormsApp1/GuestForm.Designer.cs b/WinFormsApp1/GuestForm.Designer.cs new file mode 100644 index 0000000..9444fc7 --- /dev/null +++ b/WinFormsApp1/GuestForm.Designer.cs @@ -0,0 +1,251 @@ +namespace WinFormsApp1 +{ + partial class GuestForm + { + /// + /// Required designer variable. + /// + private System.ComponentModel.IContainer components = null; + + /// + /// Clean up any resources being used. + /// + /// true if managed resources should be disposed; otherwise, false. + protected override void Dispose(bool disposing) + { + if (disposing && (components != null)) + { + components.Dispose(); + } + base.Dispose(disposing); + } + + #region Windows Form Designer generated code + + /// + /// Required method for Designer support - do not modify + /// the contents of this method with the code editor. + /// + private void InitializeComponent() + { + ExitButton = new Button(); + dataGridViewGuest = new DataGridView(); + panel1 = new Panel(); + panel2 = new Panel(); + CountLabel = new Label(); + PriceLabel = new Label(); + pictureBox1 = new PictureBox(); + panel3 = new Panel(); + Descyption = new Label(); + SupplierLabel = new Label(); + ManufacturerLabel = new Label(); + NameLabel = new Label(); + CategoryLabel = new Label(); + label10 = new Label(); + button1 = new Button(); + ((System.ComponentModel.ISupportInitialize)dataGridViewGuest).BeginInit(); + panel1.SuspendLayout(); + panel2.SuspendLayout(); + ((System.ComponentModel.ISupportInitialize)pictureBox1).BeginInit(); + panel3.SuspendLayout(); + SuspendLayout(); + // + // ExitButton + // + ExitButton.BackColor = Color.Red; + ExitButton.Location = new Point(758, 12); + ExitButton.Name = "ExitButton"; + ExitButton.Size = new Size(30, 27); + ExitButton.TabIndex = 0; + ExitButton.Text = "X"; + ExitButton.UseVisualStyleBackColor = false; + ExitButton.Click += ExitButton_Click; + // + // dataGridViewGuest + // + dataGridViewGuest.ColumnHeadersHeightSizeMode = DataGridViewColumnHeadersHeightSizeMode.AutoSize; + dataGridViewGuest.Location = new Point(91, 71); + dataGridViewGuest.Name = "dataGridViewGuest"; + dataGridViewGuest.Size = new Size(643, 259); + dataGridViewGuest.TabIndex = 1; + dataGridViewGuest.Click += dataGridViewGuest_Click; + // + // panel1 + // + panel1.BorderStyle = BorderStyle.FixedSingle; + panel1.Controls.Add(panel2); + panel1.Controls.Add(pictureBox1); + panel1.Controls.Add(panel3); + panel1.Controls.Add(SupplierLabel); + panel1.Controls.Add(ManufacturerLabel); + panel1.Controls.Add(NameLabel); + panel1.Controls.Add(CategoryLabel); + panel1.Location = new Point(107, 347); + panel1.Name = "panel1"; + panel1.Size = new Size(609, 150); + panel1.TabIndex = 15; + // + // panel2 + // + panel2.BorderStyle = BorderStyle.FixedSingle; + panel2.Controls.Add(CountLabel); + panel2.Controls.Add(PriceLabel); + panel2.Location = new Point(444, -1); + panel2.Name = "panel2"; + panel2.Size = new Size(164, 150); + panel2.TabIndex = 15; + // + // CountLabel + // + CountLabel.AutoSize = true; + CountLabel.Font = new Font("Comic Sans MS", 9.75F, FontStyle.Regular, GraphicsUnit.Point, 204); + CountLabel.Location = new Point(44, 44); + CountLabel.Name = "CountLabel"; + CountLabel.Size = new Size(82, 18); + CountLabel.TabIndex = 1; + CountLabel.Text = "Количество"; + // + // PriceLabel + // + PriceLabel.AutoSize = true; + PriceLabel.Font = new Font("Comic Sans MS", 12F, FontStyle.Regular, GraphicsUnit.Point, 204); + PriceLabel.Location = new Point(35, 10); + PriceLabel.Name = "PriceLabel"; + PriceLabel.Size = new Size(0, 23); + PriceLabel.TabIndex = 0; + // + // pictureBox1 + // + pictureBox1.BorderStyle = BorderStyle.FixedSingle; + pictureBox1.Location = new Point(19, 10); + pictureBox1.Name = "pictureBox1"; + pictureBox1.Size = new Size(137, 127); + pictureBox1.TabIndex = 19; + pictureBox1.TabStop = false; + // + // panel3 + // + panel3.BorderStyle = BorderStyle.FixedSingle; + panel3.Controls.Add(Descyption); + panel3.Location = new Point(162, 55); + panel3.Name = "panel3"; + panel3.Size = new Size(276, 44); + panel3.TabIndex = 18; + // + // Descyption + // + Descyption.AutoSize = true; + Descyption.Font = new Font("Comic Sans MS", 9.5F); + Descyption.Location = new Point(-1, -1); + Descyption.Name = "Descyption"; + Descyption.Size = new Size(70, 18); + Descyption.TabIndex = 15; + Descyption.Text = "Описание"; + // + // SupplierLabel + // + SupplierLabel.AutoSize = true; + SupplierLabel.Font = new Font("Comic Sans MS", 10F); + SupplierLabel.Location = new Point(162, 99); + SupplierLabel.Name = "SupplierLabel"; + SupplierLabel.Size = new Size(119, 19); + SupplierLabel.TabIndex = 17; + SupplierLabel.Text = "Производитель:"; + // + // ManufacturerLabel + // + ManufacturerLabel.AutoSize = true; + ManufacturerLabel.Font = new Font("Comic Sans MS", 10F); + ManufacturerLabel.Location = new Point(162, 118); + ManufacturerLabel.Name = "ManufacturerLabel"; + ManufacturerLabel.Size = new Size(89, 19); + ManufacturerLabel.TabIndex = 16; + ManufacturerLabel.Text = "Поставщик:"; + // + // NameLabel + // + NameLabel.AutoSize = true; + NameLabel.Font = new Font("Comic Sans MS", 15F, FontStyle.Bold); + NameLabel.Location = new Point(162, -1); + NameLabel.Name = "NameLabel"; + NameLabel.Size = new Size(157, 29); + NameLabel.TabIndex = 4; + NameLabel.Text = "Наименование"; + // + // CategoryLabel + // + CategoryLabel.AutoSize = true; + CategoryLabel.Font = new Font("Comic Sans MS", 13F); + CategoryLabel.Location = new Point(162, 28); + CategoryLabel.Name = "CategoryLabel"; + CategoryLabel.Size = new Size(97, 24); + CategoryLabel.TabIndex = 5; + CategoryLabel.Text = "Категория"; + // + // label10 + // + label10.AutoSize = true; + label10.Font = new Font("Comic Sans MS", 26.25F, FontStyle.Regular, GraphicsUnit.Point, 204); + label10.Location = new Point(160, 9); + label10.Name = "label10"; + label10.Size = new Size(524, 49); + label10.TabIndex = 32; + label10.Text = "ГЛАВНАЯ ГОСТЕВАЯ ФОРМА"; + // + // button1 + // + button1.BackColor = Color.Red; + button1.Font = new Font("Comic Sans MS", 9F, FontStyle.Regular, GraphicsUnit.Point, 204); + button1.Location = new Point(713, 503); + button1.Name = "button1"; + button1.Size = new Size(75, 23); + button1.TabIndex = 37; + button1.Text = "Назад"; + button1.UseVisualStyleBackColor = false; + button1.Click += button1_Click; + // + // GuestForm + // + AutoScaleDimensions = new SizeF(7F, 15F); + AutoScaleMode = AutoScaleMode.Font; + BackColor = Color.FromArgb(192, 237, 215); + ClientSize = new Size(800, 539); + Controls.Add(button1); + Controls.Add(label10); + Controls.Add(panel1); + Controls.Add(dataGridViewGuest); + Controls.Add(ExitButton); + FormBorderStyle = FormBorderStyle.None; + Name = "GuestForm"; + Text = "GuestForm"; + ((System.ComponentModel.ISupportInitialize)dataGridViewGuest).EndInit(); + panel1.ResumeLayout(false); + panel1.PerformLayout(); + panel2.ResumeLayout(false); + panel2.PerformLayout(); + ((System.ComponentModel.ISupportInitialize)pictureBox1).EndInit(); + panel3.ResumeLayout(false); + panel3.PerformLayout(); + ResumeLayout(false); + PerformLayout(); + } + + #endregion + + private Button ExitButton; + private DataGridView dataGridViewGuest; + private Panel panel1; + private Panel panel2; + private Label CountLabel; + private Label PriceLabel; + private PictureBox pictureBox1; + private Panel panel3; + private Label Descyption; + private Label SupplierLabel; + private Label ManufacturerLabel; + private Label NameLabel; + private Label CategoryLabel; + private Label label10; + private Button button1; + } +} \ No newline at end of file diff --git a/WinFormsApp1/GuestForm.cs b/WinFormsApp1/GuestForm.cs new file mode 100644 index 0000000..5e8688f --- /dev/null +++ b/WinFormsApp1/GuestForm.cs @@ -0,0 +1,76 @@ +using MySql.Data.MySqlClient; +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 WinFormsApp1 +{ + public partial class GuestForm : Form + { + public GuestForm() + { + InitializeComponent(); + LoadGuestData(); + } + + private void ExitButton_Click(object sender, EventArgs e) + { + Application.Exit(); + } + + private MySqlDataAdapter dataAdapter; + private DataTable prodTable; + private BindingSource bindingSource = new BindingSource(); + private void LoadGuestData() + { + try + { + DB db = new DB(); + using (MySqlConnection connection = db.getConnection()) + { + connection.Open(); + string query = "SELECT idProducts, Article AS `Артикул`, ProductName AS `название товара`, CategoryName AS `Название категории`, ProductDescryption AS `Описание`, ManufacturerName AS `Производитель`, SupplierName AS `Поставщик`, Price AS `Цена`, Discount AS `Процент скидки`, QuantityStock AS `Количество на складе`, UnitTypeName AS `Единица измерения` FROM Products LEFT JOIN Category ON Products.Category_id = Category.idCategory JOIN Manufacturer ON Products.Manufacturer_id = Manufacturer.idManufacturer JOIN Supplier ON Products.Supplier_id = Supplier.idSupplier JOIN UnitType ON Products.UnitType_id = UnitType.idUnitType"; + + dataAdapter = new MySqlDataAdapter(query, connection); + prodTable = new DataTable(); + dataAdapter.Fill(prodTable); + dataGridViewGuest.RowTemplate.Height = 60; + bindingSource.DataSource = prodTable; + dataGridViewGuest.DataSource = bindingSource; + + } + } + catch (MySqlException ex) + { + MessageBox.Show("Ошибка при подключении к базе данных или выполнении запроса: " + ex.Message); + } + catch (Exception ex) + { + MessageBox.Show("Произошла общая ошибка: " + ex.Message); + } + } + private void dataGridViewGuest_Click(object sender, EventArgs e) + { + CategoryLabel.Text = dataGridViewGuest.CurrentRow.Cells[3].Value.ToString(); + NameLabel.Text = dataGridViewGuest.CurrentRow.Cells[2].Value.ToString(); + Descyption.Text = dataGridViewGuest.CurrentRow.Cells[4].Value.ToString(); + PriceLabel.Text = dataGridViewGuest.CurrentRow.Cells[7].Value.ToString(); + CountLabel.Text = dataGridViewGuest.CurrentRow.Cells[9].Value.ToString(); + ManufacturerLabel.Text = dataGridViewGuest.CurrentRow.Cells[5].Value.ToString(); + SupplierLabel.Text = dataGridViewGuest.CurrentRow.Cells[6].Value.ToString(); + } + + private void button1_Click(object sender, EventArgs e) + { + this.Hide(); + loginForm loginForm = new loginForm(); + loginForm.Show(); + } + } +} diff --git a/WinFormsApp1/GuestForm.resx b/WinFormsApp1/GuestForm.resx new file mode 100644 index 0000000..8b2ff64 --- /dev/null +++ b/WinFormsApp1/GuestForm.resx @@ -0,0 +1,120 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + text/microsoft-resx + + + 2.0 + + + System.Resources.ResXResourceReader, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + \ No newline at end of file diff --git a/WinFormsApp1/LoginForm.Designer.cs b/WinFormsApp1/LoginForm.Designer.cs new file mode 100644 index 0000000..e9786f5 --- /dev/null +++ b/WinFormsApp1/LoginForm.Designer.cs @@ -0,0 +1,129 @@ +namespace WinFormsApp1 +{ + partial class loginForm + { + /// + /// Required designer variable. + /// + private System.ComponentModel.IContainer components = null; + + /// + /// Clean up any resources being used. + /// + /// true if managed resources should be disposed; otherwise, false. + protected override void Dispose(bool disposing) + { + if (disposing && (components != null)) + { + components.Dispose(); + } + base.Dispose(disposing); + } + + #region Windows Form Designer generated code + + /// + /// Required method for Designer support - do not modify + /// the contents of this method with the code editor. + /// + private void InitializeComponent() + { + passField = new TextBox(); + loginField = new TextBox(); + button1 = new Button(); + button2 = new Button(); + button3 = new Button(); + label1 = new Label(); + SuspendLayout(); + // + // passField + // + passField.BackColor = Color.FromArgb(133, 242, 189); + passField.Font = new Font("Comic Sans MS", 9F); + passField.Location = new Point(158, 229); + passField.Name = "passField"; + passField.Size = new Size(170, 24); + passField.TabIndex = 0; + // + // loginField + // + loginField.BackColor = Color.FromArgb(133, 242, 189); + loginField.Font = new Font("Comic Sans MS", 9F, FontStyle.Regular, GraphicsUnit.Point, 204); + loginField.Location = new Point(158, 174); + loginField.Name = "loginField"; + loginField.Size = new Size(170, 24); + loginField.TabIndex = 1; + // + // button1 + // + button1.BackColor = Color.Red; + button1.Font = new Font("Comic Sans MS", 9F); + button1.Location = new Point(202, 271); + button1.Name = "button1"; + button1.Size = new Size(75, 23); + button1.TabIndex = 2; + button1.Text = "Войти"; + button1.UseVisualStyleBackColor = false; + button1.Click += ButtonLogin_Click; + // + // button2 + // + button2.Location = new Point(427, 12); + button2.Name = "button2"; + button2.Size = new Size(32, 23); + button2.TabIndex = 3; + button2.Text = "X"; + button2.UseVisualStyleBackColor = true; + button2.Click += button2_Click; + // + // button3 + // + button3.BackColor = Color.Red; + button3.Font = new Font("Comic Sans MS", 9F); + button3.Location = new Point(202, 375); + button3.Name = "button3"; + button3.Size = new Size(75, 23); + button3.TabIndex = 4; + button3.Text = "Гость"; + button3.UseVisualStyleBackColor = false; + button3.Click += button3_Click; + // + // label1 + // + label1.AutoSize = true; + label1.Font = new Font("Comic Sans MS", 18F, FontStyle.Regular, GraphicsUnit.Point, 204); + label1.Location = new Point(142, 23); + label1.Name = "label1"; + label1.Size = new Size(196, 33); + label1.TabIndex = 5; + label1.Text = "АВТОРИЗАЦИЯ"; + // + // loginForm + // + AutoScaleDimensions = new SizeF(7F, 15F); + AutoScaleMode = AutoScaleMode.Font; + BackColor = Color.FromArgb(192, 237, 215); + ClientSize = new Size(471, 433); + Controls.Add(label1); + Controls.Add(button3); + Controls.Add(button2); + Controls.Add(button1); + Controls.Add(loginField); + Controls.Add(passField); + FormBorderStyle = FormBorderStyle.None; + Name = "loginForm"; + Text = "LoginForm"; + ResumeLayout(false); + PerformLayout(); + } + + #endregion + + private TextBox passField; + private TextBox loginField; + private Button button1; + private Button button2; + private Button button3; + private Label label1; + } +} \ No newline at end of file diff --git a/WinFormsApp1/LoginForm.cs b/WinFormsApp1/LoginForm.cs new file mode 100644 index 0000000..7dada06 --- /dev/null +++ b/WinFormsApp1/LoginForm.cs @@ -0,0 +1,121 @@ +using MySql.Data.MySqlClient; +using System.Data; +using WinFormsApp1; + using MySql.Data.MySqlClient; + 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 WinFormsApp1; + + namespace WinFormsApp1 +{ + public partial class loginForm : Form + { + public loginForm() + { + InitializeComponent(); + } + public static string FIO { get; private set; } + + private void ButtonLogin_Click(object sender, EventArgs e) + { + string loginUser = loginField.Text; + string passUser = passField.Text; + + if (string.IsNullOrWhiteSpace(loginField.Text)) + { + MessageBox.Show("Введите логин.", "Информация", MessageBoxButtons.OK, MessageBoxIcon.Information); + return; + } + + if (string.IsNullOrWhiteSpace(passField.Text)) + { + MessageBox.Show("Введите пароль.", "Информация", MessageBoxButtons.OK, MessageBoxIcon.Information); + return; + } + + DB db = new DB(); + + using (MySqlConnection connection = db.getConnection()) + { + DataTable table = new DataTable(); + MySqlDataAdapter adapter = new MySqlDataAdapter(); + MySqlCommand command = new MySqlCommand("SELECT idClients, Login, FIO, Role_id FROM Clients WHERE Login = @uL AND Password = @uP", connection); + command.Parameters.Add("@uL", MySqlDbType.VarChar).Value = loginUser; + command.Parameters.Add("@uP", MySqlDbType.VarChar).Value = passUser; + adapter.SelectCommand = command; + + try + { + connection.Open(); + adapter.Fill(table); + + if (table.Rows.Count == 1) + { + string roleID = table.Rows[0]["Role_id"].ToString(); + string userLogin = table.Rows[0]["Login"].ToString(); + + FIO = Convert.ToString(table.Rows[0]["FIO"]); + + switch (roleID) + { + case "1": + MessageBox.Show("Авторизация успешна, добро пожаловать! Вы авторизовались под ролью: Admin"); + this.Hide(); + AdmMainForm adm = new AdmMainForm(); + adm.Show(); + break; + + case "2": + MessageBox.Show("Авторизация успешна, добро пожаловать! Вы авторизовались под ролью: Manager"); + this.Hide(); + ManagerMainForm usManager = new ManagerMainForm(); + usManager.Show(); + break; + + case "3": + MessageBox.Show("Авторизация успешна, добро пожаловать! Вы авторизовались под ролью: Authorized Client"); + this.Hide(); + UserForm usClient = new UserForm(); + usClient.Show(); + break; + default: + MessageBox.Show("У вашего пользователя указана неизвестная роль: " + roleID); + break; + } + } + else + { + MessageBox.Show("Введен неверный логин или пароль", "Ошибка авторизации", MessageBoxButtons.OK, MessageBoxIcon.Warning); + } + } + catch (MySqlException ex) + { + MessageBox.Show("Ошибка подключения к базе данных или выполнения запроса: " + ex.Message, "Ошибка БД", MessageBoxButtons.OK, MessageBoxIcon.Error); + } + finally + { + db.closeConnection(); + } + } + } + + private void button2_Click(object sender, EventArgs e) + { + Application.Exit(); + } + + private void button3_Click(object sender, EventArgs e) + { + this.Hide(); + GuestForm guest = new GuestForm(); + guest.Show(); + } + } +} \ No newline at end of file diff --git a/WinFormsApp1/LoginForm.resx b/WinFormsApp1/LoginForm.resx new file mode 100644 index 0000000..8b2ff64 --- /dev/null +++ b/WinFormsApp1/LoginForm.resx @@ -0,0 +1,120 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + text/microsoft-resx + + + 2.0 + + + System.Resources.ResXResourceReader, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + \ No newline at end of file diff --git a/WinFormsApp1/ManagerMainForm.Designer.cs b/WinFormsApp1/ManagerMainForm.Designer.cs new file mode 100644 index 0000000..01006c4 --- /dev/null +++ b/WinFormsApp1/ManagerMainForm.Designer.cs @@ -0,0 +1,328 @@ +namespace WinFormsApp1 +{ + partial class ManagerMainForm + { + /// + /// Required designer variable. + /// + private System.ComponentModel.IContainer components = null; + + /// + /// Clean up any resources being used. + /// + /// true if managed resources should be disposed; otherwise, false. + protected override void Dispose(bool disposing) + { + if (disposing && (components != null)) + { + components.Dispose(); + } + base.Dispose(disposing); + } + + #region Windows Form Designer generated code + + /// + /// Required method for Designer support - do not modify + /// the contents of this method with the code editor. + /// + private void InitializeComponent() + { + panel1 = new Panel(); + panel2 = new Panel(); + CountLabel = new Label(); + PriceLabel = new Label(); + pictureBox1 = new PictureBox(); + panel3 = new Panel(); + Descyption = new Label(); + SupplierLabel = new Label(); + ManufacturerLabel = new Label(); + NameLabel = new Label(); + CategoryLabel = new Label(); + ExitButton = new Button(); + labelFIO = new Label(); + textBoxSearch = new TextBox(); + comboBoxFilter = new ComboBox(); + comboBoxSort = new ComboBox(); + dataGridViewProduct = new DataGridView(); + Orders = new Button(); + label10 = new Label(); + button1 = new Button(); + panel1.SuspendLayout(); + panel2.SuspendLayout(); + ((System.ComponentModel.ISupportInitialize)pictureBox1).BeginInit(); + panel3.SuspendLayout(); + ((System.ComponentModel.ISupportInitialize)dataGridViewProduct).BeginInit(); + SuspendLayout(); + // + // panel1 + // + panel1.BackColor = Color.FromArgb(133, 242, 189); + panel1.BorderStyle = BorderStyle.FixedSingle; + panel1.Controls.Add(panel2); + panel1.Controls.Add(pictureBox1); + panel1.Controls.Add(panel3); + panel1.Controls.Add(SupplierLabel); + panel1.Controls.Add(ManufacturerLabel); + panel1.Controls.Add(NameLabel); + panel1.Controls.Add(CategoryLabel); + panel1.Location = new Point(81, 340); + panel1.Name = "panel1"; + panel1.Size = new Size(609, 150); + panel1.TabIndex = 24; + // + // panel2 + // + panel2.BorderStyle = BorderStyle.FixedSingle; + panel2.Controls.Add(CountLabel); + panel2.Controls.Add(PriceLabel); + panel2.Location = new Point(444, -1); + panel2.Name = "panel2"; + panel2.Size = new Size(164, 150); + panel2.TabIndex = 15; + // + // CountLabel + // + CountLabel.AutoSize = true; + CountLabel.Font = new Font("Comic Sans MS", 9.75F, FontStyle.Regular, GraphicsUnit.Point, 204); + CountLabel.Location = new Point(58, 43); + CountLabel.Name = "CountLabel"; + CountLabel.Size = new Size(82, 18); + CountLabel.TabIndex = 1; + CountLabel.Text = "Количество"; + // + // PriceLabel + // + PriceLabel.AutoSize = true; + PriceLabel.Font = new Font("Comic Sans MS", 12F, FontStyle.Regular, GraphicsUnit.Point, 204); + PriceLabel.Location = new Point(35, 10); + PriceLabel.Name = "PriceLabel"; + PriceLabel.Size = new Size(0, 23); + PriceLabel.TabIndex = 0; + // + // pictureBox1 + // + pictureBox1.BorderStyle = BorderStyle.FixedSingle; + pictureBox1.Location = new Point(19, 10); + pictureBox1.Name = "pictureBox1"; + pictureBox1.Size = new Size(137, 127); + pictureBox1.TabIndex = 19; + pictureBox1.TabStop = false; + // + // panel3 + // + panel3.BorderStyle = BorderStyle.FixedSingle; + panel3.Controls.Add(Descyption); + panel3.Location = new Point(162, 55); + panel3.Name = "panel3"; + panel3.Size = new Size(276, 44); + panel3.TabIndex = 18; + // + // Descyption + // + Descyption.AutoSize = true; + Descyption.Font = new Font("Comic Sans MS", 9.5F); + Descyption.Location = new Point(-1, -1); + Descyption.Name = "Descyption"; + Descyption.Size = new Size(70, 18); + Descyption.TabIndex = 15; + Descyption.Text = "Описание"; + // + // SupplierLabel + // + SupplierLabel.AutoSize = true; + SupplierLabel.Font = new Font("Comic Sans MS", 10F); + SupplierLabel.Location = new Point(162, 99); + SupplierLabel.Name = "SupplierLabel"; + SupplierLabel.Size = new Size(119, 19); + SupplierLabel.TabIndex = 17; + SupplierLabel.Text = "Производитель:"; + // + // ManufacturerLabel + // + ManufacturerLabel.AutoSize = true; + ManufacturerLabel.Font = new Font("Comic Sans MS", 10F); + ManufacturerLabel.Location = new Point(162, 118); + ManufacturerLabel.Name = "ManufacturerLabel"; + ManufacturerLabel.Size = new Size(89, 19); + ManufacturerLabel.TabIndex = 16; + ManufacturerLabel.Text = "Поставщик:"; + // + // NameLabel + // + NameLabel.AutoSize = true; + NameLabel.Font = new Font("Comic Sans MS", 15F, FontStyle.Bold); + NameLabel.Location = new Point(162, -1); + NameLabel.Name = "NameLabel"; + NameLabel.Size = new Size(157, 29); + NameLabel.TabIndex = 4; + NameLabel.Text = "Наименование"; + // + // CategoryLabel + // + CategoryLabel.AutoSize = true; + CategoryLabel.Font = new Font("Comic Sans MS", 13F); + CategoryLabel.Location = new Point(162, 28); + CategoryLabel.Name = "CategoryLabel"; + CategoryLabel.Size = new Size(97, 24); + CategoryLabel.TabIndex = 5; + CategoryLabel.Text = "Категория"; + // + // ExitButton + // + ExitButton.BackColor = Color.Red; + ExitButton.Location = new Point(766, 59); + ExitButton.Name = "ExitButton"; + ExitButton.Size = new Size(31, 26); + ExitButton.TabIndex = 23; + ExitButton.Text = "X"; + ExitButton.UseVisualStyleBackColor = false; + ExitButton.Click += button1_Click; + // + // labelFIO + // + labelFIO.AutoSize = true; + labelFIO.Font = new Font("Comic Sans MS", 9F); + labelFIO.Location = new Point(547, 64); + labelFIO.Name = "labelFIO"; + labelFIO.Size = new Size(35, 17); + labelFIO.TabIndex = 22; + labelFIO.Text = "ФИО"; + // + // textBoxSearch + // + textBoxSearch.BackColor = Color.FromArgb(133, 242, 189); + textBoxSearch.Font = new Font("Comic Sans MS", 9F); + textBoxSearch.Location = new Point(378, 60); + textBoxSearch.Name = "textBoxSearch"; + textBoxSearch.Size = new Size(141, 24); + textBoxSearch.TabIndex = 18; + textBoxSearch.TextChanged += textBoxSearch_TextChanged; + // + // comboBoxFilter + // + comboBoxFilter.BackColor = Color.FromArgb(133, 242, 189); + comboBoxFilter.Font = new Font("Comic Sans MS", 9F); + comboBoxFilter.FormattingEnabled = true; + comboBoxFilter.Location = new Point(200, 60); + comboBoxFilter.Name = "comboBoxFilter"; + comboBoxFilter.Size = new Size(121, 25); + comboBoxFilter.TabIndex = 17; + comboBoxFilter.SelectedIndexChanged += comboBoxFilter_SelectedIndexChanged; + // + // comboBoxSort + // + comboBoxSort.BackColor = Color.FromArgb(133, 242, 189); + comboBoxSort.Font = new Font("Comic Sans MS", 9F); + comboBoxSort.FormattingEnabled = true; + comboBoxSort.Location = new Point(12, 60); + comboBoxSort.Name = "comboBoxSort"; + comboBoxSort.Size = new Size(121, 25); + comboBoxSort.TabIndex = 16; + comboBoxSort.SelectedIndexChanged += comboBoxSort_SelectedIndexChanged; + // + // dataGridViewProduct + // + dataGridViewProduct.AllowUserToAddRows = false; + dataGridViewProduct.AllowUserToDeleteRows = false; + dataGridViewProduct.AllowUserToResizeColumns = false; + dataGridViewProduct.AllowUserToResizeRows = false; + dataGridViewProduct.AutoSizeColumnsMode = DataGridViewAutoSizeColumnsMode.AllCells; + dataGridViewProduct.AutoSizeRowsMode = DataGridViewAutoSizeRowsMode.DisplayedCells; + dataGridViewProduct.ColumnHeadersHeightSizeMode = DataGridViewColumnHeadersHeightSizeMode.AutoSize; + dataGridViewProduct.Location = new Point(12, 89); + dataGridViewProduct.Name = "dataGridViewProduct"; + dataGridViewProduct.Size = new Size(764, 245); + dataGridViewProduct.TabIndex = 15; + dataGridViewProduct.Click += dataGridViewProd_Click; + // + // Orders + // + Orders.BackColor = Color.Red; + Orders.Font = new Font("Comic Sans MS", 10F); + Orders.Location = new Point(701, 440); + Orders.Name = "Orders"; + Orders.Size = new Size(75, 23); + Orders.TabIndex = 25; + Orders.Text = "Заказы"; + Orders.UseVisualStyleBackColor = false; + Orders.Click += Orders_Click; + // + // label10 + // + label10.AutoSize = true; + label10.Font = new Font("Comic Sans MS", 26.25F, FontStyle.Regular, GraphicsUnit.Point, 204); + label10.Location = new Point(143, 8); + label10.Name = "label10"; + label10.Size = new Size(561, 49); + label10.TabIndex = 33; + label10.Text = "ГЛАВНАЯ ФОРМА МЕНЕДЖЕРА"; + // + // button1 + // + button1.BackColor = Color.Red; + button1.Font = new Font("Comic Sans MS", 9F, FontStyle.Regular, GraphicsUnit.Point, 204); + button1.Location = new Point(701, 469); + button1.Name = "button1"; + button1.Size = new Size(75, 23); + button1.TabIndex = 37; + button1.Text = "Назад"; + button1.UseVisualStyleBackColor = false; + button1.Click += button1_Click_1; + // + // ManagerMainForm + // + AutoScaleDimensions = new SizeF(7F, 15F); + AutoScaleMode = AutoScaleMode.Font; + BackColor = Color.FromArgb(192, 237, 215); + ClientSize = new Size(800, 503); + Controls.Add(button1); + Controls.Add(label10); + Controls.Add(Orders); + Controls.Add(panel1); + Controls.Add(ExitButton); + Controls.Add(labelFIO); + Controls.Add(textBoxSearch); + Controls.Add(comboBoxFilter); + Controls.Add(comboBoxSort); + Controls.Add(dataGridViewProduct); + FormBorderStyle = FormBorderStyle.None; + Name = "ManagerMainForm"; + Text = "ManagerMainForm"; + Load += ManagerMainForm_Load; + panel1.ResumeLayout(false); + panel1.PerformLayout(); + panel2.ResumeLayout(false); + panel2.PerformLayout(); + ((System.ComponentModel.ISupportInitialize)pictureBox1).EndInit(); + panel3.ResumeLayout(false); + panel3.PerformLayout(); + ((System.ComponentModel.ISupportInitialize)dataGridViewProduct).EndInit(); + ResumeLayout(false); + PerformLayout(); + } + + #endregion + + private Panel panel1; + private Panel panel2; + private Label CountLabel; + private Label PriceLabel; + private PictureBox pictureBox1; + private Panel panel3; + private Label Descyption; + private Label SupplierLabel; + private Label ManufacturerLabel; + private Label NameLabel; + private Label CategoryLabel; + private Button ExitButton; + private Label labelFIO; + private TextBox textBoxSearch; + private ComboBox comboBoxFilter; + private ComboBox comboBoxSort; + private DataGridView dataGridViewProduct; + private Button Orders; + private Label label10; + private Button button1; + } +} \ No newline at end of file diff --git a/WinFormsApp1/ManagerMainForm.cs b/WinFormsApp1/ManagerMainForm.cs new file mode 100644 index 0000000..caf80d1 --- /dev/null +++ b/WinFormsApp1/ManagerMainForm.cs @@ -0,0 +1,219 @@ +using MySql.Data.MySqlClient; +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 WinFormsApp1 +{ + public partial class ManagerMainForm : Form + { + public ManagerMainForm() + { + InitializeComponent(); + LoadProdData(); + LoadSortOptions(); + LoadFilterOptions(); + } + + private MySqlDataAdapter dataAdapter; + private DataTable prodTable; + private BindingSource bindingSource = new BindingSource(); + private void LoadProdData() + { + try + { + DB db = new DB(); + using (MySqlConnection connection = db.getConnection()) + { + connection.Open(); + string query = "SELECT idProducts, Article AS `Артикул`, ProductName AS `название товара`, CategoryName AS `Категория`, ProductDescryption AS `Описание`, ManufacturerName AS `Производитель`, SupplierName AS `Поставщик`, Price AS `Цена`, Discount AS `Возможная скидка`, QuantityStock AS `Количество на складе`, UnitTypeName AS `Единица измерения` FROM Products LEFT JOIN Category ON Products.Category_id = Category.idCategory JOIN Manufacturer ON Products.Manufacturer_id = Manufacturer.idManufacturer JOIN Supplier ON Products.Supplier_id = Supplier.idSupplier JOIN UnitType ON Products.UnitType_id = UnitType.idUnitType"; + + dataAdapter = new MySqlDataAdapter(query, connection); + prodTable = new DataTable(); + dataAdapter.Fill(prodTable); + dataGridViewProduct.RowTemplate.Height = 60; + bindingSource.DataSource = prodTable; + dataGridViewProduct.DataSource = bindingSource; + + + } + } + catch (MySqlException ex) + { + MessageBox.Show("Ошибка при подключении к базе данных или выполнении запроса: " + ex.Message); + } + catch (Exception ex) + { + MessageBox.Show("Произошла общая ошибка: " + ex.Message); + } + } + private void dataGridViewProd_Click(object sender, EventArgs e) + { + CategoryLabel.Text = dataGridViewProduct.CurrentRow.Cells[3].Value.ToString(); + NameLabel.Text = dataGridViewProduct.CurrentRow.Cells[2].Value.ToString(); + Descyption.Text = dataGridViewProduct.CurrentRow.Cells[4].Value.ToString(); + PriceLabel.Text = dataGridViewProduct.CurrentRow.Cells[7].Value.ToString(); + CountLabel.Text = dataGridViewProduct.CurrentRow.Cells[9].Value.ToString(); + ManufacturerLabel.Text = dataGridViewProduct.CurrentRow.Cells[5].Value.ToString(); + SupplierLabel.Text = dataGridViewProduct.CurrentRow.Cells[6].Value.ToString(); + } + private void LoadSortOptions() + { + comboBoxSort.Items.Add("По умолчанию"); + comboBoxSort.Items.Add("Цена (возрастающая)"); + comboBoxSort.Items.Add("Цена (убывающая)"); + comboBoxSort.SelectedIndex = 0; + } + + private void comboBoxSort_SelectedIndexChanged(object sender, EventArgs e) + { + string sortOption = comboBoxSort.SelectedItem.ToString(); + + switch (sortOption) + { + case "По умолчанию": + bindingSource.Sort = ""; + break; + case "Цена (возрастающая)": + bindingSource.Sort = "Цена ASC"; + break; + case "Цена (убывающая)": + bindingSource.Sort = "Цена DESC"; + break; + } + } + private void LoadFilterOptions() + { + comboBoxFilter.Items.Add("Все производители"); + comboBoxFilter.Items.Add("Adidas"); + comboBoxFilter.Items.Add("Barbell"); + comboBoxFilter.Items.Add("Demix"); + comboBoxFilter.Items.Add("Deuter"); + comboBoxFilter.Items.Add("Everlast"); + comboBoxFilter.Items.Add("Fischer"); + comboBoxFilter.Items.Add("Head"); + comboBoxFilter.Items.Add("Joss"); + comboBoxFilter.Items.Add("Kettler"); + comboBoxFilter.Items.Add("Mikasa"); + comboBoxFilter.Items.Add("Nike"); + comboBoxFilter.Items.Add("Nordway"); + comboBoxFilter.Items.Add("Outventure"); + comboBoxFilter.Items.Add("Puma"); + comboBoxFilter.Items.Add("Reebok"); + comboBoxSort.SelectedIndex = 0; + } + private void comboBoxFilter_SelectedIndexChanged(object sender, EventArgs e) + { + string filterOption = comboBoxFilter.SelectedItem.ToString().Trim(); + switch (filterOption) + { + case "Все производители": + bindingSource.Filter = ""; + break; + + case "Adidas": + bindingSource.Filter = "[Производитель] = 'Adidas'"; + break; + + case "Barbell": + bindingSource.Filter = "[Производитель] = 'Barbell'"; + break; + + case "Demix": + bindingSource.Filter = "[Производитель] = 'Demix'"; + break; + + case "Deuter": + bindingSource.Filter = "[Производитель] = 'Deuter'"; + break; + + case "Everlast": + bindingSource.Filter = "[Производитель] = 'Everlast'"; + break; + + case "Fischer": + bindingSource.Filter = "[Производитель] = 'Fischer'"; + break; + + case "Head": + bindingSource.Filter = "[Производитель] = 'Head'"; + break; + + case "Joss": + bindingSource.Filter = "[Производитель] = 'Joss'"; + break; + + case "Kettler": + bindingSource.Filter = "[Производитель] = 'Kettler'"; + break; + + case "Mikasa": + bindingSource.Filter = "[Производитель] = 'Mikasa'"; + break; + + case "Nike": + bindingSource.Filter = "[Производитель] = 'Nike'"; + break; + + case "Nordway": + bindingSource.Filter = "[Производитель] = 'Nordway'"; + break; + + case "Outventure": + bindingSource.Filter = "[Производитель] = 'Outventure'"; + break; + + case "Puma": + bindingSource.Filter = "[Производитель] = 'Puma'"; + break; + + case "Reebok": + bindingSource.Filter = "[Производитель] = 'Reebok'"; + break; + } + } + private void textBoxSearch_TextChanged(object sender, EventArgs e) + { + var value = textBoxSearch.Text.Trim().Replace("'", "''"); + + bindingSource.Filter = string.IsNullOrWhiteSpace(value) + ? "" + : $"[Артикул] LIKE '%{value}%' OR " + + $"[Производитель] LIKE '%{value}%' OR " + + $"[Поставщик] LIKE '%{value}%' OR " + + $"[Категория] LIKE '%{value}%' OR " + + $"Convert([Цена], 'System.String') LIKE '%{value}%' OR " + + $"Convert([Возможная скидка], 'System.String') LIKE '%{value}%'"; + } + + private void button1_Click(object sender, EventArgs e) + { + Application.Exit(); + } + + private void ManagerMainForm_Load(object sender, EventArgs e) + { + labelFIO.Text = loginForm.FIO; + } + + private void Orders_Click(object sender, EventArgs e) + { + this.Hide(); + ManagerOrder mo = new ManagerOrder(); + mo.Show(); + } + + private void button1_Click_1(object sender, EventArgs e) + { + this.Hide(); + loginForm loginForm = new loginForm(); + loginForm.Show(); + } + } +} diff --git a/WinFormsApp1/ManagerMainForm.resx b/WinFormsApp1/ManagerMainForm.resx new file mode 100644 index 0000000..8b2ff64 --- /dev/null +++ b/WinFormsApp1/ManagerMainForm.resx @@ -0,0 +1,120 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + text/microsoft-resx + + + 2.0 + + + System.Resources.ResXResourceReader, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + \ No newline at end of file diff --git a/WinFormsApp1/ManagerOrder.Designer.cs b/WinFormsApp1/ManagerOrder.Designer.cs new file mode 100644 index 0000000..071d3aa --- /dev/null +++ b/WinFormsApp1/ManagerOrder.Designer.cs @@ -0,0 +1,111 @@ +namespace WinFormsApp1 +{ + partial class ManagerOrder + { + /// + /// Required designer variable. + /// + private System.ComponentModel.IContainer components = null; + + /// + /// Clean up any resources being used. + /// + /// true if managed resources should be disposed; otherwise, false. + protected override void Dispose(bool disposing) + { + if (disposing && (components != null)) + { + components.Dispose(); + } + base.Dispose(disposing); + } + + #region Windows Form Designer generated code + + /// + /// Required method for Designer support - do not modify + /// the contents of this method with the code editor. + /// + private void InitializeComponent() + { + dataGridViewProduct = new DataGridView(); + label10 = new Label(); + ExitButton = new Button(); + button1 = new Button(); + ((System.ComponentModel.ISupportInitialize)dataGridViewProduct).BeginInit(); + SuspendLayout(); + // + // dataGridViewProduct + // + dataGridViewProduct.AllowUserToAddRows = false; + dataGridViewProduct.AllowUserToDeleteRows = false; + dataGridViewProduct.AllowUserToResizeColumns = false; + dataGridViewProduct.AllowUserToResizeRows = false; + dataGridViewProduct.AutoSizeColumnsMode = DataGridViewAutoSizeColumnsMode.AllCells; + dataGridViewProduct.AutoSizeRowsMode = DataGridViewAutoSizeRowsMode.DisplayedCells; + dataGridViewProduct.ColumnHeadersHeightSizeMode = DataGridViewColumnHeadersHeightSizeMode.AutoSize; + dataGridViewProduct.Location = new Point(12, 77); + dataGridViewProduct.Name = "dataGridViewProduct"; + dataGridViewProduct.Size = new Size(776, 308); + dataGridViewProduct.TabIndex = 16; + // + // label10 + // + label10.AutoSize = true; + label10.Font = new Font("Comic Sans MS", 26.25F, FontStyle.Regular, GraphicsUnit.Point, 204); + label10.Location = new Point(119, 9); + label10.Name = "label10"; + label10.Size = new Size(561, 49); + label10.TabIndex = 34; + label10.Text = "ГЛАВНАЯ ФОРМА МЕНЕДЖЕРА"; + // + // ExitButton + // + ExitButton.BackColor = Color.Red; + ExitButton.Location = new Point(757, 9); + ExitButton.Name = "ExitButton"; + ExitButton.Size = new Size(31, 26); + ExitButton.TabIndex = 35; + ExitButton.Text = "X"; + ExitButton.UseVisualStyleBackColor = false; + ExitButton.Click += ExitButton_Click; + // + // button1 + // + button1.BackColor = Color.Red; + button1.Font = new Font("Comic Sans MS", 9F, FontStyle.Regular, GraphicsUnit.Point, 204); + button1.Location = new Point(697, 406); + button1.Name = "button1"; + button1.Size = new Size(75, 23); + button1.TabIndex = 36; + button1.Text = "Назад"; + button1.UseVisualStyleBackColor = false; + button1.Click += button1_Click; + // + // ManagerOrder + // + AutoScaleDimensions = new SizeF(7F, 15F); + AutoScaleMode = AutoScaleMode.Font; + BackColor = Color.FromArgb(192, 237, 215); + ClientSize = new Size(800, 450); + Controls.Add(button1); + Controls.Add(ExitButton); + Controls.Add(label10); + Controls.Add(dataGridViewProduct); + FormBorderStyle = FormBorderStyle.None; + Name = "ManagerOrder"; + Text = "ManagerOrder"; + Load += ManagerOrder_Load; + ((System.ComponentModel.ISupportInitialize)dataGridViewProduct).EndInit(); + ResumeLayout(false); + PerformLayout(); + } + + #endregion + + private DataGridView dataGridViewProduct; + private Label label10; + private Button ExitButton; + private Button button1; + } +} \ No newline at end of file diff --git a/WinFormsApp1/ManagerOrder.cs b/WinFormsApp1/ManagerOrder.cs new file mode 100644 index 0000000..9d3366e --- /dev/null +++ b/WinFormsApp1/ManagerOrder.cs @@ -0,0 +1,73 @@ +using System; +using System.Collections.Generic; +using System.ComponentModel; +using System.Data; +using System.Data.Common; +using System.Drawing; +using System.Linq; +using System.Text; +using System.Threading.Tasks; +using System.Windows.Forms; +using MySql.Data.MySqlClient; + +namespace WinFormsApp1 +{ + public partial class ManagerOrder : Form + { + public ManagerOrder() + { + InitializeComponent(); + LoadProdData(); + } + + private MySqlDataAdapter dataAdapter; + private DataTable prodTable; + private BindingSource bindingSource = new BindingSource(); + + private void ExitButton_Click(object sender, EventArgs e) + { + Application.Exit(); + } + private void LoadProdData() + { + try + { + DB db = new DB(); + using (MySqlConnection connection = db.getConnection()) + { + connection.Open(); + string query = "SELECT idOrders AS `Идентификатор заказа`, Article AS `Артикул`, FIO AS `Клиент`, StatusName AS `Статус заказа`, PickUpPoint AS `Пункт выдачи`, Order_date AS `Дата заказа`, Delivery_date AS `Дата доставки` FROM Orders LEFT JOIN Clients ON Orders.Clients_id = Clients.idClients JOIN Status ON Orders.Status_id = Status.idStatus JOIN PickUp ON Orders.PickUp_id = PickUp.idPickUp"; + + dataAdapter = new MySqlDataAdapter(query, connection); + prodTable = new DataTable(); + dataAdapter.Fill(prodTable); + dataGridViewProduct.RowTemplate.Height = 60; + bindingSource.DataSource = prodTable; + dataGridViewProduct.DataSource = bindingSource; + + + } + } + catch (MySqlException ex) + { + MessageBox.Show("Ошибка при подключении к базе данных или выполнении запроса: " + ex.Message); + } + catch (Exception ex) + { + MessageBox.Show("Произошла общая ошибка: " + ex.Message); + } + } + + private void button1_Click(object sender, EventArgs e) + { + this.Hide(); + ManagerMainForm mf = new ManagerMainForm(); + mf.Show(); + } + + private void ManagerOrder_Load(object sender, EventArgs e) + { + + } + } +} diff --git a/WinFormsApp1/ManagerOrder.resx b/WinFormsApp1/ManagerOrder.resx new file mode 100644 index 0000000..8b2ff64 --- /dev/null +++ b/WinFormsApp1/ManagerOrder.resx @@ -0,0 +1,120 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + text/microsoft-resx + + + 2.0 + + + System.Resources.ResXResourceReader, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + \ No newline at end of file diff --git a/WinFormsApp1/Program.cs b/WinFormsApp1/Program.cs new file mode 100644 index 0000000..13ac290 --- /dev/null +++ b/WinFormsApp1/Program.cs @@ -0,0 +1,17 @@ +namespace WinFormsApp1 +{ + internal static class Program + { + /// + /// The main entry point for the application. + /// + [STAThread] + static void Main() + { + // To customize application configuration such as set high DPI settings or default font, + // see https://aka.ms/applicationconfiguration. + ApplicationConfiguration.Initialize(); + Application.Run(new loginForm()); + } + } +} \ No newline at end of file diff --git a/WinFormsApp1/Properties/Resources.Designer.cs b/WinFormsApp1/Properties/Resources.Designer.cs new file mode 100644 index 0000000..3b0a0c8 --- /dev/null +++ b/WinFormsApp1/Properties/Resources.Designer.cs @@ -0,0 +1,63 @@ +//------------------------------------------------------------------------------ +// +// Этот код создан программой. +// Исполняемая версия:4.0.30319.42000 +// +// Изменения в этом файле могут привести к неправильной работе и будут потеряны в случае +// повторной генерации кода. +// +//------------------------------------------------------------------------------ + +namespace WinFormsApp1.Properties { + using System; + + + /// + /// Класс ресурса со строгой типизацией для поиска локализованных строк и т.д. + /// + // Этот класс создан автоматически классом StronglyTypedResourceBuilder + // с помощью такого средства, как ResGen или Visual Studio. + // Чтобы добавить или удалить член, измените файл .ResX и снова запустите ResGen + // с параметром /str или перестройте свой проект VS. + [global::System.CodeDom.Compiler.GeneratedCodeAttribute("System.Resources.Tools.StronglyTypedResourceBuilder", "17.0.0.0")] + [global::System.Diagnostics.DebuggerNonUserCodeAttribute()] + [global::System.Runtime.CompilerServices.CompilerGeneratedAttribute()] + internal class Resources { + + private static global::System.Resources.ResourceManager resourceMan; + + private static global::System.Globalization.CultureInfo resourceCulture; + + [global::System.Diagnostics.CodeAnalysis.SuppressMessageAttribute("Microsoft.Performance", "CA1811:AvoidUncalledPrivateCode")] + internal Resources() { + } + + /// + /// Возвращает кэшированный экземпляр ResourceManager, использованный этим классом. + /// + [global::System.ComponentModel.EditorBrowsableAttribute(global::System.ComponentModel.EditorBrowsableState.Advanced)] + internal static global::System.Resources.ResourceManager ResourceManager { + get { + if (object.ReferenceEquals(resourceMan, null)) { + global::System.Resources.ResourceManager temp = new global::System.Resources.ResourceManager("WinFormsApp1.Properties.Resources", typeof(Resources).Assembly); + resourceMan = temp; + } + return resourceMan; + } + } + + /// + /// Перезаписывает свойство CurrentUICulture текущего потока для всех + /// обращений к ресурсу с помощью этого класса ресурса со строгой типизацией. + /// + [global::System.ComponentModel.EditorBrowsableAttribute(global::System.ComponentModel.EditorBrowsableState.Advanced)] + internal static global::System.Globalization.CultureInfo Culture { + get { + return resourceCulture; + } + set { + resourceCulture = value; + } + } + } +} diff --git a/WinFormsApp1/Properties/Resources.resx b/WinFormsApp1/Properties/Resources.resx new file mode 100644 index 0000000..1af7de1 --- /dev/null +++ b/WinFormsApp1/Properties/Resources.resx @@ -0,0 +1,120 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + text/microsoft-resx + + + 2.0 + + + System.Resources.ResXResourceReader, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + \ No newline at end of file diff --git a/WinFormsApp1/Reduct2.Designer.cs b/WinFormsApp1/Reduct2.Designer.cs new file mode 100644 index 0000000..64d737f --- /dev/null +++ b/WinFormsApp1/Reduct2.Designer.cs @@ -0,0 +1,386 @@ +namespace WinFormsApp1 +{ + partial class Reduct2 + { + /// + /// Required designer variable. + /// + private System.ComponentModel.IContainer components = null; + + /// + /// Clean up any resources being used. + /// + /// true if managed resources should be disposed; otherwise, false. + protected override void Dispose(bool disposing) + { + if (disposing && (components != null)) + { + components.Dispose(); + } + base.Dispose(disposing); + } + + #region Windows Form Designer generated code + + /// + /// Required method for Designer support - do not modify + /// the contents of this method with the code editor. + /// + private void InitializeComponent() + { + button2 = new Button(); + button1 = new Button(); + textBoxStockQuan = new TextBox(); + textBoxSale = new TextBox(); + textBoxPrice = new TextBox(); + comboBoxCategories = new ComboBox(); + comboBoxManufacturer = new ComboBox(); + comboBoxUnitType = new ComboBox(); + textBoxDesc = new TextBox(); + textBoxProdName = new TextBox(); + textBoxArticle = new TextBox(); + comboBoxSupplier = new ComboBox(); + textBoxID = new TextBox(); + label9 = new Label(); + label8 = new Label(); + label7 = new Label(); + label6 = new Label(); + label5 = new Label(); + label4 = new Label(); + label3 = new Label(); + label2 = new Label(); + label1 = new Label(); + label11 = new Label(); + label10 = new Label(); + label12 = new Label(); + button3 = new Button(); + SuspendLayout(); + // + // button2 + // + button2.BackColor = Color.Red; + button2.Font = new Font("Comic Sans MS", 9F); + button2.Location = new Point(448, 12); + button2.Name = "button2"; + button2.Size = new Size(38, 29); + button2.TabIndex = 34; + button2.Text = "X"; + button2.UseVisualStyleBackColor = false; + button2.Click += button2_Click; + // + // button1 + // + button1.BackColor = Color.Red; + button1.Font = new Font("Comic Sans MS", 9F); + button1.Location = new Point(225, 408); + button1.Name = "button1"; + button1.Size = new Size(108, 23); + button1.TabIndex = 33; + button1.Text = "Редактировать"; + button1.UseVisualStyleBackColor = false; + button1.Click += btnSave_Click; + // + // textBoxStockQuan + // + textBoxStockQuan.BackColor = Color.FromArgb(133, 242, 189); + textBoxStockQuan.Font = new Font("Comic Sans MS", 9F); + textBoxStockQuan.Location = new Point(165, 337); + textBoxStockQuan.Name = "textBoxStockQuan"; + textBoxStockQuan.Size = new Size(225, 24); + textBoxStockQuan.TabIndex = 32; + // + // textBoxSale + // + textBoxSale.BackColor = Color.FromArgb(133, 242, 189); + textBoxSale.Font = new Font("Comic Sans MS", 9F); + textBoxSale.Location = new Point(165, 308); + textBoxSale.Name = "textBoxSale"; + textBoxSale.Size = new Size(225, 24); + textBoxSale.TabIndex = 31; + // + // textBoxPrice + // + textBoxPrice.BackColor = Color.FromArgb(133, 242, 189); + textBoxPrice.Font = new Font("Comic Sans MS", 9F); + textBoxPrice.Location = new Point(165, 279); + textBoxPrice.Name = "textBoxPrice"; + textBoxPrice.Size = new Size(225, 24); + textBoxPrice.TabIndex = 30; + // + // comboBoxCategories + // + comboBoxCategories.BackColor = Color.FromArgb(133, 242, 189); + comboBoxCategories.Font = new Font("Comic Sans MS", 9F); + comboBoxCategories.FormattingEnabled = true; + comboBoxCategories.Location = new Point(165, 163); + comboBoxCategories.Name = "comboBoxCategories"; + comboBoxCategories.Size = new Size(225, 25); + comboBoxCategories.TabIndex = 29; + // + // comboBoxManufacturer + // + comboBoxManufacturer.BackColor = Color.FromArgb(133, 242, 189); + comboBoxManufacturer.Font = new Font("Comic Sans MS", 9F); + comboBoxManufacturer.FormattingEnabled = true; + comboBoxManufacturer.Location = new Point(165, 221); + comboBoxManufacturer.Name = "comboBoxManufacturer"; + comboBoxManufacturer.Size = new Size(225, 25); + comboBoxManufacturer.TabIndex = 28; + // + // comboBoxUnitType + // + comboBoxUnitType.BackColor = Color.FromArgb(133, 242, 189); + comboBoxUnitType.Font = new Font("Comic Sans MS", 9F); + comboBoxUnitType.FormattingEnabled = true; + comboBoxUnitType.Location = new Point(165, 366); + comboBoxUnitType.Name = "comboBoxUnitType"; + comboBoxUnitType.Size = new Size(225, 25); + comboBoxUnitType.TabIndex = 27; + // + // textBoxDesc + // + textBoxDesc.BackColor = Color.FromArgb(133, 242, 189); + textBoxDesc.Font = new Font("Comic Sans MS", 9F); + textBoxDesc.Location = new Point(165, 192); + textBoxDesc.Name = "textBoxDesc"; + textBoxDesc.Size = new Size(225, 24); + textBoxDesc.TabIndex = 26; + // + // textBoxProdName + // + textBoxProdName.BackColor = Color.FromArgb(133, 242, 189); + textBoxProdName.Font = new Font("Comic Sans MS", 9F); + textBoxProdName.Location = new Point(165, 134); + textBoxProdName.Name = "textBoxProdName"; + textBoxProdName.Size = new Size(225, 24); + textBoxProdName.TabIndex = 25; + // + // textBoxArticle + // + textBoxArticle.BackColor = Color.FromArgb(133, 242, 189); + textBoxArticle.Font = new Font("Comic Sans MS", 9F); + textBoxArticle.Location = new Point(165, 105); + textBoxArticle.Name = "textBoxArticle"; + textBoxArticle.Size = new Size(225, 24); + textBoxArticle.TabIndex = 24; + // + // comboBoxSupplier + // + comboBoxSupplier.BackColor = Color.FromArgb(133, 242, 189); + comboBoxSupplier.Font = new Font("Comic Sans MS", 9F); + comboBoxSupplier.FormattingEnabled = true; + comboBoxSupplier.Location = new Point(165, 250); + comboBoxSupplier.Name = "comboBoxSupplier"; + comboBoxSupplier.Size = new Size(225, 25); + comboBoxSupplier.TabIndex = 23; + // + // textBoxID + // + textBoxID.BackColor = Color.FromArgb(133, 242, 189); + textBoxID.Location = new Point(165, 76); + textBoxID.Name = "textBoxID"; + textBoxID.ReadOnly = true; + textBoxID.Size = new Size(225, 23); + textBoxID.TabIndex = 35; + // + // label9 + // + label9.AutoSize = true; + label9.Font = new Font("Comic Sans MS", 9F, FontStyle.Regular, GraphicsUnit.Point, 204); + label9.Location = new Point(68, 136); + label9.Name = "label9"; + label9.Size = new Size(61, 17); + label9.TabIndex = 45; + label9.Text = "Название"; + // + // label8 + // + label8.AutoSize = true; + label8.Font = new Font("Comic Sans MS", 9F, FontStyle.Regular, GraphicsUnit.Point, 204); + label8.Location = new Point(68, 194); + label8.Name = "label8"; + label8.Size = new Size(67, 17); + label8.TabIndex = 44; + label8.Text = "Описание"; + // + // label7 + // + label7.AutoSize = true; + label7.Font = new Font("Comic Sans MS", 9F, FontStyle.Regular, GraphicsUnit.Point, 204); + label7.Location = new Point(60, 223); + label7.Name = "label7"; + label7.Size = new Size(99, 17); + label7.TabIndex = 43; + label7.Text = "Производитель"; + // + // label6 + // + label6.AutoSize = true; + label6.Font = new Font("Comic Sans MS", 9F, FontStyle.Regular, GraphicsUnit.Point, 204); + label6.Location = new Point(68, 252); + label6.Name = "label6"; + label6.Size = new Size(74, 17); + label6.TabIndex = 42; + label6.Text = "Поставщик"; + // + // label5 + // + label5.AutoSize = true; + label5.Font = new Font("Comic Sans MS", 9F, FontStyle.Regular, GraphicsUnit.Point, 204); + label5.Location = new Point(68, 281); + label5.Name = "label5"; + label5.Size = new Size(36, 17); + label5.TabIndex = 41; + label5.Text = "Цена"; + // + // label4 + // + label4.AutoSize = true; + label4.Font = new Font("Comic Sans MS", 9F, FontStyle.Regular, GraphicsUnit.Point, 204); + label4.Location = new Point(68, 310); + label4.Name = "label4"; + label4.Size = new Size(48, 17); + label4.TabIndex = 40; + label4.Text = "Скидка"; + // + // label3 + // + label3.AutoSize = true; + label3.Font = new Font("Comic Sans MS", 9F, FontStyle.Regular, GraphicsUnit.Point, 204); + label3.Location = new Point(68, 339); + label3.Name = "label3"; + label3.Size = new Size(76, 17); + label3.TabIndex = 39; + label3.Text = "Количество"; + // + // label2 + // + label2.AutoSize = true; + label2.Font = new Font("Comic Sans MS", 9F, FontStyle.Regular, GraphicsUnit.Point, 204); + label2.Location = new Point(68, 165); + label2.Name = "label2"; + label2.Size = new Size(67, 17); + label2.TabIndex = 38; + label2.Text = "Категория"; + // + // label1 + // + label1.AutoSize = true; + label1.Font = new Font("Comic Sans MS", 9F, FontStyle.Regular, GraphicsUnit.Point, 204); + label1.Location = new Point(68, 107); + label1.Name = "label1"; + label1.Size = new Size(56, 17); + label1.TabIndex = 37; + label1.Text = "Артикул"; + // + // label11 + // + label11.AutoSize = true; + label11.Font = new Font("Comic Sans MS", 9F, FontStyle.Regular, GraphicsUnit.Point, 204); + label11.Location = new Point(68, 369); + label11.Name = "label11"; + label11.Size = new Size(91, 17); + label11.TabIndex = 36; + label11.Text = "Ед. измерения"; + // + // label10 + // + label10.AutoSize = true; + label10.Font = new Font("Comic Sans MS", 9F, FontStyle.Regular, GraphicsUnit.Point, 204); + label10.Location = new Point(59, 78); + label10.Name = "label10"; + label10.Size = new Size(100, 17); + label10.TabIndex = 46; + label10.Text = "Идентификатор"; + // + // label12 + // + label12.AutoSize = true; + label12.Font = new Font("Comic Sans MS", 26.25F, FontStyle.Regular, GraphicsUnit.Point, 204); + label12.Location = new Point(68, 9); + label12.Name = "label12"; + label12.Size = new Size(356, 49); + label12.TabIndex = 47; + label12.Text = "РЕДАКТИРОВАНИЕ"; + // + // button3 + // + button3.BackColor = Color.Red; + button3.Font = new Font("Comic Sans MS", 9F, FontStyle.Regular, GraphicsUnit.Point, 204); + button3.Location = new Point(411, 415); + button3.Name = "button3"; + button3.Size = new Size(75, 23); + button3.TabIndex = 48; + button3.Text = "Назад"; + button3.UseVisualStyleBackColor = false; + button3.Click += button3_Click; + // + // Reduct2 + // + AutoScaleDimensions = new SizeF(7F, 15F); + AutoScaleMode = AutoScaleMode.Font; + BackColor = Color.FromArgb(192, 237, 215); + ClientSize = new Size(498, 450); + Controls.Add(button3); + Controls.Add(label12); + Controls.Add(label10); + Controls.Add(label9); + Controls.Add(label8); + Controls.Add(label7); + Controls.Add(label6); + Controls.Add(label5); + Controls.Add(label4); + Controls.Add(label3); + Controls.Add(label2); + Controls.Add(label1); + Controls.Add(label11); + Controls.Add(textBoxID); + Controls.Add(button2); + Controls.Add(button1); + Controls.Add(textBoxStockQuan); + Controls.Add(textBoxSale); + Controls.Add(textBoxPrice); + Controls.Add(comboBoxCategories); + Controls.Add(comboBoxManufacturer); + Controls.Add(comboBoxUnitType); + Controls.Add(textBoxDesc); + Controls.Add(textBoxProdName); + Controls.Add(textBoxArticle); + Controls.Add(comboBoxSupplier); + FormBorderStyle = FormBorderStyle.None; + Name = "Reduct2"; + Text = "Reduct2"; + ResumeLayout(false); + PerformLayout(); + } + + #endregion + + private Button button2; + private Button button1; + private TextBox textBoxStockQuan; + private TextBox textBoxSale; + private TextBox textBoxPrice; + private ComboBox comboBoxCategories; + private ComboBox comboBoxManufacturer; + private ComboBox comboBoxUnitType; + private TextBox textBoxDesc; + private TextBox textBoxProdName; + private TextBox textBoxArticle; + private ComboBox comboBoxSupplier; + private TextBox textBoxID; + private Label label9; + private Label label8; + private Label label7; + private Label label6; + private Label label5; + private Label label4; + private Label label3; + private Label label2; + private Label label1; + private Label label11; + private Label label10; + private Label label12; + private Button button3; + } +} \ No newline at end of file diff --git a/WinFormsApp1/Reduct2.cs b/WinFormsApp1/Reduct2.cs new file mode 100644 index 0000000..0206b4c --- /dev/null +++ b/WinFormsApp1/Reduct2.cs @@ -0,0 +1,233 @@ +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 MySql.Data.MySqlClient; + +namespace WinFormsApp1 +{ + public partial class Reduct2 : Form + { + public Reduct2(string productId) + { + InitializeComponent(); + LoadProductData(productId); + LoadCategories(); + LoadSuppliers(); + LoadManufacteries(); + LoadUnitType(); + } + private void LoadCategories() + { + DB db = new DB(); + DataTable categories = new DataTable(); + MySqlDataAdapter adapter = new MySqlDataAdapter(); + MySqlCommand command = new MySqlCommand("SELECT idCategory, CategoryName FROM Category", db.getConnection()); + + try + { + db.openConnection(); + adapter.SelectCommand = command; + adapter.Fill(categories); + + comboBoxCategories.DataSource = categories; + comboBoxCategories.DisplayMember = "CategoryName"; + comboBoxCategories.ValueMember = "idCategory"; + } + catch (Exception ex) + { + MessageBox.Show("Ошибка загрузки категорий " + ex.Message); + } + finally + { + db.closeConnection(); + } + } + private void LoadManufacteries() + { + DB db = new DB(); + DataTable manufacturer = new DataTable(); + MySqlDataAdapter adapter = new MySqlDataAdapter(); + MySqlCommand command = new MySqlCommand("SELECT idManufacturer, ManufacturerName FROM Manufacturer", db.getConnection()); + + try + { + db.openConnection(); + adapter.SelectCommand = command; + adapter.Fill(manufacturer); + + comboBoxManufacturer.DataSource = manufacturer; + comboBoxManufacturer.DisplayMember = "ManufacturerName"; + comboBoxManufacturer.ValueMember = "idManufacturer"; + } + catch (Exception ex) + { + MessageBox.Show("Ошибка загрузки категорий " + ex.Message); + } + finally + { + db.closeConnection(); + } + } + private void LoadUnitType() + { + DB db = new DB(); + DataTable UnitType = new DataTable(); + MySqlDataAdapter adapter = new MySqlDataAdapter(); + MySqlCommand command = new MySqlCommand("SELECT idUnitType, UnitTypeName FROM UnitType", db.getConnection()); + + try + { + db.openConnection(); + adapter.SelectCommand = command; + adapter.Fill(UnitType); + + comboBoxUnitType.DataSource = UnitType; + comboBoxUnitType.DisplayMember = "UnitTypeName"; + comboBoxUnitType.ValueMember = "idUnitType"; + } + catch (Exception ex) + { + MessageBox.Show("Ошибка загрузки категорий " + ex.Message); + } + finally + { + db.closeConnection(); + } + } + private void LoadSuppliers() + { + DB db = new DB(); + DataTable suppliers = new DataTable(); + MySqlDataAdapter adapter = new MySqlDataAdapter(); + MySqlCommand command = new MySqlCommand("SELECT idSupplier, SupplierName FROM Supplier", db.getConnection()); + + try + { + db.openConnection(); + adapter.SelectCommand = command; + adapter.Fill(suppliers); + + comboBoxSupplier.DataSource = suppliers; + comboBoxSupplier.DisplayMember = "SupplierName"; + comboBoxSupplier.ValueMember = "idSupplier"; + } + catch (Exception ex) + { + MessageBox.Show("Ошибка загрузки категорий " + ex.Message); + } + finally + { + db.closeConnection(); + } + } + private void LoadProductData(string productId) + { + try + { + DB db = new DB(); + using (MySqlConnection connection = db.getConnection()) + { + connection.Open(); + string query = "SELECT Article, ProductName, Category_id, ProductDescryption, Manufacturer_id, Supplier_id, Price, Discount, QuantityStock, UnitType_id FROM Products WHERE idProducts = @id"; + using (MySqlCommand command = new MySqlCommand(query, connection)) + { + command.Parameters.AddWithValue("@id", productId); + using (MySqlDataReader reader = command.ExecuteReader()) + { + if (reader.Read()) + { + textBoxArticle.Text = reader["Article"].ToString(); + textBoxID.Text = productId; + textBoxProdName.Text = reader["ProductName"].ToString(); + comboBoxCategories.Text = reader["Category_id"].ToString(); + textBoxDesc.Text = reader["ProductDescryption"].ToString(); + comboBoxManufacturer.Text = reader["Manufacturer_id"].ToString(); + comboBoxSupplier.Text = reader["Supplier_id"].ToString(); + textBoxPrice.Text = reader["Price"].ToString(); + textBoxSale.Text = reader["Discount"].ToString(); + textBoxStockQuan.Text = reader["QuantityStock"].ToString(); + comboBoxUnitType.Text = reader["UnitType_id"].ToString(); + } + else + { + MessageBox.Show("Продукт с указанным ID не найден."); + this.DialogResult = DialogResult.Cancel; + this.Close(); + } + } + } + } + } + catch (MySqlException ex) + { + MessageBox.Show("Ошибка при загрузке данных продукта: " + ex.Message); + } + } + private void btnSave_Click(object sender, EventArgs e) + { + try + { + object supplierId = comboBoxSupplier.SelectedValue; + object manufacturerId = comboBoxManufacturer.SelectedValue; + object categoryId = comboBoxCategories.SelectedValue; + object unittypeId = comboBoxUnitType.SelectedValue; + + DB db = new DB(); + using (MySqlConnection connection = db.getConnection()) + { + connection.Open(); + string query = "UPDATE Products SET Article = @art, ProductName = @pr_name, Category_id = @cat, ProductDescryption = @desc, Manufacturer_id = @manu, Supplier_id = @supp, Price = @base, Discount = @sale, QuantityStock = @stock, UnitType_id = @unit WHERE idProducts = @id"; + using (MySqlCommand command = new MySqlCommand(query, connection)) + { + command.Parameters.AddWithValue("@art", textBoxArticle.Text); + command.Parameters.AddWithValue("@pr_name", textBoxProdName.Text); + command.Parameters.AddWithValue("@desc", textBoxDesc.Text); + command.Parameters.AddWithValue("@sale", textBoxSale.Text); + command.Parameters.AddWithValue("@id", textBoxID.Text); + command.Parameters.AddWithValue("@stock", textBoxStockQuan.Text); + command.Parameters.AddWithValue("@base", textBoxPrice.Text); + command.Parameters.AddWithValue("@supp", supplierId); + command.Parameters.AddWithValue("@manu", manufacturerId); + command.Parameters.AddWithValue("@cat", categoryId); + command.Parameters.AddWithValue("@unit", unittypeId); + + int rowsAffected = command.ExecuteNonQuery(); + if (rowsAffected > 0) + { + MessageBox.Show("Данные продукта успешно обновлены."); + this.DialogResult = DialogResult.OK; + this.Hide(); + AdmMainForm main = new AdmMainForm(); + main.Show(); + } + } + } + } + catch (MySqlException ex) + { + MessageBox.Show("Ошибка при сохранении данных продукта: " + ex.Message); + } + } + + private void button2_Click(object sender, EventArgs e) + { + this.Hide(); + AdmMainForm mainForm = new AdmMainForm(); + mainForm.Show(); + } + + private void button3_Click(object sender, EventArgs e) + { + this.Hide(); + AdmMainForm af = new AdmMainForm(); + af.Show(); + } + } +} + diff --git a/WinFormsApp1/Reduct2.resx b/WinFormsApp1/Reduct2.resx new file mode 100644 index 0000000..8b2ff64 --- /dev/null +++ b/WinFormsApp1/Reduct2.resx @@ -0,0 +1,120 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + text/microsoft-resx + + + 2.0 + + + System.Resources.ResXResourceReader, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + \ No newline at end of file diff --git a/WinFormsApp1/UserForm.Designer.cs b/WinFormsApp1/UserForm.Designer.cs new file mode 100644 index 0000000..28e8f0c --- /dev/null +++ b/WinFormsApp1/UserForm.Designer.cs @@ -0,0 +1,266 @@ +namespace WinFormsApp1 +{ + partial class UserForm + { + /// + /// Required designer variable. + /// + private System.ComponentModel.IContainer components = null; + + /// + /// Clean up any resources being used. + /// + /// true if managed resources should be disposed; otherwise, false. + protected override void Dispose(bool disposing) + { + if (disposing && (components != null)) + { + components.Dispose(); + } + base.Dispose(disposing); + } + + #region Windows Form Designer generated code + + /// + /// Required method for Designer support - do not modify + /// the contents of this method with the code editor. + /// + private void InitializeComponent() + { + panel1 = new Panel(); + panel2 = new Panel(); + CountLabel = new Label(); + PriceLabel = new Label(); + pictureBox1 = new PictureBox(); + panel3 = new Panel(); + Descyption = new Label(); + SupplierLabel = new Label(); + ManufacturerLabel = new Label(); + NameLabel = new Label(); + CategoryLabel = new Label(); + dataGridViewUser = new DataGridView(); + ExitButton = new Button(); + labelFIO = new Label(); + label10 = new Label(); + button3 = new Button(); + panel1.SuspendLayout(); + panel2.SuspendLayout(); + ((System.ComponentModel.ISupportInitialize)pictureBox1).BeginInit(); + panel3.SuspendLayout(); + ((System.ComponentModel.ISupportInitialize)dataGridViewUser).BeginInit(); + SuspendLayout(); + // + // panel1 + // + panel1.BackColor = Color.FromArgb(133, 242, 189); + panel1.BorderStyle = BorderStyle.FixedSingle; + panel1.Controls.Add(panel2); + panel1.Controls.Add(pictureBox1); + panel1.Controls.Add(panel3); + panel1.Controls.Add(SupplierLabel); + panel1.Controls.Add(ManufacturerLabel); + panel1.Controls.Add(NameLabel); + panel1.Controls.Add(CategoryLabel); + panel1.Location = new Point(79, 345); + panel1.Name = "panel1"; + panel1.Size = new Size(609, 150); + panel1.TabIndex = 18; + // + // panel2 + // + panel2.BorderStyle = BorderStyle.FixedSingle; + panel2.Controls.Add(CountLabel); + panel2.Controls.Add(PriceLabel); + panel2.Location = new Point(444, -1); + panel2.Name = "panel2"; + panel2.Size = new Size(164, 150); + panel2.TabIndex = 15; + // + // CountLabel + // + CountLabel.AutoSize = true; + CountLabel.Font = new Font("Comic Sans MS", 9.75F, FontStyle.Regular, GraphicsUnit.Point, 204); + CountLabel.Location = new Point(44, 44); + CountLabel.Name = "CountLabel"; + CountLabel.Size = new Size(82, 18); + CountLabel.TabIndex = 1; + CountLabel.Text = "Количество"; + // + // PriceLabel + // + PriceLabel.AutoSize = true; + PriceLabel.Font = new Font("Comic Sans MS", 12F, FontStyle.Regular, GraphicsUnit.Point, 204); + PriceLabel.Location = new Point(35, 10); + PriceLabel.Name = "PriceLabel"; + PriceLabel.Size = new Size(0, 23); + PriceLabel.TabIndex = 0; + // + // pictureBox1 + // + pictureBox1.BorderStyle = BorderStyle.FixedSingle; + pictureBox1.Location = new Point(19, 10); + pictureBox1.Name = "pictureBox1"; + pictureBox1.Size = new Size(137, 127); + pictureBox1.TabIndex = 19; + pictureBox1.TabStop = false; + // + // panel3 + // + panel3.BorderStyle = BorderStyle.FixedSingle; + panel3.Controls.Add(Descyption); + panel3.Location = new Point(162, 55); + panel3.Name = "panel3"; + panel3.Size = new Size(276, 44); + panel3.TabIndex = 18; + // + // Descyption + // + Descyption.AutoSize = true; + Descyption.Font = new Font("Comic Sans MS", 9.5F); + Descyption.Location = new Point(-1, -1); + Descyption.Name = "Descyption"; + Descyption.Size = new Size(70, 18); + Descyption.TabIndex = 15; + Descyption.Text = "Описание"; + // + // SupplierLabel + // + SupplierLabel.AutoSize = true; + SupplierLabel.Font = new Font("Comic Sans MS", 10F); + SupplierLabel.Location = new Point(162, 99); + SupplierLabel.Name = "SupplierLabel"; + SupplierLabel.Size = new Size(119, 19); + SupplierLabel.TabIndex = 17; + SupplierLabel.Text = "Производитель:"; + // + // ManufacturerLabel + // + ManufacturerLabel.AutoSize = true; + ManufacturerLabel.Font = new Font("Comic Sans MS", 10F); + ManufacturerLabel.Location = new Point(162, 118); + ManufacturerLabel.Name = "ManufacturerLabel"; + ManufacturerLabel.Size = new Size(89, 19); + ManufacturerLabel.TabIndex = 16; + ManufacturerLabel.Text = "Поставщик:"; + // + // NameLabel + // + NameLabel.AutoSize = true; + NameLabel.Font = new Font("Comic Sans MS", 15F, FontStyle.Bold); + NameLabel.Location = new Point(162, -1); + NameLabel.Name = "NameLabel"; + NameLabel.Size = new Size(157, 29); + NameLabel.TabIndex = 4; + NameLabel.Text = "Наименование"; + // + // CategoryLabel + // + CategoryLabel.AutoSize = true; + CategoryLabel.Font = new Font("Comic Sans MS", 13F); + CategoryLabel.Location = new Point(162, 28); + CategoryLabel.Name = "CategoryLabel"; + CategoryLabel.Size = new Size(97, 24); + CategoryLabel.TabIndex = 5; + CategoryLabel.Text = "Категория"; + // + // dataGridViewUser + // + dataGridViewUser.ColumnHeadersHeightSizeMode = DataGridViewColumnHeadersHeightSizeMode.AutoSize; + dataGridViewUser.Location = new Point(61, 103); + dataGridViewUser.Name = "dataGridViewUser"; + dataGridViewUser.Size = new Size(643, 236); + dataGridViewUser.TabIndex = 17; + dataGridViewUser.Click += dataGridViewUser_Click; + // + // ExitButton + // + ExitButton.BackColor = Color.Red; + ExitButton.Location = new Point(758, 12); + ExitButton.Name = "ExitButton"; + ExitButton.Size = new Size(30, 27); + ExitButton.TabIndex = 16; + ExitButton.Text = "X"; + ExitButton.UseVisualStyleBackColor = false; + ExitButton.Click += ExitButton_Click; + // + // labelFIO + // + labelFIO.AutoSize = true; + labelFIO.Font = new Font("Comic Sans MS", 9F); + labelFIO.Location = new Point(591, 74); + labelFIO.Name = "labelFIO"; + labelFIO.Size = new Size(35, 17); + labelFIO.TabIndex = 19; + labelFIO.Text = "ФИО"; + // + // label10 + // + label10.AutoSize = true; + label10.Font = new Font("Comic Sans MS", 26.25F, FontStyle.Regular, GraphicsUnit.Point, 204); + label10.Location = new Point(88, 9); + label10.Name = "label10"; + label10.Size = new Size(635, 49); + label10.TabIndex = 33; + label10.Text = "ГЛАВНАЯ ФОРМА ПОЛЬЗОВАТЕЛЯ"; + // + // button3 + // + button3.BackColor = Color.Red; + button3.Font = new Font("Comic Sans MS", 9F, FontStyle.Regular, GraphicsUnit.Point, 204); + button3.Location = new Point(713, 477); + button3.Name = "button3"; + button3.Size = new Size(75, 23); + button3.TabIndex = 49; + button3.Text = "Назад"; + button3.UseVisualStyleBackColor = false; + button3.Click += button3_Click; + // + // UserForm + // + AutoScaleDimensions = new SizeF(7F, 15F); + AutoScaleMode = AutoScaleMode.Font; + BackColor = Color.FromArgb(192, 237, 215); + ClientSize = new Size(800, 512); + Controls.Add(button3); + Controls.Add(label10); + Controls.Add(labelFIO); + Controls.Add(panel1); + Controls.Add(dataGridViewUser); + Controls.Add(ExitButton); + FormBorderStyle = FormBorderStyle.None; + Name = "UserForm"; + Text = "UserForm"; + Load += UserForm_Load; + panel1.ResumeLayout(false); + panel1.PerformLayout(); + panel2.ResumeLayout(false); + panel2.PerformLayout(); + ((System.ComponentModel.ISupportInitialize)pictureBox1).EndInit(); + panel3.ResumeLayout(false); + panel3.PerformLayout(); + ((System.ComponentModel.ISupportInitialize)dataGridViewUser).EndInit(); + ResumeLayout(false); + PerformLayout(); + } + + #endregion + + private Panel panel1; + private Panel panel2; + private Label CountLabel; + private Label PriceLabel; + private PictureBox pictureBox1; + private Panel panel3; + private Label Descyption; + private Label SupplierLabel; + private Label ManufacturerLabel; + private Label NameLabel; + private Label CategoryLabel; + private DataGridView dataGridViewUser; + private Button ExitButton; + private Label labelFIO; + private Label label10; + private Button button3; + } +} \ No newline at end of file diff --git a/WinFormsApp1/UserForm.cs b/WinFormsApp1/UserForm.cs new file mode 100644 index 0000000..225a4eb --- /dev/null +++ b/WinFormsApp1/UserForm.cs @@ -0,0 +1,84 @@ +using MySql.Data.MySqlClient; +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 WinFormsApp1 +{ + public partial class UserForm : Form + { + public UserForm() + { + InitializeComponent(); + LoadUserData(); + } + + private void ExitButton_Click(object sender, EventArgs e) + { + Application.Exit(); + } + + private MySqlDataAdapter dataAdapter; + private DataTable prodTable; + private BindingSource bindingSource = new BindingSource(); + private void LoadUserData() + { + try + { + DB db = new DB(); + using (MySqlConnection connection = db.getConnection()) + { + connection.Open(); + string query = "SELECT idProducts, Article AS `Артикул`, ProductName AS `название товара`, CategoryName AS `Название категории`, ProductDescryption AS `Описание`, ManufacturerName AS `Производитель`, SupplierName AS `Поставщик`, Price AS `Цена`, Discount AS `Процент скидки`, QuantityStock AS `Количество на складе`, UnitTypeName AS `Единица измерения` FROM Products LEFT JOIN Category ON Products.Category_id = Category.idCategory JOIN Manufacturer ON Products.Manufacturer_id = Manufacturer.idManufacturer JOIN Supplier ON Products.Supplier_id = Supplier.idSupplier JOIN UnitType ON Products.UnitType_id = UnitType.idUnitType"; + + dataAdapter = new MySqlDataAdapter(query, connection); + prodTable = new DataTable(); + dataAdapter.Fill(prodTable); + dataGridViewUser.RowTemplate.Height = 60; + bindingSource.DataSource = prodTable; + dataGridViewUser.DataSource = bindingSource; + + } + } + catch (MySqlException ex) + { + MessageBox.Show("Ошибка при подключении к базе данных или выполнении запроса: " + ex.Message); + } + catch (Exception ex) + { + MessageBox.Show("Произошла общая ошибка: " + ex.Message); + } + } + private void dataGridViewUser_Click(object sender, EventArgs e) + { + CategoryLabel.Text = dataGridViewUser.CurrentRow.Cells[3].Value.ToString(); + NameLabel.Text = dataGridViewUser.CurrentRow.Cells[2].Value.ToString(); + Descyption.Text = dataGridViewUser.CurrentRow.Cells[4].Value.ToString(); + PriceLabel.Text = dataGridViewUser.CurrentRow.Cells[7].Value.ToString(); + CountLabel.Text = dataGridViewUser.CurrentRow.Cells[9].Value.ToString(); + ManufacturerLabel.Text = dataGridViewUser.CurrentRow.Cells[5].Value.ToString(); + SupplierLabel.Text = dataGridViewUser.CurrentRow.Cells[6].Value.ToString(); + } + + private void UserForm_Load(object sender, EventArgs e) + { + { + labelFIO.Text = loginForm.FIO; + } + } + + private void button3_Click(object sender, EventArgs e) + { + this.Hide(); + loginForm lf = new loginForm(); + lf.Show(); + } + } +} + diff --git a/WinFormsApp1/UserForm.resx b/WinFormsApp1/UserForm.resx new file mode 100644 index 0000000..8b2ff64 --- /dev/null +++ b/WinFormsApp1/UserForm.resx @@ -0,0 +1,120 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + text/microsoft-resx + + + 2.0 + + + System.Resources.ResXResourceReader, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + \ No newline at end of file diff --git a/WinFormsApp1/WinFormsApp1.csproj b/WinFormsApp1/WinFormsApp1.csproj new file mode 100644 index 0000000..dca6a8f --- /dev/null +++ b/WinFormsApp1/WinFormsApp1.csproj @@ -0,0 +1,30 @@ + + + + WinExe + net8.0-windows + enable + true + enable + + + + + + + + + True + True + Resources.resx + + + + + + ResXFileCodeGenerator + Resources.Designer.cs + + + + \ No newline at end of file diff --git a/WinFormsApp1/WinFormsApp1.csproj.user b/WinFormsApp1/WinFormsApp1.csproj.user new file mode 100644 index 0000000..88ee7f3 --- /dev/null +++ b/WinFormsApp1/WinFormsApp1.csproj.user @@ -0,0 +1,32 @@ + + + + + Form + + + Form + + + Form + + + Form + + + Form + + + Form + + + Form + + + Form + + + Form + + + \ No newline at end of file