C#. Windows Forms. Курсова робота. Розробка програми автоматизації роботи диспетчера кас




Розробка програми автоматизації роботи диспетчера кас

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

Додаток реалізований в Microsoft Visual Studio 2010 на мові програмування C#. База даних Microsoft Access.


Зміст

Пошук на інших ресурсах:


Умова задачі

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

Вхідні дані для виконання роботи наступні:

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

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

  • дані про маршрут;
  • дані про продані білети;
  • дані про диспетчера, що вносить зміни в базу даних;
  • дані про автобус, на якому здійснюється перевезення;
  • дані про водія, що здійснює перевезення.

 


Схожі теми:

 

Виконання

1. Розробка (підключення) бази даних

Базу даних проектуємо в системі Microsoft Access. Ім’я файлу бази даних даємо “02_02_00_009_Baza_ua.mdb“. Готову базу даних можна завантажити тут.

Згідно з умовою задачі, маємо 6 таблиць. П’ять таблиць містять дані про:

  • маршрут перевезення;
  • продані білети;
  • диспетчера, що вносить інформацію в базу даних;
  • транспортний засіб (автобус, маршрутне таксі), на якому здійснюється перевезення;
  • водія, що виконує перевезення.

Назвемо ці таблиці іменами: “Маршрут“, “Білет“, “Диспетчер“, “Автобус“, “Водій“.

Шоста таблиця є результатом роботи додатку у взаємодії з базою даних. У цій таблиці безпосередньо фіксується перевезення. Назвемо її “Перевезення”.

Таблиці “Маршрут“, “Білет“, “Диспетчер“, “Автобус“, “Водій” є первинними по відношенню до таблиці “Перевезення“.

Структура таблиць наведена нижче.

Таблиця “Маршрут“.

Таблиця "Маршрут"

Таблиця “Білет“.

Таблиця "Білет"

Таблиця “Диспетчер“.

Таблиця "Диспетчер"

Таблиця “Автобус“.

Таблиця "Автобус"

Таблиця “Водій“.

Таблиця "Водій"

Таблиця “Перевезення“.

Таблиця "Перевезення"

Схема взаємодії між таблицями бази даних зображена на рисунку 1.

Схема взаємодії між таблицями бази даних

Рис. 1. Схема взаємодії між таблицями бази даних

 

2. Розробка UML-діаграм

Побудова моделі бази даних базувалась на використанні уніфікованої мови моделювання UML (Unified Modeling Language).

Щоб не вдаватись в деталі розробки бази даних на мові UML в даній статті опишемо основні UML-діаграми.

 

2.1. UML-діаграма використання

Діаграма використання на мові UML (рис. 2) дає відповідь про призначення системи у зовнішньому світі.

UML-діаграма використання

Рис. 2. Діаграма використання

 

2.2. UML-діаграма діяльності

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

UML-діаграма діяльності диспетчера кас

Рис. 3. UML-діаграма діяльності диспетчера кас

 

2.3. UML-діаграма взаємодії

На діаграмі взаємодії відображаються тільки ті об’єкти, що безпосередньо беруть участь у взаємодії. Ключовим моментом для діаграм взаємодії (або послідовності) є динаміка взаємодії об’єктів у часі.

UML-діаграма взаємодії

Рис. 4. UML-діаграма взаємодії

 

2.4. UML-діаграма класів

При побудові UML моделі розрізняють поняття класу. Класом називається опис сукупностей об’єктів з спільними атрибутами.

Графічно клас відображається у вигляді прямокутника.

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

Бази даних залежності класи програма

Рис. 5. Відображення залежностей між класами програми

Наступні кроки описують розробку програмної системи.

 

3. Розробка програмної системи

Завантажити MS Visual Studio 2010. Створити проект як Windows Forms Application. Встановити шаблон “Visual C#”, тип проекту Windows Forms Application.

Зберегти проект у деякій папці. Наприклад, у папці

C:\Programs\C_SHARP\Program_02_02_00_009u

Ім’я додатку даємо за замовчуванням “WindowsFormsApplication1“.

У результаті буде створено форму додатку, яка зображена на рисунку 6.

C#. Windows Forms. Початкова форма додатку

Рис. 6. Початкова форма додатку

 

4. Підключення бази даних

На цьому кроці здійснимо підключення бази даних “02_02_00_009_Baza_ua.mdb” до нашого додатку. Процес підключення бази даних до додатку детально описаний тут. На цьому етапі йде виклик майстра підключення до бази даних, що складається з декількох етапів.

 

4.1. Підключення файлу бази даних до додатку

Щоб викликати процес підключення до бази даних, необхідно викликати команду “Add New Data Source …” з меню “Data“.

У вікні вибору типу джерела бази даних вибираємо Database. У вікні вибору моделі підключення до бази даних вибираємо Dataset (модель на основі набору даних).

У вікні вибору з’єднання з базою даних вибираємо “New Connection…” і в наступному вікні вибираємо тип з’єднання “Microsoft Access Database File (OLE DB)“. Файл бази даних рекомендовано зберегти у тій самій папці, що й файли додатку. У нашому випадку шлях до файлу бази даних у вікні вибору з’єднання є наступний:

C:\Programs\C_SHARP\Program_02_02_00_009u\WindowsFormsApplication1\WindowsFormsApplication1\02_02_00_009_Baza_ua.mdb

У наступних вікнах залишаємо все без змін. На питання

Save the Connection String to the Application Configuration File

даємо відповідь “Yes” і рядок з’єднання залишаємо без змін.

У вікні “Choose Your Database Objects” вибираємо усі таблиці і завершуємо роботу майстра кліком на кнопці “Finish“.

Після виконаних дій з допомогою майстра підключення до бази даних, вікно Server Explorer буде мати вигляд, як показано на рисунку 7.

C# Windows Forms Результат підключення база даних

Рис. 7. Результат підключення до бази даних

 

4.2. Підключення методів оперування базою даних

Для того, щоб програмно оперувати базою даних та отримати доступ до методів, що оперують базою даних, потрібно підключити простір імен System.Data.OleDb.

Для цього, в основній формі Form1.cs в Solution Explorer вибираємо режим перегляду коду (View Code) з контекстного меню (рис. 8) і на початку файлу додаємо наступний рядок:

using System.Data.OleDb;

режим програмного коду форма Form1.cs

Рис. 8. Виклик режиму програмного коду форми Form1.cs

Загальний вигляд верхньої частини файлу Form1.cs вже має вигляд:

using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Linq;
using System.Text;
using System.Windows.Forms;
using System.Data.OleDb;

 

5. Проектування форми додатку

Для проектування форми використовуються елементи управління (controls) з панелі Toolbox (рис. 9).

Microsoft Visual Studio Windows Forms Панель Toolbox

Рис. 9. Панель Toolbox

 

5.1. Розробка меню

Для побудови меню використовується елемент управління menuStrip з вкладки “Menus & Toolbars“, що розміщується на панелі ToolBox (рис. 10).

MS Visual Studio C# Елемент управління MenuStrip

Рис. 10. Елемент управління MenuStrip

Розробка меню з допомогою елементу управління MenuStrip детально описується тут. Будуємо меню як показано на рисунку 11.

MS Visual Studio C# Розробка меню

Рис. 11. Розробка меню “Перевезення” та “Перегляд

 

5.2. Елементи управління DataGridView

Змінюємо розміри форми і виносимо на форму два елементи управління DataGridView з вкладки Data (рис. 12).

MS Visual Studio C# Елементи управління DataGridView

Рис. 12. Елементи управління DataGridView

 

5.3. Елементи управління типу GroupBox

Активуємо вкладку Containers з панелі інструментів Toolbox.

Розміщуємо на формі 4 елементи управління типу GroupBox (рис. 13). У результаті отримуємо 4 об’єкти з іменами groupBox1, groupBox2, groupBox3, groupBox4. З допомогою цих імен можна мати доступ до властивостей (properties) та методів цих об’єктів.

C# Windows Forms Елемент управління GroupBox

Рис. 13. Елементи управління типу GroupBox

Встановлюємо підпис об’єкту groupBox1. Це здійснюється з допомогою властивості Text як показано на рисунку 14. Значення властивості Text рівне “Фільтр“. У цій групі будуть розміщуватись об’єкти, що відповідають за фільтрування даних у базі даних.

Таким самим чином встановлюємо значення інших трьох об’єктів:
– в об’єкті groupBox2 властивість Text = “Перевезення”;
– в об’єкті groupBox3 властивість Text = “Перегляд”;
– в об’єкті groupBox4 властивість Text = “Команди”.

C# Windows Forms Властивість Text об’єкту groupBox1

Рис. 14. Властивість Text об’єкту groupBox1

Після внесених змін форма додатку матиме вигляд як показано на рисунку 15.

C# Windows Forms Форма додатку

Рис. 15. Форма додатку після формування об’єктів groupBox1, groupBox2, groupBox3, groupBox4

 

5.4. Розміщення елементів управління типу Label, Button, TextBox та ComboBox

Елементи управління типу Button та TextBox розміщуються у вкладці “Common Controls” панелі інструментів Toolbox (рис. 16).

C# Windows Forms Елементи управління Label Button TextBox ComboBox

Рис. 16. Елементи управління Label, Button, TextBox та ComboBox з панелі інструментів Toolbox

 

5.5. Побудова елементів управління з групи “Фільтр”

В області об’єкту groupBox1 (“Фільтр“) розміщуємо один елемент управління типу ComboBox, два елементи типу Label, один елемент управління типу Button і один елемент управління типу TextBox (рис. 17).

C# Windows Forms Елементи управління

Рис. 17. Елементи управління label1, label2, button1, comboBox1, textBox1 у групі “Фільтр

Встановлюємо такі властивості елементів управління:
– в елементі управління label1 властивість Text рівна значення “Поле“;
– в елементі управління label2 властивість Text = “Маска”;
– в button1 властивість Text = “Застосувати”.

Додатково змінюємо розміри елементів управління button1 та textBox1 для більш наглядного вигляду.

Після зміни внесених змін вікно форми має вигляд (рис. 18).

C# Windows Forms Вікно форми

Рис. 18. Вікно форми після формування елементів управління з groupBox1

 

5.6. Проектування елементів управління, що розміщуються в групі “Перевезення

Таким самим чином (п. 5.5) формуємо групу “Перевезення” (groupBox2). З панелі Toolbox розміщуємо два елементи управління типу Button та формуємо їх властивості Text як показано на рисунку 19. Буде створено два об’єкти типу Button з іменами button2 і button3.

Властивість Text об’єкту button2 встановлюємо в значення “Додати…“. Властивість Text об’єкту button3 встановлюємо в значення “Видалити“.

C# Windows Forms Проектування елементів управління формиРис. 19. Проектування елементів управління, що розміщуються в групі “Перевезення

 

5.7. Проектування елементів управління, що розміщуються в групі “Перегляд

З панелі Toolbox розміщуємо 5 елементів управління типу Button в області групи “Перегляд” (об’єкт groupbox3). Корегуємо розміри цих елементів управління.

У результаті буде створено 5 об’єктів з іменами button4, button5, button6, button7, button8.

В кожному з об’єктів формуємо властивість Text:
– в об’єкті button4 властивість Text = “Білети”;
– в об’єкті button5 властивість Text = “Маршрути”;
– в об’єкті button6 властивість Text = “Автобуси”;
– в об’єкті button7 властивість Text = “Водії”;
– в об’єкті button8 властивість Text = “Диспетчери”.

Після проектування форма додатку зі сформованою групою “Перегляд” матиме вигляд як показано на рисунку 20.

C# Windows Forms Елементи управління

Рис. 20. Елементи управління з групи “Перегляд

 

5.8. Проектування елементів управління, що розміщуються в групі “Команди

У групі “Команди” розмістимо два елементи управління типу Button.

Утвориться два об’єкти з іменами button9 та button10.

Встановимо властивість Text цих об’єктів відповідно у значення “Додати…” та “Видалити“.

У результаті, форма додатку матиме вигляд як показано на рисунку 21.

C# Windows Forms Форма додаткуРис. 21. Форма додатку після розміщення усіх елементів управління

 

6. Формування списку в елементі управління comboBox1

Елемент управління (об’єкт) comboBox1, що використовується у групі “Фільтр“, повинен містити поля, до яких буде застосовуватись фільтр для зручного виведення даних з бази даних.

У додатку, в майбутньому, фільтр будемо застосовувати до таких полів:

  • номер перевезення;
  • номер маршруту;
  • пункт призначення;
  • пасажир.

Для виклику процесу формування списку викликаємо редактор рядків елемента управління comboBox1 (рис. 22). Для цього, після активування (виділення) comboBox1 робимо клік на кнопці “>” (стрілка вправо). Відкриється меню, в якому вибираємо “Edit Items…“.

C# Windows Forms меню формування списку comboBox1Рис. 22. Виклик меню формування списку в comboBox1

У результаті відкриється вікно “String Collection Editor“, в якому заносимо назви полів, для яких буде встановлено фільтр.

C# Windows Forms Вікно редактора рядків елемента управління comboBox1Рис. 23. Вікно редактора рядків елемента управління comboBox1

Після натиску на “OK” буде сформовано рядки елементу управління comboBox1.

 

7. Отримання властивості ConnectionString

У наступних програмних кодах, де виконуються операції з базою даних, фігурує властивість “ConnectionString“. Цю властивість потрібно вміти правильно прочитати.

Властивість “ConnectionString” містить інформацію про провайдера даних та про розміщення файлу бази даних на диску.

Для отримання тексту властивості ConnectionString потрібно виконати такі кроки (рис. 24):

  • у вікні Server Explorer виділити базу даних “02_02_00_009_Baza_ua.mdb“;
  • у вікні Properties вибрати властивість ConnectionString та скопіювати її в буфер обміну Clipboard.

C# Windows Forms Читання властивість "ConnectionString"Рис. 24. Читання властивості “ConnectionString

У нашому випадку значення властивості “ConnectionString” рівне:

Provider=Microsoft.Jet.OLEDB.4.0;Data Source=C:\Programs\C_SHARP\Program_02_02_00_009u\WindowsFormsApplication1\WindowsFormsApplication1\02_02_00_009_Baza_ua.mdb

Зауваження. При використанні рядка “ConnectionString” у тексті програми на мові C#, символ ‘\‘ потрібно замінити на ‘\\‘ згідно з синтаксисом мови.

 

8. Додавання внутрішніх змінних загального доступу до форми “Form1.cs“.

Основній формі додатку відповідає клас Form1. При написанні програмного коду у класі буде використано деякі внутрішні змінні загального призначення. Це змінні “ConnectionString” та act_table.

Перша змінна буде містити рядок з’єднання з базою даних “ConnectionString“.

Друга змінна містить номер активної таблиці, що буде виводитись в dataGridView2. Відповідність між номерами і таблицями бази даних наступна:

  • 1 – таблиця “Білет“;
  • 2 – таблиця “Маршрут“;
  • 3 – таблиця “Автобус“;
  • 4 – таблиця “Водій“;
  • 5 – таблиця “Диспетчер“.

Здійснимо додавання тексту властивості “ConnectionString” у текст класу головної форми програми.

З допомогою Solution Explorer відкриємо файл Form1.cs командою “View Code” (рис. 25).

C# Windows Forms команда переходу до перегляду програмного кодуРис. 25. Виклик команди переходу до перегляду програмного коду форми Form1

У результаті створиться вкладка з програмним кодом, що описаний у файлі “Form1.cs“.

Лістинг файлу форми наступний:

using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Linq;
using System.Text;
using System.Windows.Forms;

namespace WindowsFormsApplication1
{
    public partial class Form1 : Form
    {
        public Form1()
        {
            InitializeComponent();
        }
    }
}

Модифікуємо цей лістинг таким чином, щоб в ньому були додані дві змінні ConnectionString та act_table. Змінну ConnectionString описуємо як public, тому що вона буде використовуватись в інших класах. Для зручного відображення у вікні проектування, рядок змінної ConnectionString розбито на частини.

public string ConnectionString = "Provider=Microsoft.Jet.OLEDB.4.0;" +
      "Data Source=" +
      "C:\\Programs\\C_SHARP\\Program_02_02_00_009u\\" +
"WindowsFormsApplication1\\WindowsFormsApplication1\\02_02_00_009_Baza_ua.mdb";

private int act_table = 1; // активна таблиця (1-білети, 2-маршрути, 3-автобуси, 4-водії, 5 - диспетчери

Лістинг класу Form1 основної форми додатку має вигляд:

...
public partial class Form1 : Form
{
  public string ConnectionString = "Provider=Microsoft.Jet.OLEDB.4.0;" +
    "Data Source=C:\\Programs\\C_SHARP\\Program_02_02_00_009u\\" +
            "WindowsFormsApplication1\\WindowsFormsApplication1\\02_02_00_009_Baza_ua.mdb";
  private int act_table = 1; // активна таблиця: 1-білети, 2-маршрути, 3-автобуси, 4-водії, 5 - диспетчери
  public Form1()
  {
    InitializeComponent();
  }
}
...

 

9. Виведення даних в dataGridView1

Дані які будуть виводитись в компоненті dataGridView1 отримуються з різних таблиць. Щоб відбувалось фільтрування даних, потрібно враховувати рядок, що вибраний в comboBox1 і маску яка міститься в елементі управління textBox1. У comboBox1 користувач має змогу вибирати поле, на основі якого буде відбуватись фільтрування даних.

 

9.1. Текст SQL-запиту

У таблиці наведено вигляд полів, що будуть виводитись в dataGridView1.

02_02_00_009_table07u

Поля, які потрібно виводити згідно з синтаксисом мови SQL наведено нижче:

[Перевезення].[Номер]
[Маршрут].[Номер маршруту]
[Маршрут].[Пункт призначення]
[Маршрут].[Час відправлення]
[Маршрут].[Час прибуття]
[Білет].[Місце]
[Білет].[П_І_Б пасажира]
[Білет].[Вартість]
[Водій].[П_І_Б]

Запит на мові SQL для побудови таблиці має такий вигляд:

SELECT
  [Перевезення].[Номер],
  [Маршрут].[Номер маршруту],
  [Маршрут].[Пункт призначення], 
  [Маршрут].[Час відправлення],
  [Маршрут].[Час прибуття],
  [Білет].[Місце],
  [Білет].[П_І_Б пасажира],
  [Білет].[Вартість],
  [Водій].[П_І_Б]
FROM
  [Перевезення],
  [Маршрут],
  [Білет],
  [Водій]
WHERE
  ([Перевезення].[ID_Marshrut]=[Маршрут].[ID_Marshrut]) AND
  ([Перевезення].[ID_Bilet] = [Білет].[ID_Bilet]) AND
  ([Перевезення].[ID_Vodij] = [Водій].[ID_Vodij])

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

Наприклад, для додавання фільтру за номером перевезення, до тексту SQL-запиту потрібно додати такий рядок:

 AND ([Перевезення].[Номер] = '" + textBox1.Text + "')

де textbox1.Text – текст фільтру у компоненті textbox1.

 

9.2. Програмування події кліку на кнопці “Застосувати

Виклик виведення даних на основі фільтру здійснюється після натиску на кнопці “Застосувати“.

Процес програмування події в MS Visual Studio детально описаний тут. Виведення бази даних в елементі управління dataGridView описується тут.

Програмуємо подію кліку на кнопці “Застосувати“.

Обробник події кліку на кнопці “Застосувати” має вигляд.

private void button1_Click(object sender, EventArgs e)
{
  string CommandText = "SELECT " +
         "[Перевезення].[Номер], " +
         "[Маршрут].[Номер маршруту], " +
         "[Маршрут].[Пункт призначення], " +
         "[Маршрут].[Час відправлення], " +
         "[Маршрут].[Час прибуття], " +
         "[Білет].[Місце], " +
         "[Білет].[П_І_Б пасажира], " +
         "[Білет].[Вартість], " +
         "[Водій].[П_І_Б] " +
       "FROM " +
         "[Перевезення], " +
         "[Маршрут], " +
         "[Білет], " +
         "[Водій] " +
       "WHERE " +
         "([Перевезення].[ID_Marshrut]=[Маршрут].[ID_Marshrut]) AND " +
         "([Перевезення].[ID_Bilet] = [Білет].[ID_Bilet]) AND " +
         "([Перевезення].[ID_Vodij] = [Водій].[ID_Vodij]) ";

  if (textBox1.Text != "")  // якщо набрано текст у полі фільтру
  {
    if (comboBox1.SelectedIndex == 0) // № перевезення
      CommandText = CommandText + " AND ([Перевезення].[Номер] = '" + textBox1.Text + "')";
    if (comboBox1.SelectedIndex == 1) // № маршруту
      CommandText = CommandText + " AND (Маршрут.[Номер маршруту] = '" + textBox1.Text + "') ";
    if (comboBox1.SelectedIndex == 2) // Пункт призначення
      CommandText = CommandText + " AND (Маршрут.[Пункт призначення] LIKE '" + textBox1.Text + "%') ";
    if (comboBox1.SelectedIndex == 3) // Пасажир
      CommandText = CommandText + " AND (Білет.[П_І_Б пасажира] LIKE '" + textBox1.Text + "%') ";
    if (comboBox1.SelectedIndex == 4) // Водій
      CommandText = CommandText + " AND (Водій.П_І_Б LIKE '" + textBox1.Text + "%') ";
  }
  OleDbDataAdapter dataAdapter = new OleDbDataAdapter(CommandText, ConnectionString);
  DataSet ds = new DataSet();
  dataAdapter.Fill(ds, "[Перевезення]");
  dataGridView1.DataSource = ds.Tables["[Перевезення]"].DefaultView;
}

Спочатку, у змінну CommandText, додається рядок SQL-запиту який виводить усі дані з бази даних. Потім, в залежності від фільтру, у значення CommandText дописується відповідна SQL-команда.

Після побудови CommandText, створюється об’єкт типу OleDbDataAdapter, який пересилає набори даних з викликаючого процесу і назад. Адаптери даних містять набір з чотирьох внутрішніх об’єктів команд. Це команди читання, вставки, зміни і видалення інформації. Як видно з програмного коду, конструктор об’єкту отримує вхідними параметрами рядок запиту на мові SQL та рядок підключення до бази даних. Отже, об’єкт адаптеру даних уже зв’язаний з нашою базою даних.

Після створення адаптера даних (OleDbDataAdapter) створюємо об’єкт типу DataSet (набір даних):

DataSet ds = new DataSet();

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

Наступна команда – це заповнення набору даних (змінна ds) значеннями записів з бази даних на основі SQL-запиту, що міститься в адаптері даних dA з допомогою методу Fill():

dataAdapter.Fill(ds, "[Перевезення]");

Для відображення (візуалізації) даних, сформованих на основі SQL-запиту, потрібно щоб властивість DataSource компонента dataGridView1 посилалась на деяку таблицю набору даних ds. Наприкла, таблицю “Перевезення“. Програмний код операції відображення даних має наступний вигляд:

dataGridView1.DataSource = ds.Tables["[Перевезення]"].DefaultView;

Після цього дані з таблиці “Перевезення” відобразяться на формі.

9.3. Додавання методу button1_Click() у метод Form1_Load()

Метод Form_Load() викликається у момент завантаження форми. Дописуємо в цей метод виклик методу обробки події button1_Click().

На даний момент лістинг методу наступний.

private void Form1_Load(object sender, EventArgs e)
{
    comboBox1.SelectedIndex = 0;
    button1_Click(sender, e);
}

 

10. Розробка форми додавання перевезення та створення її програмного коду

Додавання нового перевезення виконується натиском кнопки “Додати…” з групи “Перевезення“. Для того, щоб створювати поля, що використовуються у відображенні перевезення (елемент управління dataGridView1), потрібно створити відповідну форму.

 

10.1. Розробка форми “Form2.cs”

Процес створення нової форми у MS Visual Studio на мові C# детально описаний тут.

Створення нової форми виконується командою

Project -> Add Windows Form...

У вікні, що відкриється, вибираємо “Windows Form“. Ім’я форми залишаємо “Form2.cs“.

У результаті в “Solution Explorer” отримаємо файли “Form2.cs” та “Form2.Designer.cs“.

На рисунку 26 відображено вигляд форми, що відображає дані для перевезення.

C# Windows Forms Створення форми "Form2.cs"Рис. 26. Створення форми “Form2.cs

Змінюємо розміри форми “Form2.cs” і розміщуємо на формі елементи управління так як відображено на рисунку 27. Червоним кольором виділено назви елементів управління, які будуть використовуватись у програмному коді.

C# Windows Forms Форма "Form2.cs"Рис. 27. Форма “Form2.cs” з описом назв елементів управління

В загальному, форма “Form2.cs” має вигляд, як показано на рисунку 28.

C# Windows Forms Форма "Form2.cs"Рис. 28. Форма “Form2.cs” після розробки

Після побудови форми буде створено клас форми з іменем Form2. Лістинг опису класу форми Form2 наступний:

using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Linq;
using System.Text;
using System.Windows.Forms;

namespace WindowsFormsApplication1
{
    public partial class Form2 : Form
    {
        public Form2()
        {
            InitializeComponent();
        }
}

 

10.2. Програмування подій кліку на кнопках “Додати” та “Відмінити“.

Викликаємо подію Click що генерується при кліку на кнопці “Додати” форми Form2. Процес програмування нової події детально описаний тут.

У результаті, в класі форми буде сформовано код, в якому потрібно вставити текст обробника події.

Лістинг методу обробки події кліку на кнопці “Додати” наступний:

private void button3_Click(object sender, EventArgs e)
{
    this.DialogResult = DialogResult.OK;
}

Так само лістинг методу обробки події кліку на кнопці “Відмінити“:

private void button4_Click(object sender, EventArgs e)
{
      this.DialogResult = DialogResult.No;
}

 

10.3. Програмування методів відображення даних у елементах управління dataGridView1, dataGridView2, dataGridView3, dataGridView4, dataGridView5.

Для того, щоб мати доступ до методів та властивостей що використовуються при роботі з базами даних, у файлі “Form2.cs” підключаємо простір імен (див. п. 4.2):

using System.Data.OleDb;

Для відображення даних в елементах управління типу DataGridView створюємо додатковий метод Get_Table(), який отримує два параметри. Параметр table_name задає назву таблиці в базі даних. Параметр num_dG задає номер елементу управління типу DataGridView – від 1 до 5. Наприклад, якщо num_dG=2, то це означає що відбражаються дані в елементі управління dataGridView2.

Лістинг методу Get_Table() наступний:

private void Get_Table(string table_name, int num_dG)
{
  Form1 f1 = new Form1();
  string CommandText = "SELECT * FROM ";
  CommandText += table_name;
  OleDbDataAdapter dataAdapter = new OleDbDataAdapter(CommandText, f1.ConnectionString);
  DataSet ds = new DataSet();
  dataAdapter.Fill(ds, table_name);
  if (num_dG == 1) dataGridView1.DataSource = ds.Tables[table_name].DefaultView;
  if (num_dG == 2) dataGridView2.DataSource = ds.Tables[table_name].DefaultView;
  if (num_dG == 3) dataGridView3.DataSource = ds.Tables[table_name].DefaultView;
  if (num_dG == 4) dataGridView4.DataSource = ds.Tables[table_name].DefaultView;
  if (num_dG == 5) dataGridView5.DataSource = ds.Tables[table_name].DefaultView;
}

Наступним кроком програмуємо подію Load, яка викликається при завантаженні форми Form2.

Лістинг події Form2_Load() наступний:

private void Form2_Load(object sender, EventArgs e)
{
  Get_Table("Маршрут", 1); // заповнюємо таблицю "Маршрут"
  Get_Table("Білет", 2); // заповнюємо таблицю "Білет"
  Get_Table("Водій", 3);
  Get_Table("Диспетчер", 5);
  Get_Table("Автобус", 4);
  textBox1.Text = "0";
  comboBox1.SelectedIndex = 0;
  comboBox2.SelectedIndex = 0;
}

У методі Form2_Load() по черзі викликається метод Get_Table(), який заповнює усі 5 елементів управління типу DataGridView.

 

10.4. Програмування обробників подій зміни активної комірки в компонентах dataGridView1, dataGridView2, dataGridView3, dataGridView4, dataGridView5.

Під час зміни активної комірки в елементах управління типу DataGridView, потрібно виводити відповідний текст у елементах управління (див. рис. 27):

  • label2 (Маршрут);
  • label3 (Білет);
  • label4 (Водій);
  • label5 (Автобус);
  • label6 (Диспетчер).

При зміні активної комірки в елементах управління типу DataGridView генерується подія CellEnter (рис. 29).

C# Windows Forms Подія CellEnter елементу управління dataGridView1Рис. 29. Подія CellEnter елементу управління dataGridView1

Лістинг обробників подій CellEnter для елементів управління dataGridView1, dataGridView2, dataGridView3, dataGridView4, dataGridView5 наступний.

private void dataGridView1_CellEnter(object sender, DataGridViewCellEventArgs e)
{
  int row;
  // Беремо дані з комірок таблиці "Маршрут"
  row = dataGridView1.CurrentCell.RowIndex;
  label2.Text = "Маршрут - " + "№" + Convert.ToString(dataGridView1[1, row].Value) +
      "/" + Convert.ToString(dataGridView1[2, row].Value) +
      "/" + Convert.ToString(dataGridView1[3, row].Value) +
      "/" + Convert.ToString(dataGridView1[4, row].Value) +
      "/" + Convert.ToString(dataGridView1[7, row].Value) +
     " - " + Convert.ToString(dataGridView1[8, row].Value);
}

private void dataGridView2_CellEnter(object sender, DataGridViewCellEventArgs e)
{
  int row;
  // так само беремо дані з таблиці "Білет"
  row = dataGridView2.CurrentCell.RowIndex;
  label3.Text = "Білет: місце №" + Convert.ToString(dataGridView2[1, row].Value) +
    " / " + Convert.ToString(dataGridView2[2, row].Value) +
    " / " + Convert.ToString(dataGridView2[3, row].Value) +
    " / " + Convert.ToString(dataGridView2[4, row].Value) +
    " / " + Convert.ToString(dataGridView2[5, row].Value) +
    " / " + Convert.ToString(dataGridView2[6, row].Value);
}

private void dataGridView3_CellEnter(object sender, DataGridViewCellEventArgs e)
{
  int row;
  // Дані про водія
  row = dataGridView3.CurrentCell.RowIndex;
  label4.Text = "Водій: " + Convert.ToString(dataGridView3[1, row].Value);
}

private void dataGridView4_CellEnter(object sender, DataGridViewCellEventArgs e)
{
  int row;
  // Інформація про автобус
  row = dataGridView4.CurrentCell.RowIndex;
  label5.Text = "Автобус: №" + Convert.ToString(dataGridView4[1, row].Value) +
    " / " + Convert.ToString(dataGridView4[2, row].Value) +
    " / " + Convert.ToString(dataGridView4[3, row].Value) +
    " / " + Convert.ToString(dataGridView4[4, row].Value);
}

private void dataGridView5_CellEnter(object sender, DataGridViewCellEventArgs e)
{
  int row;
  // Інформація про диспетчера
  row = dataGridView5.CurrentCell.RowIndex;
  label6.Text = "Диспетчер: " + Convert.ToString(dataGridView5[1, row].Value);
}

 

10.5. Побудова рядків полів для фільтру в елементах управління comboBox1 та comboBox2.

У компоненті comboBox1 користувач має змогу вибирати поля з таблиці “Маршрут“, які будуть використовуватись при фільтруванні даних.

Процес формування рядків в елементах управління типу ComboBox наведено в п. 6.

Формуємо такі рядки в comboBox1:

  • № маршруту;
  • Пункт призначення;
  • Район;
  • Область.

В comboBox2 формуємо такі рядки:

  • Місце;
  • П.І.Б. пасажира.

 

10.6. Програмування фільтру до таблиці “Маршрут

У формі Form2 можна застосовувати фільтр до таблиць “Маршрут” та “Білет“.

Застосування фільтру до таблиці “Маршрут” реалізовано з допомогою компонент comboBox1, textBox2 і button1.

Лістинг методу обробки події кліку на кнопці “Застосувати” при виборі фільтру для таблиці “Маршрут“:

private void button1_Click(object sender, EventArgs e)
{
      // Фільтр в таблиці "Маршрут"
      string CommandText = "SELECT * FROM [Маршрут]";
      // формуємо змінну CommandText
      if (textBox2.Text == "")
          CommandText = "SELECT * FROM [Маршрут]";
      else
      if (comboBox1.SelectedIndex == 0) // № перевезення
          CommandText = "SELECT * FROM [Маршрут] WHERE [Номер маршруту] = '" + textBox2.Text + "'"; // працює
      else
      if (comboBox1.SelectedIndex == 1) //
          CommandText = "SELECT * FROM [Маршрут] WHERE [Пункт призначення] LIKE '" + textBox2.Text + "%'";
      else
      if (comboBox1.SelectedIndex == 2) // Район
          CommandText = "SELECT * FROM [Маршрут] WHERE Район LIKE '" + textBox2.Text + "%'";
      else
      if (comboBox1.SelectedIndex == 3) // Область
          CommandText = "SELECT * FROM [Маршрут] WHERE Область LIKE '" + textBox2.Text + "%'";

      Form1 f = new Form1();
      OleDbDataAdapter dataAdapter = new OleDbDataAdapter(CommandText, f.ConnectionString);
      DataSet ds = new DataSet();
      dataAdapter.Fill(ds, "[Маршрут]");
      dataGridView1.DataSource = ds.Tables[0].DefaultView;
}

 

10.7. Програмування фільтру до таблиці “Білет

Фільтр до таблиці “Білет” застосовується при натиску на кнопці “Застосувати” в групі “Білет“. Елемент управління кнопки має назву button2. Крім того, для організації фільтру використовуються елементи управління comboBox2 та textBox3.

У полі textBox3 вказується значення фільтру. У comboBox2 вказується поле з таблиці “Білет“, до якого застосовується фільтр.

private void button2_Click(object sender, EventArgs e)
{
  // Фільтр в таблиці "Білет"
  string CommandText = "SELECT * FROM [Білет]";

  // формуємо змінну CommandText
  if (textBox3.Text == "")
    CommandText = "SELECT * FROM [Білет]";
  else
  if (comboBox2.SelectedIndex == 0) // № перевезення
    CommandText = "SELECT * FROM [Білет] WHERE [Місце] = " + textBox3.Text; // працює
  else
  if (comboBox2.SelectedIndex == 1) //
    CommandText = "SELECT * FROM [Білет] WHERE [П_І_Б пасажира] LIKE '" + textBox3.Text + "%'";

  Form1 f = new Form1();
  OleDbDataAdapter dataAdapter = new OleDbDataAdapter(CommandText, f.ConnectionString);
  DataSet ds = new DataSet();
  dataAdapter.Fill(ds, "[Маршрут]");
  dataGridView2.DataSource = ds.Tables[0].DefaultView;
}

   

10.8. Встановлення доступу до деяких полів форми Form2

Для того, щоб з форми Form1 зчитувати значення деяких елементів управління форми Form2, потрібно змінити директиву видимості з private на public.

Щоб здійнити це, викликаємо файл “Form2.Designer.cs” (рис. 30).

C# Windows Forms Файл "Form2.Designer.cs"Рис. 30. Файл “Form2.Designer.cs

У результаті, отримаємо текст файлу, що має приблизно такий вигляд:

namespace WindowsFormsApplication1
{
    partial class Form2
    {
        ...
        private System.Windows.Forms.Label label1;
        private System.Windows.Forms.TextBox textBox1;
        private System.Windows.Forms.GroupBox groupBox1;
        private System.Windows.Forms.Button button1;
        private System.Windows.Forms.TextBox textBox2;
        private System.Windows.Forms.ComboBox comboBox1;
        private System.Windows.Forms.GroupBox groupBox2;
        private System.Windows.Forms.Button button2;
        private System.Windows.Forms.TextBox textBox3;
        private System.Windows.Forms.ComboBox comboBox2;
        private System.Windows.Forms.GroupBox groupBox3;
        private System.Windows.Forms.Label label6;
        private System.Windows.Forms.Label label5;
        private System.Windows.Forms.Label label4;
        private System.Windows.Forms.Label label3;
        private System.Windows.Forms.Label label2;
        private System.Windows.Forms.Label label7;
        private System.Windows.Forms.DataGridView dataGridView1;
        private System.Windows.Forms.DataGridView dataGridView2;
        private System.Windows.Forms.Label label8;
        private System.Windows.Forms.Label label9;
        private System.Windows.Forms.DataGridView dataGridView3;
        private System.Windows.Forms.Label label10;
        private System.Windows.Forms.DataGridView dataGridView4;
        private System.Windows.Forms.Label label11;
        private System.Windows.Forms.DataGridView dataGridView5;
        private System.Windows.Forms.Button button3;
        private System.Windows.Forms.Button button4;
    }
}

Змінюємо доступ з private на public для таких властивостей:

  • textBox1 (№ перевезення);
  • dataGridView1;
  • dataGridView2;
  • dataGridView3;
  • dataGridView4;
  • dataGridView5;

Таким чином, фрагмент лістингу файлу “Form2.Designer.cs” має вигляд:

namespace WindowsFormsApplication1
{
    ...
    partial class Form2
    {
        private System.Windows.Forms.Label label1;
        public System.Windows.Forms.TextBox textBox1;
        private System.Windows.Forms.GroupBox groupBox1;
        private System.Windows.Forms.Button button1;
        private System.Windows.Forms.TextBox textBox2;
        private System.Windows.Forms.ComboBox comboBox1;
        private System.Windows.Forms.GroupBox groupBox2;
        private System.Windows.Forms.Button button2;
        private System.Windows.Forms.TextBox textBox3;
        private System.Windows.Forms.ComboBox comboBox2;
        private System.Windows.Forms.GroupBox groupBox3;
        private System.Windows.Forms.Label label6;
        private System.Windows.Forms.Label label5;
        private System.Windows.Forms.Label label4;
        private System.Windows.Forms.Label label3;
        private System.Windows.Forms.Label label2;
        private System.Windows.Forms.Label label7;
        public System.Windows.Forms.DataGridView dataGridView1;
        public System.Windows.Forms.DataGridView dataGridView2;
        private System.Windows.Forms.Label label8;
        private System.Windows.Forms.Label label9;
        public System.Windows.Forms.DataGridView dataGridView3;
        private System.Windows.Forms.Label label10;
        public System.Windows.Forms.DataGridView dataGridView4;
        private System.Windows.Forms.Label label11;
        public System.Windows.Forms.DataGridView dataGridView5;
        private System.Windows.Forms.Button button3;
        private System.Windows.Forms.Button button4;
    }
}

На цьому побудову форми “Form2.cs” завершено.

 

10.9. Лістинг файлу “Form2.cs

У скороченому вигляді текст файлу “Form2.cs” наступний:

using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Linq;
using System.Text;
using System.Windows.Forms;
using System.Data.OleDb;

namespace WindowsFormsApplication1
{
    public partial class Form2 : Form
    {
        public Form2()
        {
            InitializeComponent();
        }

        private void button3_Click(object sender, EventArgs e)
        {
          ...
        }

        private void button4_Click(object sender, EventArgs e)
        {
          ...
        }

        private void Get_Table(string table_name, int num_dG)
        {
          ...
        }

        private void Form2_Load(object sender, EventArgs e)
        {
            ...
        }

        private void dataGridView1_CellEnter(object sender, DataGridViewCellEventArgs e)
        {
            ...
        } 

        private void dataGridView2_CellEnter(object sender, DataGridViewCellEventArgs e)
        {
            ...
        }

        private void dataGridView3_CellEnter(object sender, DataGridViewCellEventArgs e)
        {
            ...
        }

        private void dataGridView4_CellEnter(object sender, DataGridViewCellEventArgs e)
        {
          ...
        }

        private void dataGridView5_CellEnter(object sender, DataGridViewCellEventArgs e)
        {
          ...
        }

        private void button1_Click(object sender, EventArgs e)
        {
          ...
        }

        private void button2_Click(object sender, EventArgs e)
        {
          ...
        }
     }
}

 

11. Програмування події виклику форми Form2 з форми Form1

Форма Form2 викликається при виборі користувачем кнопки “Додати…” з групи “Перевезення” (див. рис. 21). Елемент управління типу “кнопка”, що відповідає команді “Додати…“, має назву button2.

Лістинг події виклику форми Form2 з форми Form1 має вигляд:

private void button2_Click(object sender, EventArgs e)
{
  string CommandText;
  string num_per, ID_M, ID_B, ID_D, ID_A, ID_V;
  int row;

  Form2 f = new Form2(); // створили нову форму
  if (f.ShowDialog() == DialogResult.OK)
  {
    // додаємо дані
    // Номер перевезення
    if (f.textBox1.Text == "") num_per = "0";
    else num_per = f.textBox1.Text;

    // Додаємо ID_Marshrut
    row = f.dataGridView1.CurrentCell.RowIndex; // взяли рядок з dataGridView1
    ID_M = Convert.ToString(f.dataGridView1[0, row].Value);
    // Додаємо ID_Bilet
    row = f.dataGridView2.CurrentCell.RowIndex; // взяли рядок з dataGridView2
    ID_B = Convert.ToString(f.dataGridView2[0, row].Value);
    // Додаємо ID_Dispetcher
    row = f.dataGridView3.CurrentCell.RowIndex; // взяли рядок з dataGridView3
    ID_D = Convert.ToString(f.dataGridView3[0, row].Value);

    // Додаємо ID_Avtobus
    row = f.dataGridView4.CurrentCell.RowIndex; // взяли рядок з dataGridView4
    ID_A = Convert.ToString(f.dataGridView4[0, row].Value);
    // Додаємо ID_Vodij
    row = f.dataGridView5.CurrentCell.RowIndex; // взяли рядок з dataGridView5
    ID_V = Convert.ToString(f.dataGridView5[0, row].Value);
    // формуємо CommandText
    CommandText = "INSERT INTO [Перевезення] (Номер, ID_Marshrut, ID_Bilet, ID_Dispetcher, ID_Avtobus, ID_Vodij) " + "VALUES (" + num_per + ", " + ID_M + ", " + ID_B + ", " + ID_D + ", " + ID_A + ", " + ID_V + ")";

    // виконуємо SQL-команду
    My_Execute_Non_Query(CommandText);
    // перемалювати dataGridView1
    button1_Click(sender, e);
  }
}

У методі button2_Click() викликається метод My_Execute_Non_Query() лістинг якого наведений нижче:

// виконання SQL-запиту для команд INSERT, UPDATE, DELETE

public void My_Execute_Non_Query(string CommandText)
{
  OleDbConnection conn = new OleDbConnection(ConnectionString);
  conn.Open();
  OleDbCommand myCommand = conn.CreateCommand();
  myCommand.CommandText = CommandText;
  myCommand.ExecuteNonQuery();
  conn.Close();
}

У методі My_Execute_Non_Query() створюється об’єкт, що здійснює з’єднання з базою даних. Потім відбувається виконання команди, що вносить зміни в базу даних. Для цього, в C# призначений метод ExecuteNonQuery().

Усі команди на мові SQL поділяються на два типи:

  • команди, що читають дані з бази даних;
  • команди, що вносять зміни в базу даних.

Після цього можна протестувати додаток. Можна викликати команду “Додати…” з групи “Перевезення” і додати рядок перевезення в таблицю, що відображається у dataGridView1.

 

12. Лістинг модуля “Form1.cs”

На даний момент, лістинг файлу “Form1.cs” у скороченому вигляді наступний:

using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Linq;
using System.Text;
using System.Windows.Forms;
using System.Data.OleDb;

namespace WindowsFormsApplication1
{
    public partial class Form1 : Form
    {
        public string ConnectionString = "Provider=Microsoft.Jet.OLEDB.4.0;" +
            "Data Source=C:\\Programs\\C_SHARP\\Program_02_02_00_009u\\" +
            "WindowsFormsApplication1\\WindowsFormsApplication1\\02_02_00_009_Baza_ua.mdb";

        private int act_table = 1; // активна таблиця: 1-білети, 2-маршрути, 3-автобуси, 4-водії, 5 - диспетчери

        public Form1()
        {
            InitializeComponent();
        }

        private void button1_Click(object sender, EventArgs e)
        {
             ...
        }

        private void Form1_Load(object sender, EventArgs e)
        {
            ...
        }

        private void button2_Click(object sender, EventArgs e)
        {
            ...
        }

        public void My_Execute_Non_Query(string CommandText)
        {
            ...
        }
    }
}

 

13. Створення форми видалення запису з dataGridView1

У випадку, коли користувач вибирає кнопку “Видалити” (button3) з групи “Перевезення“, потрібно запрограмувати метод обробки події кліку на цій кнопці (рис. 31).

C# Windows Forms Кнопка "Видалити" основна форми "Form1.cs"Рис. 31. Кнопка “Видалити” з основної форми “Form1.cs

Попередньо потрібно підготувати форму за зразком, як показано на рисунку 32.

При створенні форми налаштовуємо такі властивості форми:

  • властивість “Text” встановлюємо в значення “Видалити перевезення”;
  • властивість FormBorderStyle = “Fixed3D”;
  • властивість StartPosition = “CenterScreen”.

Створюємо форму стандартним способом. Процес створення форми в MS Visual Studio C# детально описаний тут.

У результаті в “Solution Explorer” отримаємо файли “Form3.cs” та “Form3.Designer.cs“.

C# Windows Forms Форма підтвердження видалення перевезенняРис. 32. Форма підтвердження видалення перевезення

У формі “Form3.cs” програмуємо обробку події кліку на кнопці “Так” стандартним способом:

private void button1_Click(object sender, EventArgs e)
{
  this.DialogResult = DialogResult.OK;
}

Також програмуємо подію кліку на кнопці “Ні“:

private void button2_Click(object sender, EventArgs e)
{
 this.DialogResult = DialogResult.No;
}

 

14. Програмування події виклику команди “Видалити” з групи “Перевезення

При виклику команди “Видалити” з групи “Перевезення” потрібно викликати форму “Form3.cs“.

Лістинг методу обробки події наведено нижче:

private void button3_Click(object sender, EventArgs e)
{
  Form3 f = new Form3();
  if (f.ShowDialog() == DialogResult.OK)
    {
      int index, index_old;
      string ID;
      string CommandText = "DELETE FROM ";
      index = dataGridView1.CurrentRow.Index; // № по порядку в таблиці представлення
      index_old = index;
      ID = Convert.ToString(dataGridView1[0, index].Value); // ID подаємо в запит як рядок

      // Формуємо рядок CommandText
      CommandText = "DELETE FROM [Перевезення] WHERE [Перевезення].[Номер] = '" + ID + "'";

      // виконуємо SQL-запит
      My_Execute_Non_Query(CommandText);

      // перемальовування dbGridView1
      button1_Click(sender, e);               
      if (index_old >= 0)
      {
         dataGridView1.ClearSelection();
         dataGridView1[0, index_old].Selected = true;
      }
    }
}

 

15. Програмування команд з групи “Перегляд“.

15.1. Перегляд таблиці “Білет” в dataGridView2

Щоб вивести таблицю “Білет” в dataGridView2 користувач повинен зробити клік на кнопці “Білети” (button4) з групи “Перегляд” (рис. 33).

C# Windows Forms команда перегляду спискуРис. 33. Виклик команди перегляду списку куплених білетів

Лістинг допоміжної функції та обробника події кліку на кнопці button4 наведено нижче.

private void Get_Bilets()  // читає усі поля з таблиці "Білет"
{
  string CommandText = "SELECT ID_Bilet, Місце, Вартість, [Час купівлі], [П_І_Б пасажира], Паспорт, Пільги FROM [Білет]";
  OleDbDataAdapter dataAdapter = new OleDbDataAdapter(CommandText, ConnectionString);

  // створюємо об'єкт DataSet
  DataSet ds = new DataSet();
  // заповнюємо dataGridView1 даними із таблиці "Білет" бази даних
  dataAdapter.Fill(ds, "[Білет]");
  dataGridView2.DataSource = ds.Tables[0].DefaultView;
  dataGridView2.Columns[0].Visible = false; // Ховаємо поле ID_Bilets
}

// Клік на кнопці "Білети" з групи "Перегляд"
private void button4_Click(object sender, EventArgs e)
{
  Get_Bilets();
  act_table = 1;
}

Також додаємо виклик функції Get_Bilets() у метод Form1_Load(). Таким чином, лістинг методу Form1_Load() наступний:

private void Form1_Load(object sender, EventArgs e)
{
  comboBox1.SelectedIndex = 0;
  button1_Click(sender, e);
  Get_Bilets();
}

Тепер можна протестувати роботу додатку.

 

15.2. Перегляд таблиці “Маршрут” в dataGridView2

Вивід таблиці “Маршрут” в dataGridView2 здійснюється з допомогою виклику команди “Маршрути” з групи “Перегляд“.

Лістинг допоміжного методу Get_Marshruts() та обробника події кліку на кнопці “Маршрути” (button5) наступний:

private void Get_Marshruts()  // читає усі поля з таблиці "Маршрут"
{
  string CommandText = "SELECT * FROM [Маршрут]";
  OleDbDataAdapter dataAdapter = new OleDbDataAdapter(CommandText, ConnectionString);
  DataSet ds = new DataSet();  // створюємо об'єкт DataSet
  dataAdapter.Fill(ds, "[Маршрут]");
  dataGridView2.DataSource = ds.Tables[0].DefaultView;
}

private void button5_Click(object sender, EventArgs e)
{
  Get_Marshruts();
  act_table = 2;
}

 

15.3. Перегляд таблиці “Автобус” в dataGridView2

Щоб вивести таблицю “Автобус” в dataGridView2 викликати команду “Автобуси” (button6) з групи “Перегляд”.

Лістинг додаткового методу Get_Bus() і обробника події на кнопці “Автобуси” наступний.

private void Get_Avtobus()  // читає усі поля з таблиці "Автобус"
{
  string CommandText = "SELECT * FROM Автобус";
  OleDbDataAdapter dataAdapter = new OleDbDataAdapter(CommandText, ConnectionString);
  DataSet ds = new DataSet();  // створюємо об'єкт DataSet
  dataAdapter.Fill(ds, "Автобус"); // заповнюємо набір даних даними з таблиці "Автобус"
  dataGridView2.DataSource = ds.Tables[0].DefaultView;
  dataGridView2.Columns[0].Visible = false; // сховати нульовий стовпець (поле ID_Avtobus)
}

private void button6_Click(object sender, EventArgs e)
{
  Get_Avtobus();
  act_table = 3;
}

 

15.4. Перегляд таблиці “Водій” в dataGridView2.

Таблиця “Водій” виводиться в dataGridView2 після натиску на кнопці “Водії” з групи “Перегляд”.

Лістинг допоміжного методу Get_Vodij() і методу обробки події кліку на кнопці button7 наступний:

private void Get_Vodij()  // читає усі поля з таблиці "Водій"
{
  string CommandText = "SELECT * FROM Водій";
  OleDbDataAdapter dataAdapter = new OleDbDataAdapter(CommandText, ConnectionString);
  DataSet ds = new DataSet();
  dataAdapter.Fill(ds, "Водій");
  dataGridView2.DataSource = ds.Tables[0].DefaultView;
  dataGridView2.Columns[0].Visible = false;
}

private void button7_Click(object sender, EventArgs e)
{
  Get_Vodij();
  act_table = 4;
}

 

15.5. Перегляд таблиці “Диспетчер” в dataGridView2

Для виводу таблиці “Диспетчер” в елементі управління dataGridView2 потрібно вибрати команду “Диспетчери” з групи “Перегляд“.

Лістинг допоміжного методу Get_Dispetcher() і обробника події кліку на кнопці button8 наступний.

// заповнює dataGridView2 даними з таблиці "Диспетчер"
private void Get_Dispetcher()
{
  string CommandText = "SELECT * FROM [Диспетчер]";
  OleDbDataAdapter dataAdapter = new OleDbDataAdapter(CommandText, ConnectionString);
  DataSet ds = new DataSet();
  dataAdapter.Fill(ds, "Диспетчер");
  dataGridView2.DataSource = ds.Tables[0].DefaultView;
  dataGridView2.Columns[0].Visible = false;
}

private void button8_Click(object sender, EventArgs e)
{
  Get_Dispetcher();
  act_table = 5;
}

 

16. Розробка форм додавання даних у таблиці

16.1. Розробка форми додавання нового білету

Побудова нової форми у MS Visual Studio C# детально описується тут.

Додаємо нову форму. Будуємо форму додавання нового білету так як зображено на рисунку 34.

Файли, що відповідають формі додавання нового білету: “Form4.cs” та “Form4.Designer.cs“.

Налаштовуємо такі властивості форми:

  • властивість Text = “Білети“;
  • властивість FormBorderStyle = “Fixed3D”;
  • властивість ControlBox = “false” (сховати системне меню);
  • властивість StartPosition = “CenterScreen” (вікно з’являється по центру екрану).

Розміщуємо елементи управління на формі. Значимі елементи управління мають такі імена:

  • textBox1 – поле “Місце” в таблиці “Білет“;
  • textBox2 – поле “Вартість“;
  • textBox3 – “Час купівлі“;
  • textBox4 – “П_І_Б пасажира“;
  • textBox5 – “Паспорт“;
  • checkBox1 – “Пільги“;
  • button1 – кнопка “Додати“;
  • button2 – кнопка “Відмінити“.

C# Windows Forms Форма додавання нового білетуРис. 34. Форма додавання нового білету

Після створення форми потрібно налаштувати видимість ззовні для деяких полів класу Form4. Для цього переходимо у файл “Form4.Designer.cs” (див. рисунок 30 для форми “Form2.cs“).

Встановлюємо доступ public для значимих полів форми “Form4.cs” – textBox1, textBox2, textBox3, textBox4, textBox5, checkBox1.

Фрагмент відповідного коду класу Form4 має вигляд:

partial class Form4
{
  ...

  #endregion

  private System.Windows.Forms.Label label1;
  public System.Windows.Forms.TextBox textBox1;
  private System.Windows.Forms.Label label2;
  public System.Windows.Forms.TextBox textBox2;
  private System.Windows.Forms.Label label3;
  private System.Windows.Forms.Label label4;
  public System.Windows.Forms.TextBox textBox3;
  private System.Windows.Forms.Label label5;
  public System.Windows.Forms.TextBox textBox4;
  public System.Windows.Forms.TextBox textBox5;
  public System.Windows.Forms.CheckBox checkBox1;
  private System.Windows.Forms.Button button1;
  private System.Windows.Forms.Button button2;
}

Програмуємо події кліку на кнопках button1 та button2 так само, як описанов п. 11.2.

Лістинги обробників подій наступний:

private void button1_Click(object sender, EventArgs e)
{
  this.DialogResult = DialogResult.OK;
}

private void button2_Click(object sender, EventArgs e)
{
  this.DialogResult = DialogResult.No;
}

 

16.2. Розробка форми додавання даних у таблицю “Маршрут

За зразком побудови форми додавання даних у таблицю “Білет” створюємо форму додавання даних в таблицю “Маршрут” (рис. 35). Побудова нової форми детально описується тут.

У результаті, в Solution Explorer отримаємо файли з іменами “Form5.cs” та “Form5.Designer.cs“.

Налаштовуємо такі властивості форми:

  • властивість Text = “Додавання нового маршруту”;
  • властивість FormBorderStyle = “Fixed3D”;
  • властивість ControlBox = “false”;
  • властивість StartPosition = “CenterScreen”.

Значимі елементи управління мають такі імена:

  • textBox1 – “№ маршруту“;
  • textBox2 – “Пункт призначення“;
  • textBox3 – “Район“;
  • textBox4 – “Область“;
  • textBox5 – “Відстань“;
  • textBox6 – “Вага“.
  • dateTimePicker1 – час відправлення;
  • dateTimePicker2 – час прибуття;
  • button1 – кнопка “Додати”;
  • button2 – кнопка “Відмінити”.

В елементах управління dateTimePicker1 та dateTimePicker2 властивість Format встановлюємо в значення “Time“.

C# Windows Forms Форма додавання маршрутуРис. 35. Форма додавання нового маршруту

Встановлюємо доступ public для значимих полів форми “Form5.cs” – textBox1, textBox2, textBox3, textBox4, textBox5, textBox6, dateTimePicker1, dateTimePicker2.

Фрагмент відповідного коду класу Form5 має вигляд:

...
partial class Form5
{

  #endregion

  private System.Windows.Forms.Label label1;
  public System.Windows.Forms.TextBox textBox1;
  private System.Windows.Forms.Label label2;
  public System.Windows.Forms.TextBox textBox2;
  public System.Windows.Forms.TextBox textBox3;
  private System.Windows.Forms.Label label3;
  public System.Windows.Forms.TextBox textBox4;
  private System.Windows.Forms.Label label4;
  public System.Windows.Forms.TextBox textBox5;
  private System.Windows.Forms.Label label5;
  public System.Windows.Forms.TextBox textBox6;
  private System.Windows.Forms.Label label6;
  private System.Windows.Forms.Label label7;
  public System.Windows.Forms.DateTimePicker dateTimePicker1;
  private System.Windows.Forms.Label label8;
  public System.Windows.Forms.Button button1;
  private System.Windows.Forms.Button button2;
  public System.Windows.Forms.DateTimePicker dateTimePicker2;
}
...

Програмуємо події кліку на кнопках button1 та button2 так само, як описанов п. 11.2.

Лістинг обробників подій наступний:

private void button1_Click(object sender, EventArgs e)
{
  this.DialogResult = DialogResult.OK;
}

private void button2_Click(object sender, EventArgs e)
{
  this.DialogResult = DialogResult.No;
}

 

16.3. Розробка форми додавання даних у таблицю “Автобус

Створення нової форми детально зображено тут.

Форма додавання нового транспортного засобу зображена на рисунку 36. У додатку цій формі відповідають файли “Form6.cs” та “Form6.Designer.cs“.

Налаштовуємо такі властивості форми:

  • властивість Text = “Додавання нового автобуса”;
  • властивість FormBorderStyle = “Fixed3D”;
  • властивість ControlBox = “false”;
  • властивість StartPosition = “CenterScreen”.

Значимі елементи управління мають такі імена:

  • textBox1 (Номер);
  • textBox2 (Модель);
  • textBox3 (Номерний знак);
  • textBox4 (Кількість місць).

C# Windows Forms Форма додавання данихРис. 36. Форма додавання даних про новий автобус

Встановлюємо доступ public для значимих полів форми “Form6.cs“: textBox1, textBox2, textBox3, textBox4.

...
partial class Form6
{
  ...

  private System.Windows.Forms.Label label1;
  public System.Windows.Forms.TextBox textBox1;
  private System.Windows.Forms.Label label2;
  public System.Windows.Forms.TextBox textBox2;
  public System.Windows.Forms.TextBox textBox3;
  private System.Windows.Forms.Label label3;
  public System.Windows.Forms.TextBox textBox4;
  private System.Windows.Forms.Label label4;
  private System.Windows.Forms.Button button1;
  private System.Windows.Forms.Button button2;
}
...

Програмуємо події кліку на кнопках button1 та button2 так само, як описанов п. 11.2.

Лістинг обробників подій наступний:

private void button1_Click(object sender, EventArgs e)
{
  this.DialogResult = DialogResult.OK;
}

private void button2_Click(object sender, EventArgs e)
{
  this.DialogResult = DialogResult.No;
}

 

16.4. Розробка форми додавання нового водія

Побудова форми додавання даних у таблицю “Водій” здійснюється стандартним способом. Форма зображена на рисунку 37.

У Solution Explorer новоствореній формі відповідають файли “Form7.cs“, “Form7.Designer.cs“.

Властивості форми налаштовуємо так само як в попередніх формах.

Значимі елементи управління мають такі імена:

  • textBox1 (Прізвище);
  • textBox2 (Паспорт);
  • dateTimePicker1 (Дата народження).

В елементі управління dateTimePicker1 властивість Format = “Short”.

C# Windows Forms Форма додавання данихРис. 37. Форма додавання даних у таблицю “Водій

У вікні “Properties” встановлюємо доступ public у властивості Modifier (рис. 38) для таких елементів управління:

  • textBox1 (Прізвище);
  • dateTimePicker1 (Дата народження);
  • textBox2 (Паспорт).

Автоматично буде внесено зміни у файл “Form7.Designer.cs“.

C# Windows Forms Встановлення доступу publicРис. 38. Встановлення доступу public до елементу управління textBox1

Програмуємо події кліку на кнопках button1 та button2 так само, як описанов п. 11.2.

Лістинг обробників подій наступний:

private void button1_Click(object sender, EventArgs e)
{
  this.DialogResult = DialogResult.OK;
}

private void button2_Click(object sender, EventArgs e)
{
  this.DialogResult = DialogResult.No;
}

 

16.5. Розробка форми додавання нового диспетчера

Форма додавання нового диспетчера зображена на рисунку 39. Файли, що відповідають формі, мають назви “Form8.cs” та “Form8.Designer.cs“.

Властивості форми налаштовуємо так само як в попередніх формах.

Значимі елементи управління мають такі імена:

  • textBox1 (П.І.Б.);
  • dateTimePicker1 (Дата народження);
  • textBox2 (Адреса).

C# Windows Forms Форма додавання данихРис. 39. Форма додавання даних у таблицю “Диспетчер

У вікні “Properties” встановлюємо доступ public у властивості Modifier (рис. 38) для таких елементів управління:

  • textBox1 (П.І.Б.);
  • dateTimePicker1 (Дата народження);
  • textBox2 (Адреса).

Автоматично буде внесено зміни у файл “Form8.Designer.cs“.

Програмуємо події кліку на кнопках button1 та button2 так само, як описанов попередніх пунктах.

Лістинг обробників подій наступний:

private void button1_Click(object sender, EventArgs e)
{
  this.DialogResult = DialogResult.OK;
}

private void button2_Click(object sender, EventArgs e)
{
  this.DialogResult = DialogResult.No;
}

 

17. Програмування методів додавання даних у таблиці “Білет“, “Маршрут“, “Автобус“, “Водій“, “Диспетчер“.

Усі наступні кроки будуть виконуватись у головній формі додатку “Form1.cs“. Тому, спочатку активуємо форму “Form1.cs“.

17.1. Додавання даних у таблицю “Білет

Лістинг методу Add_Bilet() додавання даних в таблицю “Білет” наведено нижче:

// додавання Білету через Connection і запит ExecuteNonQuery()
private void Add_Bilet(string misce, string vartist, DateTime chas, string name, string passport, bool pilga)
{
  string CommandText;
  string s_chas, s_pilga;
  string s_v;

  s_chas = Convert.ToString(chas);
  s_pilga = Convert.ToString(pilga);
  s_v = vartist.Replace(',', '.');

  CommandText = "INSERT INTO [Білет] (Місце, Вартість, [Час купівлі], [П_І_Б пасажира], Паспорт, Пільги) " + "VALUES ('" + misce + "', " + s_v + ", '" + s_chas + "', '"
+                                            name + "', '" + passport + "', " + pilga + ")";

  My_Execute_Non_Query(CommandText);
}

У вищенаведеному лістингу метод Add_Bilet() отримує вхідним параметром змінні: misce, vartist, chas, name, passport, pilga. Потім формується запит на мові SQL. У цьому запиті, у змінній CommandText формується команда

INSERT INTO

яка виконується у методі My_Execute_Non_Query().

   

17.2. Додавання даних у таблицю “Маршрут“.

Лістинг методу Add_Marshrut() наведено нижче.

private void Add_Marshrut(string num_marsh, string punkt, string rajon, string oblast, double vidstan, double vaha, DateTime chas_vidpr, DateTime chas_prub)
{
  string CommandText;
  string s_vidpr, s_prub;
  string s_vaha, s_vidst;

  s_vidpr = Convert.ToString(chas_vidpr);
  s_prub = Convert.ToString(chas_prub);
  s_vaha = Convert.ToString(vaha);
  s_vaha = s_vaha.Replace(',','.');
  s_vidst = Convert.ToString(vidstan);
  s_vidst = s_vidst.Replace(',', '.');

  CommandText = "INSERT INTO [Маршрут] ([Номер маршруту], [Пункт призначення], Район, Область, Відстань, Вага, [Час відправлення], [Час прибуття])"
                                            + " VALUES ('" + num_marsh + "', '" + punkt + "', '" + rajon + "', '" + oblast + "', "
                                            + s_vidst + ", " + s_vaha + ", '" + s_vidpr + "', '" + s_prub + "')";

  My_Execute_Non_Query(CommandText);
}

Метод Add_Marshrut() отримує вхідними параметрами значення, що відповідають полям таблиці “Маршрут” бази даних.

 

17.3. Додавання даних у таблицю “Автобус

Лістинг методу Add_Avtobus() наведено нижче.

void Add_Avtobus(string num, string model, string znak, string k_misc)
{
  string CommandText;
  CommandText = "INSERT INTO [Автобус] ([Номер], [Модель], [Номерний знак], [Кількість місць])"
                                            + " VALUES ('" + num + "', '" + model + "', '" + znak + "', " + k_misc + ")";
            My_Execute_Non_Query(CommandText);
}

Метод Add_Avtobus() отримує вхідні параметри, що відповідають полям таблиці “Автобус” бази даних.

 

17.4. Додавання даних у таблицю “Водій”

Лістинг методу Add_Vodij() додавання даних у таблицю “Водій” наведено нижче.

void Add_Vodij(string p_i_b, string d_nar, string passport) // додати водія
{
  string CommandText;
  CommandText = "INSERT INTO [Водій] ([П_І_Б], [Дата народження], [Паспорт])"
                                            + " VALUES ('" + p_i_b + "', '" + d_nar + "', '" + passport + "')";
  My_Execute_Non_Query(CommandText);
}

   

17.5. Додавання даних у таблицю “Диспетчер

Лістинг методу Add_Dispetcher() наведено нижче.

void Add_Dispetcher(string p_i_b, string d_nar, string adresa) // додати водія
{
  string CommandText;
  CommandText = "INSERT INTO [Диспетчер] ([П_І_Б], [Дата народження], [Адреса])"
                                            + " VALUES ('" + p_i_b + "', '" + d_nar + "', '" + adresa + "')";
  My_Execute_Non_Query(CommandText);
}

 

18. Програмування події кліку на кнопці “Додати…” з групи “Перегляд

В основній формі “Form1.cs“, при виборі кнопки “Додати…” з групи “Перегляд” потрібно виводитись одне з вікон форм, що відповідають таблицям “Білет“, “Маршрут“, “Автобус“, “Водій”, “Диспетчер” (рис. 40).

Для цього, засобами мови C# повинна створюватись відповідна форма. Після внесення даних у форму і виборі підтверджувального запиту, дані з форми повинні заноситись у відповідну таблицю бази даних.

C# Windows Forms Кнопка "Додати..." головної формиРис. 40. Кнопка “Додати…” головної форми

Лістинг обробника події кліку на кнопці “Додати…” наступний:

private void button9_Click(object sender, EventArgs e)
{
  if (act_table == 1) // обробляємо таблицю білети
  {
    Form4 f = new Form4();

    if (f.ShowDialog() == DialogResult.OK)
    {
      // додаємо дані в таблицю "Білети"
      Add_Bilet(f.textBox1.Text, f.textBox2.Text, Convert.ToDateTime(f.textBox3.Text),
                f.textBox4.Text, f.textBox5.Text, f.checkBox1.Checked);
      Get_Bilets();
    }
  }
  else
  if (act_table == 2) // обробляємо таблицю "Маршрут"
  {
    Form5 f = new Form5();
    if (f.ShowDialog() == DialogResult.OK)
    {
      // додаємо дані в таблицю "Маршрут"
      Add_Marshrut(f.textBox1.Text, f.textBox2.Text, f.textBox3.Text, f.textBox4.Text,
                  Convert.ToDouble(f.textBox5.Text),Convert.ToDouble(f.textBox6.Text),
                   f.dateTimePicker1.Value, f.dateTimePicker2.Value);
      Get_Marshruts();
    }
  }
  else
  if (act_table == 3) // обробляємо таблицю "Автобус"
  {
    Form6 f = new Form6();
    if (f.ShowDialog() == DialogResult.OK)
    {
      // додаємо дані в таблицю "Автобус"
      Add_Avtobus(f.textBox1.Text, f.textBox2.Text, f.textBox3.Text, f.textBox4.Text);
      Get_Avtobus();
    }
  }
  else
  if (act_table == 4) // обробляємо таблицю "Водій"
  {
    Form7 f = new Form7();
    if (f.ShowDialog() == DialogResult.OK)
    {
      // додаємо дані в таблицю "Водій"
      Add_Vodij(f.textBox1.Text, Convert.ToString(f.dateTimePicker1.Value), f.textBox2.Text);
      Get_Vodij();
    }
  }
  else
  if (act_table == 5) // обробляємо таблицю "Диспетчер"
  {
    Form8 f = new Form8();
    if (f.ShowDialog() == DialogResult.OK)
    {
      // додаємо дані в таблицю "Водій"
      Add_Dispetcher(f.textBox1.Text, Convert.ToString(f.dateTimePicker1.Value), f.textBox2.Text);
      Get_Dispetcher();
    }
  }
}

Як видно з лістингу, на основі змінної act_table (активна таблиця) викликається відповідний метод додавання даних в базу даних.

 

19. Програмування події кліку на кнопці “Видалити

private void button10_Click(object sender, EventArgs e)
{
  Form3 f = new Form3();

  if (f.ShowDialog() == DialogResult.OK)
  {
    int index, index_old;
    string ID;
    string CommandText = "DELETE FROM ";

    index = dataGridView2.CurrentRow.Index; // № по порядку в таблиці представлення
    index_old = index;
    ID = Convert.ToString(dataGridView2[0, index].Value); // ID подаємо в запит як рядок

    // Формуємо рядок CommandText
    if (act_table == 1) // обробляємо таблицю "Білет"
      CommandText = "DELETE FROM Білет WHERE Білет.ID_Bilet = " + ID;
    if (act_table == 2) // обробляємо таблицю "Маршрут"
      CommandText = "DELETE FROM Маршрут WHERE Маршрут.ID_Marshrut = " + ID;
    if (act_table == 3) // обробляємо таблицю "Автобус"
      CommandText = "DELETE FROM Автобус WHERE Автобус.ID_Avtobus = " + ID;
    if (act_table == 4) // обробляємо таблицю "Водій"
      CommandText = "DELETE FROM Водій WHERE Водій.ID_Vodij = " + ID;
    if (act_table == 5) // обробляємо таблицю "Диспетчер"
      CommandText = "DELETE FROM Диспетчер WHERE Диспетчер.ID_Dispetcher = " + ID;

    // виконуємо SQL-запит
    My_Execute_Non_Query(CommandText);

    // перемальовування dbGridView2
    if (act_table == 1) Get_Bilets();
    else
    if (act_table == 2) Get_Marshruts();
    else
    if (act_table == 3) Get_Avtobus();
    else
    if (act_table == 4) Get_Vodij();
    else
    if (act_table == 5) Get_Dispetcher();

    if (index_old >= 0)
    {
      dataGridView2.ClearSelection();
      dataGridView2[0, index_old].Selected = true;
    }
  }
}

 

20. Програмування кліку на командах меню (див. п. 5.1.)

Останнім кроком залишилось призначити командам меню (див. п. 5.1., рис. 11) виконання відповідних обробників подій кліку на кнопках, що розміщуються на головній формі додатку.

Так, наприклад, команда “Додати…” з меню “Перевезення” повинна виконувати ту саму роботу, що й команда “Додати…” з групи “Перевезення” основної форми (рис. 41). Тому, недоцільно два рази писати код обробника події додавання перевезення. Система Microsoft Visual Studio дозволяє зручно назначати метод виконання (якщо він вже запрограмований) іншій команді (див. рис. 42).

C# Windows Forms Відповідність між командами форми

Рис. 41. Відповідність команді “Додати…” з меню “Перевезення” однойменної команди з групи “Перевезення

Команда додавання перевезення з основної форми викликається кліком на кнопці “Додати…” з групи “Перевезення“. Цій кнопці відповідає об’єкт з іменем button2. Метод обробки події кліку на кнопці button2 у додатку має назву button2_Click() (див. п. 11).

Для призначення методу обробки події команді “Додати…” з меню “Перевезення” потрібно:

  • активувати (виділити мишкою) команду “Додати…” з меню “Перевезення“;
  • у вікні “Properties” активувати вкладку “Events“;
  • у полі “Click” вибрати метод button2_Click (зі спадного списку).

C# Windows Forms метод обробки події

Рис. 42. Призначення методу обробки події команді “Додати…” з меню “Перевезення

Таким самим чином призначаємо наступним командам меню такі обробники подій:

  • команді “Видалити” з меню “Перевезення” призначаємо обробник події button3_Click;
  • команді “Білети” з меню “Перегляд” призначаємо обробник події button4_Click;
  • команді “Маршрути” з меню “Перегляд” призначаємо обробник події button5_Click;
  • команді “Автобуси” з меню “Перегляд” призначаємо обробник події button6_Click;
  • команді “Водії” з меню “Перегляд” призначаємо обробник події button7_Click;
  • команді “Диспетчери” з меню “Перегляд” призначаємо обробник події button8_Click.

 

21. Запуск додатку на виконання

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

 


Схожі теми