Лабораторна робота 3. Створення форм-довідників

 

                Метою роботи буде написання додатку для перегляду та редагування довідників. Довідниками вважаються форми на яких відображається і редагується вміст таких таблиць БД: бібліотекарі, читачі, книги, відділи та посади.

Для кожної з цих таблиць використаємо свою форму. Нам знадобиться ще одна форма, яка буде викликати інші форми роботи з таблицями, умовно назвемо її «Головною».

Для реалізації задуманого нам потрібно, щоб в таблиці користувачів існували поля для зв’язування з таблицями посади, та відділи (INT NOT NULL AUTO_INCREMENT UNSIGNED).

Отже так як в C# немає статичних форм і середовище (по замовчуванню) при відображенні форми її створює  а при закритті знищує то нам потрібно аби за реквізити підключення (логін, пароль і т.д) відповідала головна форма так як поки вона працює – працює і Ваш додаток. Отже приведемо для приклада вигляд форми

Тут все просто – по натисненні елементу меню викликаються інші форми ми, для прикладу розглянемо форми читачів та книг. Наголошую, що в даному прикладі розглянуто лише механізм виконання запитів та використання спільного підключення, тому вони тут спрощені лише до однієї сітки з даними, а у Вас, при здачі лабораторної роботи вони мусять бути такі як в попередній, тобто з пошуком, редагуванням, видаленням та додаванням рядків.

Отже наші форми (для прикладу) такі:

Ну і аналогічна форма 3:

Ще раз нагадую, що в прикладі ілюструється лише управління підключенням та виконанням запитів між декількома формами, при здачі вони мають бути доповнені функціоналом як в попередній лабораторній роботі.

Отже підключення тепер в нас буде на першій – головній формі, його потрібно оголосити СТАТИЧНИМИ методами класу.

Обов’язково ви маєте додати посилання на MySQL.Data і в простір імен обов’язково прописати using MySql.Data.MySqlClient;

public partial class Form1 : Form

    {

        static string cs = new MySqlConnectionStringBuilder() //Створюємо рядок підключення

        {

            UserID = "root",

            Password = "*******",

            Database = "cs_test",

            Server = "127.0.0.1"

        }.ConnectionString;

 

        public static MySqlConnection con = new MySqlConnection(cs); //Оголошуємо підключення

 

        public Form1()

        {

            InitializeComponent();

            con.Open(); //Підключаемося

        }

 

        private void читачіToolStripMenuItem_Click(object sender, EventArgs e) //виклик другої форми

        {

            Form2 f2 = new Form2(con); //створення форми 2, другий параметр наше підключення

            f2.ShowDialog();//відображення форми, головна форма «заблокована» доки не закрита форма 2

        }

 

        private void книгиToolStripMenuItem_Click(object sender, EventArgs e) //виклик другої форми

        {

            Form3 f3 = new Form3(con); //створення форми 3, другий параметр наше підключення

            f3.ShowDialog();();//відображення форми, головна форма «заблокована» доки не закрита форма 3

        }

    }

 

Так як, ми змінили механізм створення двох форм додавши до нього ще один параметр, то в нас додаток не відкомпілюється доки ми не змінимо конструктор інших форм. Та ще нам потрібно додати приватні функції виклику запитів з поверненням результатів і без.

Код форми 2:       

 

public partial class Form2 : Form

    {

        private MySqlConnection con; // тут ми зберігаємо з’єднання передане нам при створенні форми

 

        private void fill_grid(string q, DataGridView d) // процедура заповнення сітки даними запиту, мусить бути приватною, щоб не конфліктувати з іншими формами

        { //Виконуємо запит і відображаємо результат на сітці

            DataTable dt = new DataTable();

            if (con.State.ToString() != "Open") con.Open();

            MySqlCommand com = new MySqlCommand(q, con);

            MySqlDataReader dr = com.ExecuteReader(); //Виконання із поверненням кузультатів запиту

            dt.Load(dr);

            d.DataSource = dt;

            dr.Close();

        }

 

        private void run_query(string q) //виконання запиту без повернення результатів, повиння бути приватною, щоб не конфліктувала з іншими формами

        {

            if (con.State.ToString() != "Open") con.Open();

            MySqlCommand com = new MySqlCommand(q, con);

            com.ExecuteNonQuery(); //Виконання без повернення результатів запиту

        }

 

        public Form2(MySqlConnection c) // конструктор створення форми, додаємо змінну підключення с

        {

            InitializeComponent();

            con = c; // запям’ятовуємо передане нам з’єднання з сервером

            fill_grid("SELECT * FROM `users`;", dataGridView1); // при відображенні форми виводимо вміст таблиці читачів (користувачів)

 

        }

 

// Тут Вам потрібно буде дописати події які будуть відповідати за пошук, додання, редагування та видалення покрокова інструкція знаходиться в попередній лабораторній роботі

 

    }

 

Тепер розглянемо код третьої форми, він буде відрізнятися лише запитом який відображає таблицю при створенні форми в конструкторі форми.

Код форми 3:

public partial class Form3 : Form

    {

        private MySqlConnection con; // тут ми зберігаємо з’єднання передане нам при створенні форми

 

        private void fill_grid(string q, DataGridView d) // процедура заповнення сітки даними запиту, мусить бути приватною, щоб не конфліктувати з іншими формами

        { //Виконуємо запит і відображаємо результат на сітці

            DataTable dt = new DataTable();

            if (con.State.ToString() != "Open") con.Open();

            MySqlCommand com = new MySqlCommand(q, con);

            MySqlDataReader dr = com.ExecuteReader(); //Виконання із поверненням кузультатів запиту

            dt.Load(dr);

            d.DataSource = dt;

            dr.Close();

        }

 

        private void run_query(string q) //виконання запиту без повернення результатів, повиння бути приватною, щоб не конфліктувала з іншими формами

        {

            if (con.State.ToString() != "Open") con.Open();

            MySqlCommand com = new MySqlCommand(q, con);

            com.ExecuteNonQuery(); //Виконання без повернення результатів запиту

        }

 

        public Form2(MySqlConnection c) // конструктор створення форми, додаємо змінну підключення с

        {

            InitializeComponent();

            con = c; // запям’ятовуємо передане нам з’єднання з сервером

            fill_grid("SELECT * FROM `books`;", dataGridView1); // при відображенні форми виводимо вміст таблиці читачів (користувачів)

 

        }

 

// Тут Вам потрібно буде дописати події які будуть відповідати за пошук, додання, редагування та видалення покрокова інструкція знаходиться в попередній лабораторній роботі

 

    }

 

Як ви бачите з наведеного вище коду головна форма просто зберігає реквізити доступу та компоненту підключення в статичних медодах, і після підключення в конструкторі форми динамічно передає дочірнім формам, при їх створенні.

Далі, так як функції виконання запитів називаються однаково, у кожній формі, при написанні програмного коду, ви просто виконуєте метод класу, а так як він приватний він в любому випадку виконається з потрібної форми.

Тепер лишилося тільки розібратися з одним моментом, чи можна підключити до нового проекту форму з минулої лабораторної роботи.

Якщо потрібно використати вже існуючі форми то потрібно

1.     Скопіювати файли Form1.cs, Form1.Designer.cs, Form1.resx (якщо це форма 1) до папки нового проекту.

2.     В Solution Explorer натискаємо правою кнопкою по рядку з назвою проекту та вибираємо add->existing item та вибираємо файл з формою яку треба підключити (Form1.cs)

3.     Тепер потрібно відкрити в режимі редагування додану форму та вказати новий Namespace в підключеній формі.

4.     Далі потрібно вибрати переіменувати у файлах форми

 

 

Після цього форма інтегрувалася до проекту і з нею можна працювати як зі звичайною.

 

Потрібно лише переконатися, що в проекті немає форми з таким самим іменем. Якщо така форма існує потрібно буде і її переіменувати як в останніх двох пунктах.