Сообщение об ошибке

Deprecated function: The each() function is deprecated. This message will be suppressed on further calls в функции menu_set_active_trail() (строка 2405 в файле /home/kpaco123/e-helper/includes/menu.inc).

Практична робота №6. Семестр 1

         В цій практичній роботі ми розберемось яким чином на сітці з даними приховати стовпці з відображення, фізично не видаляючи їх, та, що головніше перейменовувати заголовки полів не порушуючи їх назви. Наприклад: в БД поле має назву «name», у всіх запитах на редагування, видалення та створення -  ми мусимо використовувати «name», але ж користувач має в підписі стовпця бачити щось виду «ПІБ», або «Ім’я». Також, навіщо користувачу на сітці з даними бачити числа в стовпцях «id», «id_posadu», «id_viddilu»…? З такими речами миритися ми не будемо, і саме з ними і будемо боротись.

         Отже почнемо. У Вас в результаті попередньої лабораторної роботи отрималось, хоч і примітивне, але ж все-таки автоматизоване робоче місце бібліотекаря, тепер ми з усіх форм, включаючи і підлеглі, будемо прибирати з відображення непотрібні для користувача стовпці в таблицях, та будемо позбуватися трансліту в назвах стовпців.

         Приведені в прикладах методи роботи з сітками будуть однотипними, (на інших формах додатку ви введете їх самі згідно з даним прикладом) різниця буде лише в назвах полів, які потрібно буде певним чином опрацювати. Так як у нас за відображення даних на сітці відповідає функція private void (string q, DataGridView d) - і нас це влаштовує, тому ми просто її розширимо трьома параметрами: в першому ми передамо масив значень, де містяться назви стовпців, які потрібно приховати, в другому і третьому будуть по черзі міститися оригінальні назви стовпців і нові назви, розташовані в відповідному порядку. Також для того, щоб не порушити функціональність вашої системи ми використаємо механізм перевантаження методів, це нам дозволить мати і користуватись одночасно трьома варіантами fill_grid. Перший – старий, який нічого не приховує та не перейменовує, другий буде мати можливість тільки приховувати стовпці, а третій буде і приховувати і перейменовувати одночасно, користуватися ви будете любим із них по мірі необхідності.

         При здачі лабораторної роботи не забудьте також по називати правильно форми, щоб не було в проекті «form1», а, на приклад, «Персонал».

         Для прикладу візьмемо форуму видачі книжок розглянуту в минулій лабораторній роботі, нагадаємо розташування візуальних компонентів на формі:

         Та вкладка редагувати

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

         В результаті наших дій ми маємо отримати таку першу форму:

         І відповідно підлегла форма:

         Приведемо код першої форми, місця коду, де відбулися зміни, будуть певним чином виділені.

    public partial class Form1 : Form

    {

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

        {

            UserID = "root",

            Password = "fjrud7sg",

            Database = "cs_test",

            Server = "127.0.0.1"

        }.ConnectionString;

 

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

      

//=-=-=-=-=-=-=-= Друге перевантаження функції (приховуємо і переіменовуємо)

        private void fill_grid(string q, DataGridView d, string[] f,string [] wn,string [] nn)

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

            //та переіменовуємо стовпці wn в nn

            fill_grid(q, d, f); // викликаємо перевантажену функцію яка заповнює сітку та ховає "непотрібні" поля

            for (int i = 0; i <= wn.Length-1;i++ ) { //перебираємо кожне значення в wn

                d.Columns[wn[i]].HeaderText = nn[i];//присвоюємо стовпцю з назвою елемента wn нову назву з nn

            }

 

        }

 

//=-=-=-=-=-=-=-= Перше перевантаження функції (тільки приховуємо)

        private void fill_grid(string q, DataGridView d, string[] f)

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

            fill_grid(q,d);//викликаємо перевантажену функцію, яка заповнює сітку

            foreach (string fn in f) //перебераємо всі значення f

            {

                d.Columns[fn].Visible = false;//ховаємо заданий стовпець

            }

        }

//Наша стара функція ми її залишимо, щоб, якщо потрібно можна було б її використати

        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 Form1() //створення (конструктор) форми

        {

            InitializeComponent();

            fill_grid("SELECT `inuse`.`id`,`books`.`name` as 'book', `books`.`aughthor`, " + // заповнюємо сітку

                        "`clients`.`name` as 'client',`clients`.`phone`,`users`.`name` as 'personal', " +

                        "`inuse`.`get_date`,`inuse`.`return_date`,`users`.`id` as 'uid',`books`.`id` as 'bid', " +

                        "`clients`.`id` as 'cid'  FROM `inuse` " +

                        "JOIN `books` on `books`.`id`=`inuse`.`book_id` " +

                        "JOIN `clients` on `clients`.`id`=`inuse`.`id_client` " +

                        "JOIN `users` on `users`.`id`=`inuse`.`id_user`;", dataGridView1,

//=-=-=-=-=-=-=-= Наші додаткові параметри

 new string[] { "bid", "uid", "cid", "id" },//перелічуємо назви стовпців, які потрібно приховати

                        new string[] { "book","aughthor","client","phone","personal","get_date","return_date" },//перелічуємо назви стовпців транслітом

                        new string[] { "Книга","Автор","Читач","Телефон","Бібліотекар","Видано","Повернення"}); //нові зрозумілі користувачу назви стовпців

 

            // в переліку полів оператор as переіменовує поля для того, щоб у нас не було

            // полів типу name_1

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

        }

 

        private void видалитиToolStripMenuItem_Click(object sender, EventArgs e)

        {

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

            if (id != "") // якщо вдалося взяти значення

            {

                run_query("DELETE FROM `inuse` WHERE `id`=" + id + ";");//видаляємо

                fill_grid("SELECT `inuse`.`id`,`books`.`name` as 'book', `books`.`aughthor`, " +

                            "`clients`.`name` as 'client',`clients`.`phone`,`users`.`name` as 'personal', " +

                            "`inuse`.`get_date`,`inuse`.`return_date`,`users`.`id` as 'uid',`books`.`id` as 'bid', " +

                            "`clients`.`id` as 'cid'  FROM `inuse` " +

                            "JOIN `books` on `books`.`id`=`inuse`.`book_id` " +

                            "JOIN `clients` on `clients`.`id`=`inuse`.`id_client` " +

                            "JOIN `users` on `users`.`id`=`inuse`.`id_user`;", dataGridView1,

//=-=-=-=-=-=-=-= Наші додаткові параметри

new string[] { "bid", "uid", "cid", "id" },

                        new string[] { "book", "aughthor", "client", "phone", "personal", "get_date", "return_date" },

                        new string[] { "Книга", "Автор", "Читач", "Телефон", "Бібліотекар", "Видано", "Повернення" });

                //оновлюємо сітку

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

            }

        }

 

        private void button1_Click(object sender, EventArgs e) //вибір книжки

        {

            string select_query = "SELECT * FROM `books`;";//запит який буде відображатися на сітці форми 2

            string search_query = "SELECT * FROM `books` WHERE CONCAT(`name`,`aughthor`) LIKE '%{0}%';"; //запит для пошуку

            // замість {0} буде підставлений текст поля вводу для пошуку

            Form2 f2 = new Form2(con,select_query,search_query,"id","name",// створюємо другу форму

//=-=-=-=-=-=-=-= Наші додаткові параметри (тут викликається змінений конструктор, який буде розглянуто в другій частині практичної)

                new string[]{"id"},//стовпці, які потрібно приховати

                new string[] {"name","aughthor","publish"},//старі "незрозумілі" назви

                new string[]{"Назва","Автор","Видана"});//нові назви на які буде переіменовано

            //"id" - поле ідентифікатору яке повертається "name" - поле яке буде відображено в полі вводу

            if (f2.ShowDialog() == DialogResult.OK) //якщо користувач здійснив вибір

            {

                textBox1.Text = f2.name_field; //показуємо що вибрав

                textBox1.Tag = f2.id_field;//запамятовуємо ідентифікатор обраного запису

            }

        }

 

        private void button2_Click(object sender, EventArgs e)// вибір бібліотекаря

            //див. вибір книги

            //обробника різняться лише запитами

            //та іменами назв полів для відображення

        {

            string select_query = "SELECT * FROM `users`;";

            string search_query = "SELECT * FROM `users` WHERE CONCAT(`name`,`phone`) LIKE '%{0}%';";

            Form2 f2 = new Form2(con, select_query, search_query, "id", "name",

//=-=-=-=-=-=-=-= Наші додаткові параметри (тут викликається змінений конструктор, який буде розглянуто в другій частині практичної)

                new string[] { "id", "id_viddilu" },

                new string[] { "name", "phone", "data" },

                new string[] { "Імя", "Телефон", "Дата" });

            if (f2.ShowDialog() == DialogResult.OK)

            {

                textBox2.Text = f2.name_field;

                textBox2.Tag = f2.id_field;

            }

        }

 

        private void button3_Click(object sender, EventArgs e)// вибір бібліотекаря

            //див. вибір книги

            //обробника різняться лише запитами

            //та іменами назв полів для відображення

        {

            string select_query = "SELECT * FROM `clients`;";

            string search_query = "SELECT * FROM `clients` WHERE CONCAT(`name`,`phone`) LIKE '%{0}%';";

            Form2 f2 = new Form2(con,select_query,search_query,"id","name",

//=-=-=-=-=-=-=-= Наші додаткові параметри (тут викликається змінений конструктор, який буде розглянуто в другій частині практичної)

                new string[]{"id"},

                new string[] {"name","phone","adress"},

                new string[] {"Імя","Телефон","Адресса"});

            if (f2.ShowDialog() == DialogResult.OK)

            {

                textBox3.Text = f2.name_field;

                textBox3.Tag = f2.id_field;

            }

        }

 

        private void button4_Click(object sender, EventArgs e) //видача книги

        {

            string get_d = dateTimePicker1.Value.ToString("yyyy-MM-dd");//дати приведені до формату mySQL

            string ret_d = dateTimePicker2.Value.ToString("yyyy-MM-dd");

            if (get_d!=ret_d){// введені дати не мають співпадати

                run_query(String.Format("INSERT INTO `inuse` VALUES(NULL,{0},{1},{2},'{3}','{4}');", //запит на додання

                    textBox2.Tag, textBox3.Tag, textBox1.Tag, get_d, ret_d));//{0},{1},{2},'{3}','{4}' - заміняться цими значеннями

                fill_grid("SELECT `inuse`.`id`,`books`.`name` as 'book', `books`.`aughthor`, " +

                            "`clients`.`name` as 'client',`clients`.`phone`,`users`.`name` as 'personal', " +

                            "`inuse`.`get_date`,`inuse`.`return_date`,`users`.`id` as 'uid',`books`.`id` as 'bid', " +

                            "`clients`.`id` as 'cid'  FROM `inuse` " +

                            "JOIN `books` on `books`.`id`=`inuse`.`book_id` " +

                            "JOIN `clients` on `clients`.`id`=`inuse`.`id_client` " +

                            "JOIN `users` on `users`.`id`=`inuse`.`id_user`;",

//=-=-=-=-=-=-=-= Наші додаткові параметри (тут викликається змінений конструктор, який буде розглянуто в другій частині практичної)

 dataGridView1, new string[] { "bid", "uid", "cid", "id" },

                        new string[] { "book", "aughthor", "client", "phone", "personal", "get_date", "return_date" },

                        new string[] { "Книга", "Автор", "Читач", "Телефон", "Бібліотекар", "Видано", "Повернення" }); //оновлюємо сітку

                textBox1.Text = ""; textBox2.Text = "";//очищаємо введені данні

                textBox3.Text = ""; textBox4.Text = "";

                dateTimePicker1.Value = DateTime.Now;

                dateTimePicker2.Value = DateTime.Now;

            }

            else { MessageBox.Show("Дати співпадають!"); }

        }

 

        private void textBox4_TextChanged(object sender, EventArgs e)//пошук

        {

            fill_grid("SELECT `inuse`.`id`,`books`.`name` as 'book', `books`.`aughthor`, " +

                    "`clients`.`name` as 'client',`clients`.`phone`,`users`.`name` as 'personal', " +

                    "`inuse`.`get_date`,`inuse`.`return_date`,`users`.`id` as 'uid',`books`.`id` as 'bid', "+

                    "`clients`.`id` as 'cid' FROM `inuse` " +

                    "JOIN `books` on `books`.`id`=`inuse`.`book_id` " +

                    "JOIN `clients` on `clients`.`id`=`inuse`.`id_client` " +

                    "JOIN `users` on `users`.`id`=`inuse`.`id_user` "+

                    // використовується функція для обєднання значень полів, а потім

                    //шукається співпадання вже з обєднаним полем

                    "WHERE CONCAT(`books`.`name`,`books`.`aughthor`,`clients`.`name`,`clients`.`phone`,`users`.`name`) LIKE '%"+textBox4.Text+"%';",

                    dataGridView1,

//=-=-=-=-=-=-=-= Наші додаткові параметри (тут викликається змінений конструктор, який буде розглянуто в другій частині практичної)

new string[] { "bid", "uid", "cid", "id" },

                        new string[] { "book", "aughthor", "client", "phone", "personal", "get_date", "return_date" },

                        new string[] { "Книга", "Автор", "Читач", "Телефон", "Бібліотекар", "Видано", "Повернення" });

        }

 

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

        {

            textBox4.Text = "";

        }

 

        private void редагуватиToolStripMenuItem_Click(object sender, EventArgs e)//редагування

        {

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

            //переносимо дані рядка сітки в поля редагування

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

            textBox7.Tag = dataGridView1.Rows[dataGridView1.CurrentRow.Index].Cells["bid"].Value + "";

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

            textBox6.Tag = dataGridView1.Rows[dataGridView1.CurrentRow.Index].Cells["uid"].Value + "";

            textBox5.Text=dataGridView1.Rows[dataGridView1.CurrentRow.Index].Cells["client"].Value + "";

            textBox5.Tag = dataGridView1.Rows[dataGridView1.CurrentRow.Index].Cells["cid"].Value + "";

            dateTimePicker4.Value = DateTime.Parse(dataGridView1.Rows[dataGridView1.CurrentRow.Index].Cells["get_date"].Value+"");

            dateTimePicker3.Value = DateTime.Parse(dataGridView1.Rows[dataGridView1.CurrentRow.Index].Cells["return_date"].Value + "");

        }

 

        private void button8_Click(object sender, EventArgs e)// вибір книги

            //процедура аналогічна іншим викликам другої форми

            //див. вище

        {

            string select_query = "SELECT * FROM `books`;";

            string search_query = "SELECT * FROM `books` WHERE CONCAT(`name`,`aughthor`) LIKE '%{0}%';";

            Form2 f2 = new Form2(con, select_query, search_query, "id", "name",

//=-=-=-=-=-=-=-= Наші додаткові параметри (тут викликається змінений конструктор, який буде розглянуто в другій частині практичної)

                new string[]{"id"},

                new string[] {"name","aughthor","publish"},

                new string[]{"Назва","Автор","Видана"});

            if (f2.ShowDialog() == DialogResult.OK)

            {

                textBox7.Text = f2.name_field;

                textBox7.Tag = f2.id_field;

            }

        }

 

        private void button7_Click(object sender, EventArgs e)// вибір бібліотекаря

        //процедура аналогічна іншим викликам другої форми

        //див. вище

        {

            string select_query = "SELECT * FROM `users`;";

            string search_query = "SELECT * FROM `users` WHERE CONCAT(`name`,`phone`) LIKE '%{0}%';";

            Form2 f2 = new Form2(con, select_query, search_query, "id", "name",

//=-=-=-=-=-=-=-= Наші додаткові параметри (тут викликається змінений конструктор, який буде розглянуто в другій частині практичної)

                new string[] {"id","id_viddilu"},

                new string[]{"name","phone","data"},

                new string[] {"Імя","Телефон","Дата"});

            if (f2.ShowDialog() == DialogResult.OK)

            {

                textBox6.Text = f2.name_field;

                textBox6.Tag = f2.id_field;

            }

        }

 

        private void button6_Click(object sender, EventArgs e)// вибір читача

        //процедура аналогічна іншим викликам другої форми

        //див. вище

        {

            string select_query = "SELECT * FROM `clients`;";

            string search_query = "SELECT * FROM `clients` WHERE CONCAT(`name`,`phone`) LIKE '%{0}%';";

            Form2 f2 = new Form2(con, select_query, search_query, "id", "name",

//=-=-=-=-=-=-=-= Наші додаткові параметри (тут викликається змінений конструктор, який буде розглянуто в другій частині практичної)

                new string[] { "id" },

                new string[] { "name", "phone", "adress" },

                new string[] { "Імя", "Телефон", "Адресса" });

            if (f2.ShowDialog() == DialogResult.OK)

            {

                textBox5.Text = f2.name_field;

                textBox5.Tag = f2.id_field;

            }

        }

 

        private void button10_Click(object sender, EventArgs e)// очищення полів вводу після редагування

        {

            textBox5.Text = ""; textBox6.Text = "";

            textBox7.Text = "";

            dateTimePicker3.Value = DateTime.Now;

            dateTimePicker4.Value = DateTime.Now;

            tabControl1.SelectedIndex =0;

        }

 

        private void button9_Click(object sender, EventArgs e)//редагування рядка

        {

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

            if (id != "")//якщо вдалося визначити ідентифікатор запису

            {

                string cid = textBox5.Tag+"";//ід. читача

                string uid = textBox6.Tag + "";//ід. бібліотекаря

                string bid = textBox7.Tag + "";//ід.книги

                string gd=dateTimePicker4.Value.ToString("yyyy-MM-dd");//дата видачі

                string rd = dateTimePicker3.Value.ToString("yyyy-MM-dd");//тата повернення

                //запит на редагування

                run_query("UPDATE `inuse` SET `id_user`="+uid+",`id_client`="+cid+",`book_id`="+bid+",`get_date`='"+gd+"',`return_date`='"+rd+"' WHERE `id`=" + id + ";");

                //оновлення сітки

                fill_grid("SELECT `inuse`.`id`,`books`.`name` as 'book', `books`.`aughthor`, " +

                            "`clients`.`name` as 'client',`clients`.`phone`,`users`.`name` as 'personal', " +

                            "`inuse`.`get_date`,`inuse`.`return_date`,`users`.`id` as 'uid',`books`.`id` as 'bid', " +

                            "`clients`.`id` as 'cid'  FROM `inuse` " +

                            "JOIN `books` on `books`.`id`=`inuse`.`book_id` " +

                            "JOIN `clients` on `clients`.`id`=`inuse`.`id_client` " +

                            "JOIN `users` on `users`.`id`=`inuse`.`id_user`;", dataGridView1,

//=-=-=-=-=-=-=-= Наші додаткові параметри (тут викликається змінений конструктор, який буде розглянуто в другій частині практичної)

new string[] { "bid", "uid", "cid", "id" },

                        new string[] { "book", "aughthor", "client", "phone", "personal", "get_date", "return_date" },

                        new string[] { "Книга", "Автор", "Читач", "Телефон", "Бібліотекар", "Видано", "Повернення" });

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

            }

        }

    }

 

Код другої, підлеглої форми

 

public partial class Form2 : Form

    {

        private static 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 fill_grid(string q, DataGridView d, string[] f, string[] wn, string[] nn)

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

            //та переіменовуємо стовпці wn в nn

            fill_grid(q, d, f);

            for (int i = 0; i <= wn.Length - 1; i++)

            {

                d.Columns[wn[i]].HeaderText = nn[i];

            }

 

        }

//=-=-=-=-=-=-=-= Перше перевантаження функції занесення даних на сітку

 

        private void fill_grid(string q, DataGridView d, string[] f)

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

            fill_grid(q, d);

            foreach (string fn in f)

            {

                d.Columns[fn].Visible = false;

            }

        }

 

        private void run_query(string q)

        {

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

            MySqlCommand com = new MySqlCommand(q, con);

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

        }

 

        public string id_field { get; set; } //зберігаємо ід. запису для повернення

        public string name_field { get; set; }//зберігаємо назву запису для повернення

        private string sel_q;//зберігаємо запит який потрібно відобразити на сітці

        private string srch_q;//зберігаємо запит пошуку по таблиці

        private string id_name;//назва поля фдентифікатору запису

        private string name_name;//назва поле фмені яке повертається для відображення

 

        public Form2(MySqlConnection c,string sel_q,string sq,string id,string name)//старий конструктор форми

        //c зєднання,sel_q - запит для відображення,sq - запит для пошуку,id - поле ідентифікатору,name - поле назви

        {

            InitializeComponent();

            con = c;//зберігаємо підключення

            run_select(sel_q, sq,id,name);//процедура ініціалізації даних форми

        }

//=-=-=-=-=-=-=-= Перше перевантаження конструктора форми який лише дозволяє приховувати стовпці

 

        public Form2(MySqlConnection c,string sel_q,string sq,string id,string name,string[] f)//конструктор форми

        //c зєднання,sel_q - запит для відображення,sq - запит для пошуку,id - поле ідентифікатору,name - поле назви

        //f - імена стовпців, які потрібно "сховати"

        {

            InitializeComponent();

            con = c;//зберігаємо підключення

            run_select(sel_q, sq,id,name,f);//процедура ініціалізації даних форми

        }

//=-=-=-=-=-=-=-= Друге перевантаження конструктора форми, ховає + переіменовує

 

        public Form2(MySqlConnection c, string sel_q, string sq, string id, string name, string[] f, string[] wn, string[] nn)//конструктор форми

        //c зєднання,sel_q - запит для відображення,sq - запит для пошуку,id - поле ідентифікатору,name - поле назви

        //f - імена стовпців, які потрібно "сховати", та переіменовує стовпці wn в nn

        {

            InitializeComponent();

            con = c;//зберігаємо підключення

            run_select(sel_q, sq, id, name,f,wn,nn);//процедура ініціалізації даних форми

        }

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

// це стара не перевантажена функція

        public void run_select(string select_query,string search_query,string id_,string name_)

        {

            sel_q = select_query;//зберігаємо запит на відображення

            srch_q = search_query;//зберігаємо запит для пошуку

            id_name = id_;// зберігаємо поле ідентифікатору

            name_name = name_;//зберігаємо поле імені

            fill_grid(sel_q, dataGridView1);//заповнюємо сітку форми

            label2.Text = "Нічого не вибрано";//мітка для відображення вибору

        }

//=-=-=-=-=-=-=-= Перше перевантаження функції яка лише приховує стовпці

        public void run_select(string select_query, string search_query, string id_, string name_, string[] f)

        {

            sel_q = select_query;//зберігаємо запит на відображення

            srch_q = search_query;//зберігаємо запит для пошуку

            id_name = id_;// зберігаємо поле ідентифікатору

            name_name = name_;//зберігаємо поле імені

            fill_grid(sel_q, dataGridView1,f);//заповнюємо сітку форми

            label2.Text = "Нічого не вибрано";//мітка для відображення вибору

        }

//=-=-=-=-=-=-=-= Друге перевантаження функції приховує + перейменовує стовпці

        public void run_select(string select_query, string search_query, string id_, string name_, string[] f, string[] wn, string[] nn)

        {

            sel_q = select_query;//зберігаємо запит на відображення

            srch_q = search_query;//зберігаємо запит для пошуку

            id_name = id_;// зберігаємо поле ідентифікатору

            name_name = name_;//зберігаємо поле імені

            fill_grid(sel_q, dataGridView1,f,wn,nn);//заповнюємо сітку форми

            label2.Text = "Нічого не вибрано";//мітка для відображення вибору

        }

 

        private void textBox1_TextChanged(object sender, EventArgs e)//зміна поля пошуку

        {

            fill_grid(String.Format(srch_q, textBox1.Text), dataGridView1);//форматуємо запит для пошуку - підставляємо значення поля в потрібне місце

        }

 

        private void button2_Click(object sender, EventArgs e)//користувач відмовився від вибору

        {

            this.DialogResult = DialogResult.Cancel;//форма закриваєтья, статус відмінено

        }

 

        private void button1_Click(object sender, EventArgs e)//вибір запису

        {

            id_field = dataGridView1.Rows[dataGridView1.CurrentRow.Index].Cells[id_name].Value+"";//беремо значення ідентифікатору

            name_field = dataGridView1.Rows[dataGridView1.CurrentRow.Index].Cells[name_name].Value + "";//беремо значення поля імені

            if ((id_field != "") && (name_field != ""))//якщо значення не порожні

            { this.DialogResult = DialogResult.OK; }//форма закривається, статус - ОК

            else { MessageBox.Show("Потрібно щось обрати!"); }//повідомлення про помилку

        }

 

        private void dataGridView1_CellClick(object sender, DataGridViewCellEventArgs e)//змінилася вибрана клітинка на сітці

        {

            label2.Text="Обрано: ("+//пишемо на мітці поточний вибір

                dataGridView1.Rows[dataGridView1.CurrentRow.Index].Cells[id_name].Value+") "+

                dataGridView1.Rows[dataGridView1.CurrentRow.Index].Cells[name_name].Value + "";

        }

    }

 

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

         Аналогічно до даного прикладу переробіть і інші форми минулої практичної.