Лабораторна 2. Семестр 1. Опрацювання таблиці користувачів

 

 

 

Лабораторна робота 2. Семестр 1.

         На базі першої лабораторної роботи зробити форму обробки таблиці користувачів, тобто забезпечити пошук по імені та телефону користувачів, створити інтерфейс для додання, редагування та видалення даних.

         Ви можете для забезпечення роботи лабораторної роботи додавати нові поля до БД.

         Потрібно буде переробити приблизно 80% першої лабораторної роботи, тому, Ви вирішуєте, створювати її з «нуля», чи вносити істотні зміни. В даному документі створюється «чистий» проект, перша лабораторна не використовується.

         В даній інструкції опускаються технічні моменти, які Ви вивчили в першій лабораторній роботі.

         Ви можете відходити від наведених компонентів, а також Ви вправі міняти поведінку додатку, основна мета це забезпечити пошук, виведення, редагування, та видалення даних таблиці.

 

Компоненти форми

Також вкладка Редагувати

         Тепер, якщо ви не будете впевнені, які обробники подій відносяться до компонент, то зможете підглянути.

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

         Отже розширимо клас form1:

public partial class Form1 : Form

    {

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

        {

            UserID = "root",// записуємо реквізити доступу, тепер якщо ви запускаєте додаток

            Password = "******",//на комп’ютері де назва БД або паролі не співпадають,

            Database = "cs_test",// просто редагуєте ці рядки і все

            Server = "127.0.0.1"

        }.ConnectionString;

 

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

 

        public Form1()

        {

            InitializeComponent();//цей рядок залишаємо

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

            tabControl1.SelectedIndex=0; //Показуємо вкладку "Додати"

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

        }

 

        public void fill_grid(string q,DataGridView d){ //Виконуємо запит і відображаємо результат на сітці де q –рядок запиту, 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();//закриваємо допоміжну компоненту

        }

       

        public void run_query(string q){ //виконання запиту без повернення результатів q –рядок запиту

            if (con.State.ToString()!="Open") con.Open();//якщо з’єднання закрите відкриваємо

            MySqlCommand com = new MySqlCommand(q, con); //підготовимо запит

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

        }

 

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

        private void deleteToolStripMenuItem_Click(object sender, EventArgs e) // подія видалення рядка таблиці

        {

            string id = dataGridView1.Rows[dataGridView1.CurrentRow.Index].Cells[0].Value + ""; //дізнаємось ідентифікатор

            if (id != "")

            {

                run_query("DELETE FROM `users` WHERE `id`=" + id + ";");// виконуємо запит

                fill_grid("SELECT * FROM `users`;", dataGridView1); // оновлюємо дані на сітці

            }

        }

 

        private void button1_Click(object sender, EventArgs e) //очищення рядка пошуку

        {

            textBox1.Text = "";

        }

 

        private void button2_Click(object sender, EventArgs e) //очищення рядка пошуку

        {

            textBox2.Text = "";

        }

 

        private void textBox1_TextChanged(object sender, EventArgs e) // при зміні рядка пошуку автоматично фільруємо дані

        {

            string s = textBox1.Text + "";

            fill_grid("SELECT * FROM `users` WHERE `name` LIKE '%"+s+"%';",dataGridView1);

        }

 

        private void textBox2_TextChanged(object sender, EventArgs e) // при зміні рядка пошуку автоматично фільруємо дані

        {

            string s = textBox2.Text + "";

            fill_grid("SELECT * FROM `users` WHERE `phone` LIKE '%"+s+"%';",dataGridView1);

        }

 

        private void button3_Click(object sender, EventArgs e) // Додання нового рядка

        {

            string name = textBox3.Text + "";//Для зручності розносимо введені дані по змінних

            string phone = textBox4.Text + "";

            string data = textBox5.Text + "";

            run_query("INSERT INTO `users` VALUES (NULL,'"+name+"','"+phone+"','"+data+"');");

            fill_grid("SELECT * FROM `users`;", dataGridView1);

            textBox3.Text = ""; textBox4.Text = ""; textBox5.Text = "";// очищуємо введені дані

        }

 

        private void button5_Click(object sender, EventArgs e) // відміна редагування

        {

            textBox6.Text = ""; textBox7.Text = ""; textBox8.Text = "";// очищуємо заповнені рядки

            tabControl1.SelectedIndex = 0; //показуємо вкладку редагувати

        }

 

        private void редагуватиToolStripMenuItem_Click(object sender, EventArgs e) //починаємо процедуру редагування

        {

             //переносимо в поля вводу данні запису, щоб користувачу було зручніше їх змінювати

            textBox6.Text = dataGridView1.Rows[dataGridView1.CurrentRow.Index].Cells["name"].Value+"";

            textBox7.Text = dataGridView1.Rows[dataGridView1.CurrentRow.Index].Cells["phone"].Value + "";

            textBox8.Text = Convert.ToDateTime(dataGridView1.Rows[dataGridView1.CurrentRow.Index].Cells["data"].Value+"").ToString("dd.MM.yyyy");//форматуємо дату, так як в типі DATETIME зберігається і дата і час, який нам не потрібний, ми відріжемо від дати години, хвилини та секунди (00:00:00)

            tabControl1.SelectedIndex = 1; // показуємо вкладку редагувати

        }

 

        private void button4_Click(object sender, EventArgs e) // завершуємо редагування

        {

             // розносимо дані у змінні для зручності

            string name = textBox6.Text;string phone = textBox7.Text; string data = textBox8.Text;

            string id=dataGridView1.Rows[dataGridView1.CurrentRow.Index].Cells["id"].Value+"";

            data=Convert.ToDateTime(data).ToString("yyyy-MM-dd"); // так як MySQL приймає дату тільки в форматі РРРР-ММ-ДД, ми мусимо перевести її з локального формату ДД.ММ.РРРР

            run_query("UPDATE `users` SET `name`='"+name+"',`phone`='"+phone+"',`data`='"+data+"' WHERE `id`="+id+";");

            fill_grid("SELECT * FROM `users`;", dataGridView1);

            button5_Click(this, null); // виконуємо подію п’ятої кнопки, яка очистить введені дані та покаже вкладку Додати

        }

 

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