C#. Курсова робота. Розробка програми ведення обліку матеріальних засобів. База даних Microsoft Access
У курсовій роботі описується покроковий процес створення програми обліку матеріальних засобів (інвентаризація). Представлено підхід до проектування додатку, що взаємодіє з базою даних на автономному рівні з використанням засобів Microsoft Visual Studio.
Використовуючи даний приклад, Ви зможете створювати власні додатки, що оперують базами даних Microsoft Access, використовуючи засоби MS Visual Studio. Приклад, що демонструється у даній темі, також може підійти для оперування базами даних інших провайдерів, наприклад, Microsoft SQL Server, Oracle і т.д. Оскільки робота з компонентами на автономному рівні, нічим не відрізняється від роботи, описаної в даній темі.
Схожі курсові роботи на C#:
- Розробка програми автоматизації роботи диспетчера кас автовокзалу;
- Розробка програми моніторингу забруднення навколишнього середовища.
Дана робота демонструє наявність потужних засобів для роботи з базами даних в MS Visual Studio. Взаємодія між візуальними елементами управління і базою даних реалізується з допомогою відповідних налаштувань, без програмного формування SQL-запитів. Це, в свою чергу, мінімізує написання програмного коду, оскільки вся робота з виведення інформації та обробки таблиць бази даних виконується системою.
Зміст
- Умова задачі
- Додаткова інформація
- Виконання
- 1. Створення проекту
- 2. Підключення бази даних “Account.mdb” до додатку
- 3. Проектування головної форми додатку
- 3.1. Налаштування загальних властивостей головної форми Form1
- 3.2. Проектування меню. Елемент управління MenuStrip
- 3.3. Розміщення елементів управління типу Label, Button, TextBox, DataGridView на формі
- 3.4. Налаштування елементу управління dataGridView1 що відповідає таблиці Worker (налаштування відображення таблиці Worker)
- 3.5. Налаштування елементу управління dataGridView2, що відповідає таблиці Account (налаштування відображення таблиці Account)
- 3.6. Створення розрахункового поля “Sum” (Сума) в таблицю Account
- 3.7. Налаштування властивостей елементів управління Label, Button, TextBox
- 3.8. Загальний вигляд форми “Form1.cs” після проведення налаштувань
- 4. Проектування додаткових форм
- 4.1. Проектування форми “FormAddWorker.cs” додавання нового працівника
- 4.2. Проектування форми “FormDelWorker.cs” видалення працівника
- 4.3. Проектування форми “FormEditWorker.cs” редагування інформації про працівника
- 4.4. Проектування форми “FormAddAccount.cs” додавання матеріального засобу
- 4.5. Проектування форми “FormDelAccount.cs” видалення рядка матеріального засобу
- 4.6. Проектування форми “FormEditAccount.cs” редагування рядка
- 5. Реалізація програмного коду
- 5.1. Програмування обробників подій головної форми Form1
- 5.1.1. Програмування подій Click та CellEnter елементу управління dataGridView1. Властивість Filter. Врахування зв’язку між таблицями при їх відображенні
- 5.1.2. Тестовий запуск програми на виконання. Текст програми
- 5.1.3. Програмування команди “Worker” => “Add…”
- 5.1.4. Програмування команди “Worker” => “Delete”
- 5.1.5. Програмування команди “Worker” => “Edit…”
- 5.1.6. Програмування команди “Inventory” => “Add…”
- 5.1.7. Програмування команди “Inventory” => “Delete”
- 5.1.8. Програмування команди “Inventory” => “Edit…”
- 5.1.9. Програмування фільтру за прізвищем у таблиці “Worker”. Подія TextChanged елементу управління textBox1
- 5.1.10. Програмування команди “Вихід”
- 5.2. Програмування події Load форми FormAddWorker
- 5.3. Програмування події Load форми FormEditWorker
- 5.4. Програмування події Load форми FormAddAccount
- 5.5. Програмування події Load форми FormEditAccount
- 5.1. Програмування обробників подій головної форми Form1
- 6. Перенаправлення обробників подій кліку на кнопках швидкого виклику на команди меню
- 7. Запуск програми на виконання. Висновки
- Зв’язані теми
Пошук на інших ресурсах:
Умова задачі
Розробити програму для ведення автоматизованого обліку матеріальних засобів. Базу даних використати Microsoft Access. Програма (додаток) має бути створений за шаблоном Windows Forms Application.
База даних попередньо створена засобами Microsoft Access і має назву Account. Архів з файлом бази даних Account.mdb можна завантажити тут.
База даних Account складається з двох таблиць Worker і Account. Таблиця Worker описує загальні дані про працівника підприємства або організації. Таблиця Account описує перелік матеріальних цінностей, що числяться за конкретним працівником. Таблиці зв’язані між собою за полем ID_Worker.
Структура таблиці Worker.
Структура таблиці Account.
Схема зв’язку між таблицями зображена на рисунку 1.
Рис. 1. Схема зв’язку між таблицями
⇑
Додаткова інформація
Відображення таблиць бази даних та взаємодія з користувачем здійснюються з допомогою елементу управління DataGridView.
Після зв’язуванні таблиці з базою даних система формує три об’єкти з іменами
- DataBaseNameDataSet
- TableNameBindingSource
- TableNameTableAdapter
де
- префікс DataBaseName… – ім’я бази даних. У нашому випадку для бази даних Account формується ім’я accountDataSet;
- префікс TableName… – ім’я таблиці в базі даних. У нашому випадку для таблиці Worker буде сформовано два об’єкти з іменами workerTableAdapter, workerBindingSource.
Велика частка робіт з налаштування та організації взаємодії з базою даних здійснюється саме з допомогою цих об’єктів. Основна ідея даної курсової роботи полягає у максимальному використанні можливостей цих об’єктів. Як буде показано нижче, не потрібно підключати простір імен System.Data.OleDb, тому що всю рутинну роботу бере на себе інтерфейс об’єктів Microsoft Visual Studio.
⇑
Виконання
1. Створення проекту
Запустити MS Visual Studio. Створити додаток за шаблоном Windows Forms Application. Детальний приклад створення додатку за шаблоном Windows Forms Application описується в темі:
Створення нового проекту здійснюється командою
File->New Project...
У вікні “New Project” задаються такі налаштування (рисунок 2):
- в полі “Installed Templates” потрібно вибрати “Visual C#”;
- у переліку шаблонів Visual C# вибирається Windows Forms Application;
- у полі “Location:” потрібно вказати папку, в якій буде розміщуватись проект (з допомогою кнопки “Browse…”. Наприклад “D:\Programs\C_Sharp\Oblik01”;
- у полі “Name:” потрібно вказати назву новостворюваного проекту. У нашому випадку це Oblik01.
Рис. 2. Вікно налаштувань при створенні проекту
Після вибору “OK” створиться нова форма додатку з іменем Form1.
⇑
2. Підключення бази даних “Account.mdb” до додатку
На цьому етапі потрібно скопіювати базу даних “Account.mdb” у папку, в якій розміщуються файли проекту. Архів з раніше створеним файлом бази даних можна завантажити тут.
У нашому випадку після копіювання файл бази даних може мати таке повне ім’я:
D:\Programs\Oblik01\Account.mdb
або
D:\Programs\Oblik01\Oblik01\Account.mdb
У даному випадку не будемо вдаватись в подробиці підключення файлу бази даних до додатку. Детальний приклад підключення бази даних Account.mdb до додатку наведено в темі:
Підключення файлу бази даних відбувається за принципом майстра. У покроковому процесі при виборі таблиць бази даних потрібно вибрати усі таблиці (Worker, Account) і перегляди (AccountQuery, AccountQueryCalc, QueryWorker).
Ім’я джерела даних залишається за замовчуванням – AccountDataSet.
Після підключення файлу бази даних до додатку вигляд вікна Server Explorer матиме вигляд як показано на рисунку 3.
Рис. 3. Вікно утиліти Server Explorer після підключення бази даних Account.mdb
⇑
3. Проектування головної форми додатку
На даний момент є пуста форма додатку і підключення до бази даних Account.mdb. Ім’я форми за замовчуванням Form1.
3.1. Налаштування загальних властивостей головної форми Form1
Щоб налаштувати загальні властивості форми потрібно активувати (виділити) форму і у вікні Properties (клавіша F4) виконати відповідні дії. Налаштовуються такі властивості форми:
- властивість Text = “Inventory accounting” (рисунок 4);
- у вкладці Size властивість Width = 800;
- у вкладці Size властивість Height =600;
- властивість MaximizeBox = False. Кнопка переводу з розгорнутого у звичайний режим зникне.
Рис. 4. Налаштування властивостей форми Form1
⇑
3.2. Проектування меню. Елемент управління MenuStrip
На цьому етапі проектується меню команд головної форми додатку. Щоб створити меню потрібно використати елемент управління MenuStrip. Після розміщення на формі створюється об’єкт menuStrip1, що відповідає головному меню (рисунок 5).
Рис. 5. Елемент управління MenuStrip
У даній темі деталі розробки меню опускаються. Більш детальний приклад створення головного меню описується у темі:
У меню створюються такий перелік команд як показано на рисунках 6-7.
Рис. 6. Перелік команд меню Worker
Меню Worker містить команди додавання, видалення та редагування таблиці Worker.
Рис. 7. Перелік команд меню Inventory
Меню Inventory містить команди додавання, видалення та редагування таблиці Account.
⇑
3.3. Розміщення елементів управління типу Label, Button, TextBox, DataGridView на формі
З панелі інструментів Toolbox вибрати і розмістити такі елементи управління:
- три елементи управління типу Label для відображення інформаційних повідомлень. Автоматично буде створено три об’єкти з іменами label1, label2, label3;
- шість елементів управління типу Button для швидкого виклику команд меню. Автоматично буде створено шість об’єктів з іменами button1, button2, button3, button4, button5, button6;
- один елемент управління TextBox. Тут буде відображатись текст фільтру для виведення таблиці Worker. Створюється об’єкт з іменем textBox1;
- два елементи управління типу DataGridView. Створюється два об’єкти з іменами dataGridView1, dataGridView2. Ці об’єкти призначені для відображення даних у таблицях Worker та Account.
Після розміщення елементів управління форма буде мати приблизний вигляд як зображено на рисунку 8.
Рис. 8. Вигляд головної форми додатку після розміщення елементів управління
⇑
3.4. Налаштування елементу управління dataGridView1 що відповідає таблиці Worker (налаштування відображення таблиці Worker)
3.4.1. Підключення таблиці Worker бази даних
Підключення таблиці Worker до додатку відбувається стандартним способом. Таблиця Worker буде відображатись в елементі управління dataGridView1.
Для запуску процесу підключення потрібно спочатку активувати dataGridView1. Потім вибрати стрілку вправо як показано на рисунку 9. Відобразиться меню “DataGridView Tasks”.
Рис. 9. Меню DataGridView Tasks елементу управління dataGridView1
У меню “DataGridView Tasks” потрібно активувати спадне підменю “Choose Data Source:” і розкрити список джерел даних як показано на рисунку 10. У списку вибрати таблицю Worker.
Рис. 10. Вибір джерела даних AccountDataSet і таблиці Worker
Після вибору таблиці Worker вікно елементу управління dataGridView1 відобразить назви полів таблиці Worker (рисунок 11). Також створюється три об’єкти accountDataSet, workerBindingSource, workerTableAdapter для організації взаємодії з таблицею Worker бази даних та її відображення у dataGridView1.
Рис. 11. Вигляд dataGridView1 після вибору джерела даних (таблиця Worker). Об’єкти accountDataSet, workerBindingSource, workerTableAdapter
⇑
3.4.2. Елементи управління accountDataSet, workerBindingSource, workerTableAdapter
На рисунку 11 видно, що система створює три об’єкти accountDataSet, workerBindingSource, workerTableAdapter після вибору джерела даних. Джерелом даних є таблиця Worker. З допомогою цих об’єктів можна організовувати взаємодію з таблицею Worker бази даних (буде показано нижче).
Якщо тепер запустити додаток на виконання, то можна побачити, що дані таблиці Worker відображаються в dataGridView1.
⇑
3.4.3. Зміни в обробнику події Load головної форми. Текст методу Form1_Load()
Після вибору джерела даних в dataGridView1, змінюється код обробника події Form1_Load(), який викликається при завантаженні форми. Текст обробника події наступний:
private void Form1_Load(object sender, EventArgs e) { // TODO: This line of code loads data into the 'accountDataSet.Worker' table. You can move, or remove it, as needed. this.workerTableAdapter.Fill(this.accountDataSet.Worker); }
Викликається метод Fill() об’єкту workerTableAdapter. У подальшому цей метод буде використовуватись для відображення даних з таблиці Worker в елементі управління dataGridView1.
⇑
3.4.4. Налаштування вигляду стовпців елементу управління dataGridView1
На цьому кроці налаштовується зовнішній вигляд dataGridView1.
Система Microsoft Visual Studio дає досить широкий спектр можливостей для налаштування таблиці, що відображається у DataGridView. Можна налаштовувати такі основні візуальні елементи:
- назви стовпців таблиці;
- шрифт стовпців таблиці;
- колір фону та тексту стовпців таблиці;
- шрифт заголовків кожного стовпця таблиці;
- колір фону та тексту заголовків таблиці;
- способи вирівнювання у комірках таблиці;
- способи вирівнювання у заголовках таблиці;
- можливість відображення (приховування) заданих стовпців таблиці;
- інші додаткові можливості.
У нашому випадку потрібно налаштувати такі загальні властивості dataGridView1:
- властивість MultiSelect = False (заборонити виділення декількох рядків);
- ReadOnly = True. Забороняється редагувати комірки dataGridView1 безпосередньо. Зміна значень в комірках буде відбуватись через спеціальні вікна (форми);
- AllowUserToDeleteRows = False. Забороняється видаляти рядки клавішою Del;
- SelectionMode = FullRowSelect. Виділяється цілий рядок, а не окрема комірка рядка.
⇑
3.4.4.1. Групове налаштування заголовків усіх стовпців. Властивість ColumnHeadersDefaultCellStyle
Групове налаштування параметрів заголовків усіх стовпців здійснюється з допомогою властивості ColumnHeaderDefaultCellStyle. Ця властивість використовується, якщо декілька стовпців таблиці мають однакові вимоги до оформлення (наприклад, шрифт, колір тексту, вирівнювання).
Якщо потрібно індивідуально налаштувати вигляд потрібних стовпців, тоді у MS Visual Studio використовується спеціальне вікно Edit Columns (див. наступний пункт).
Ця властивість дозволяє налаштувати за замовчуванням вигляд усіх заголовків стовпців у таблиці DataGridView (рисунок 12).
Рис. 12. Властивість ColumnHeadersDefaultCellStyle
Щоб налаштувати властивість ColumnHeadersDefauleCellStyle потрібно:
- активувати елемент управління dataGridView1;
- вибрати кнопку “…” навпроти властивості ColumnHeadersDefaultCellStyle (рисунок 12). У результаті відкриється стандартне вікно CellStyleBuilder (рисунок 13).
Рис. 13. Вікно “CellStyle Builder”. Налаштування вигляду комірок
Для заголовку, у цьому вікні можна використовувати такі властивості:
- BackColor – колір фону;
- Font – шрифт тексту. При виборі кнопки “…” властивості відкривається стандартне вікно Windows для вибору потрібного шрифту;
- ForeColor – колір шрифта;
- Format – формат виведення цифрових значень. Пропонуються різні формати представлення чисел у комірках: NoFormatting, Numeric, Currency, DateTime, Scientific, Custom. У нашому випадку заголовки стовпців містять тільки текст, тому цю властивість змінювати не потрібно;
- Alignment – вирівнювання тексту в комірці по горизонталі та вертикалі;
- Padding – відступ у пікселах між текстом і рамкою, в якій цей текст вписується.
У нижній частині вікна є група Preview. У групі Preview можна переглядати поточне відображення комірок в режимі “на льоту”.
У нашому випадку потрібно налаштувати такі властивості ColumnHeadersDefaultCellStyle:
- властивість Alignment = MiddleCenter;
- властивість Font.Bold = true.
⇑
3.4.4.2. Задавання шаблону DefaultCellStyle для узагальненого відображення даних у стовпцях dataGridView1
Властивість DefaultCellStyle (рисунок 14) дозволяє задати загальні (спільні для усіх) налаштування для комірок (рядків) усіх стовпців таблиці, що відображаються у DataGridView. Якщо деякі рядки мають інші (відмінні) налаштування, то їх можна змінити в індивідуальному порядку (див. наступний пункт).
Рис. 14. Виклик властивості DefaultCellStyle
Робота з налаштування властивості DefaultCellStyle така сама як з властивістю ColumnHeadersDefaultCellStyle, яка описується у попередньому пункті. Тому, розглядати цю властивість додатково не має змісту.
⇑
3.4.4.3. Налаштування вигляду заданого стовпця таблиці
Бувають випадки, коли стовпець таблиці має унікальні параметри відображення. У цьому випадку потрібно викликати спеціальне вікно “Edit Columns” для елементу управління DataGridView.
Щоб викликати вікно “Edit Columns” потрібно виконати такі дії (рисунок 15):
- активувати елемент управління dataGridView1. Відкриється контекстне меню;
- у контекстному меню вибрати команду “Edit Columns…”.
Рис. 15. Виклик вікна Edit Columns
Після виклику вікно “Edit Columns” має вигляд, як показано на рисунку 16.
Рис. 16. Вікно налаштування кожного стовпця окремо
У списку “Selected Column:” (ліва частина вікна) відображається список полів таблиці, що відображається у dataGridView1. У списку “Bound Column Properties” для кожного вибраного поля відображається перелік доступних властивостей та їх значень.
За замовчуванням, для усіх стовпців (полів) таблиці встановлюються значення, що були налаштовані у властивості ColumnHeadersDefaultCellStyle (див. попередній пункт). У вікні “Edit Columns” налаштовуються тільки ті параметри заголовку стовпця, які є унікальними.
Для кожного стовпця вікно “Edit Columns” пропонує такі основні властивості:
- DefaultCellStyle – задає основні параметри для комірок (рядків) стовпця (шрифт, колір фону, вирівнювання). Для налаштування даної властивості викликається спеціальне вікно CellStyle Builder, робота з яким детально описується в попередньому пункті.
- HeaderText – текст заголовку, що буде відображатись у таблиці;
- Visible – визначає, чи відображається стовпець у DataGridView;
- MaxInputLength – максимальна кількість символів, які можна ввести у комірках (рядках) стовпця;
- ReadOnly – визначає, чи можна безпосередньо редагувати значення комірок у DataGridView;
- Resizeable – визначає, чи можна змінювати ширину колонки безпосередньо в DataGridView (з допомогою “мишки”);
- Name – ім’я об’єкту (змінної), що відповідає даному стовпцю. Це ім’я використовується у програмному коді;
- ColumnType – тип колонки. Система MS Visual Studio пропонує різні типи представлення стовпців. Найбільш поширеним є представлення комірок стовпця у вигляді рядків вводу TextBox – DataGridViewTextBoxColumn;
- AutoSizeMode – визначає, чи змінюється (розширюється) ширина стовпця, якщо текст у рядку стовпця (у пікселах) має більшу ширину ніж задано у властивості Width. Наприклад, властивість є корисною, якщо потрібно повністю відобразити текст у стовпці без його урізання;
- DividerWidth – додаткова ширина межі (в пікселах) між заданим стовпцем і стовпцем, що відображається з правої сторони від даного.
- MinimumWidth – мінімально допустима ширина стовпця у пікселах;
- Width – ширина стовпця у пікселах.
У нашому випадку потрібно встановити значення таких властивостей:
- у стовпці ID_Worker властивість Visible = False (далі ID_Worker.Visible). Оскільки поле ID_Worker використовується для зв’язування таблиць, то відображати його не має сенсу;
- у стовпці WName властивість HeaderText = “Name of worker”;
- у стовпці WName властивість AutoSizeMode = AllCells. Тепер ширина стовпця WName буде підлаштовуватись під ширину рядка, який має максимальну ширину (в пікселах) серед усіх рядків;
- у стовпці WPosition властивість HeaderText = “Position”;
- у стовпці WPosition властивість AutoSizeMode = AllCells;
- у стовпці WSex властивість HeaderText = “M/F”;
- у стовпці WSex властивість AutoSizeMode = AllCells;
- у стовпці WSex властивість DefaultCellStyle.Alignment = MiddleCenter.
⇑
3.5. Налаштування елементу управління dataGridView2, що відповідає таблиці Account (налаштування відображення таблиці Account)
3.5.1. Зв’язування таблиці Account з dataGridView2
Зв’язування таблиці Account з dataGridView2 здійснюється так само як і для таблиці Worker, що описується в п. 3.4.1. Потрібно спочатку активувати dataGridView2. Потім вибрати стрілку вправо. У вікні “DataGridView Tasks” в полі “Choose Data Source:” потрібно вибрати
Other Data Sources -> Project Data Sources -> AccountDataSet -> Account
як показано на рисунку 17.
Рис. 17. Вибір таблиці Account у вікні DataGridView Tasks
Після вибору таблиці Account, поля цієї таблиці відобразяться у вікні dataGridView2. Так само створюється два нових об’єкти accountBindingSource та accountTableAdapter (рисунок 18).
Рис. 18. Вигляд вікна форми після підключення таблиці Account до dataGridView2
⇑
3.5.2. Об’єкти accountDataSet, accountBindingSource, accountTableAdapter
Як і у випадку з таблицею Worker (див. п. 3.4.1), Після вибору таблиці Account в якості джерела даних створюється ще два об’єкти (рисунок 18):
- accountBindingSource – зв’язує безпосередньо таблицю бази даних з набором даних AccountDataSet (тут Account – назва бази даних а не таблиці);
- accountTableAdapter – використовується для безпосереднього програмного управління даними в таблиці (додавання рядків, стовпців тощо).
Об’єкт accountDataSet є спільним для об’єктів таблиць Worker та Account: workerBindingSource, workerTableAdapter, accountBindingSource, accountTableAdapter. Можливий також варіант, коли для таблиць створюються різні об’єкти типу DataSet.
⇑
3.5.3. Зміни в обробнику події Load головної форми. Текст методу Form1_Load()
Після зв’язування таблиці Account з dataGridView2 у тексті обробника події Form_Load() додається ще один метод Fill().
Загальний вигляд обробника події на даний момент наступний:
private void Form1_Load(object sender, EventArgs e) { // TODO: This line of code loads data into the 'accountDataSet.Account' table. You can move, or remove it, as needed. this.accountTableAdapter.Fill(this.accountDataSet.Account); // TODO: This line of code loads data into the 'accountDataSet.Worker' table. You can move, or remove it, as needed. this.workerTableAdapter.Fill(this.accountDataSet.Worker); }
⇑
3.5.4. Налаштування вигляду стовпців dataGridView2 (таблиця Account)
У нашому випадку потрібно налаштувати такі загальні властивості dataGridView2:
- властивість MultiSelect = False (заборонити виділення декількох рядків);
- ReadOnly = True. Забороняється редагувати комірки dataGridView2 безпосередньо. Зміна значень в комірках буде відбуватись через спеціальні вікна (форми);
- AllowUserToDeleteRows = False. Забороняється видаляти рядки клавішою Del;
- SelectionMode = FullRowSelect. Виділяється цілий рядок, а не окрема комірка рядка.
⇑
3.5.4.1. Групове налаштування заголовків усіх стовпців. Властивість ColumnHeadersDefaultCellStyle
З допомогою властивості ColumnHeadersDefaultCellStyle налаштовується загальний вигляд стовпців за замовчуванням. Більш детально ця властивість описується в п. 3.4.4.1.
Для ColumnHeadersDefaultCellStyle потрібно налаштувати такі внутрішні властивості:
- властивість Alignment = MiddleCenter;
- властивість Bold = True.
3.5.4.2. Задавання узагальненого відображення даних у стовпцях dataGridView2 (властивість DefaultCellStyle)
У п. 3.4.4.2 детально описуються особливості використання властивості DefaultCellStyle елементу управління dataGridView2.
Для таблиці Account потрібно встановити наступні властивості:
- властивість Alignment = MiddleCenter.
⇑
3.5.4.3. Встановлення індивідуальних параметрів відображення для кожного стовпця таблиці
Налаштування зовнішнього вигляду стовпців dataGridView2 здійснюється так само, як і dataGridView1. Для цього, у режимі проектування, потрібно викликати команду “Edit Columns…” з контекстного меню dataGridView2 (див. п. 3.4.3.3.). Налаштовуються властивості наступних полів:
- у полі ID_Account властивість Visible = False (приховати поле);
- у полі ID_Worker властивість Visible = False;
- у полі ANum властивість HeaderText = “Number”;
- у полі ANum властивість DefaultCellStyle.Alignment = MiddleCenter;
- у полі ANum властивість AutoSizeMode = AllCells;
- у полі ADate властивість HeaderText = “Date”;
- у полі ADate властивість DefaultCellStyle.Alignment = MiddleCenter;
- у полі ADate властивість AutoSizeMode = AllCells;
- у полі AInvNum властивість HeaderText = “Inv. Number”;
- у полі AInvNum властивість DefaultCellStyle.Alignment = MiddleCenter;
- у полі AInvNum властивість AutoSizeMode = AllCells;
- у полі AObjName властивість HeaderText = “Object name”;
- у полі AObjName властивість DefaultCellStyle.Alignment = MiddleLeft;
- у полі AObjName властивість AutoSizeMode = AllCells;
- у полі ACount властивість HeaderText = “Count”;
- у полі ACount властивість DefaultCellStyle.Alignment = MiddleCenter;
- у полі ACount властивість AutoSizeMode = AllCells;
- у полі APrice властивість HeaderText = “Price”;
- у полі APrice властивість DefaultCellStyle.Alignment = MiddleRight;
- у полі APrice властивість AutoSizeMode = AllCells.
⇑
3.6. Створення розрахункового поля “Sum” (Сума) в таблицю Account
Окремим пунктом у даній темі виділено додавання розрахункового поля.
Розрахункове поле “Sum” в таблиці Account можна додавати різними способами. Наприклад, можна створити це поле засобами Microsoft Access і створити перегляд (View). Тут описується один з можливих способів.
Результат поля Sum є добуток полів ACount та APrice.
⇑
3.6.1. Додавання розрахункового поля Sum в файл AccountDataSet.xsd
Файл AccountDataSet.xsd відображає таблиці (перегляди, збережені процедури та інше) бази даних Account, які підключені до набору даних accountDataSet. Фактично, розрахункове поле створюється у цьому файлі.
Щоб створити розрахункове поле у таблиці Account, потрібно виконати таку послідовність дій:
- у режимі “Form1.cs [Design]” зробити клік правою кнопкою “мишки” на об’єкті accountTableAdapter. У результаті відкриється контекстне меню (рисунок 19);
Рис. 19. Контекстне меню адаптера даних accountTableAdapter
- У контекстному меню вибрати команду “Edit Queries in DataSet Designer…”. Відкриється вікно, що відображає вміст файлу “AccountDataSet1.xsd” (рис. 20);
Рис. 20. Відображення таблиці Account у файлі AccountDataSet.xsd
- викликати контекстне меню для таблиці Account (рисунок 21). У меню вибрати команду Add->Column. У результаті буде створене нове поле з іменем DataColumn1.
Рис. 21. Виклик команди додавання нового стовпця
- Виділити поле DataColumn1 і у вікні Properties встановити властивість Name = “Sum” (рисунок 22). Зміни зафіксуються у таблиці Account;
Рис. 22. Задавання властивості Name для розрахункового поля
Встановити властивість Expression у значення “ACount*APrice” (рисунок 23). Зберегти і закрити файл AccountDataSet1.xsd;
Рис. 23. Властивість Expression додаткового поля Sum
- встановити властивість DataType = System.Double (рисунок 24). Це необхідно для зручного відображення результатів добутку, що закінчуються нулем. Тобто, число 2.3 буде відображатись як 2.30.
Рис. 24. Властивість DataType
Після цього можна зберегти проект і закрити файл AccountDataSet.xsd.
⇑
3.6.2. Підключення новоствореного поля Sum в dataGridView2
Наступним кроком потрібно підключити створене розрахункове поле Sum у перелік полів dataGridView2 для його відображення.
Щоб відобразити поле Sum у dataGridView1 потрібно виконати такі кроки:
- Перейти у режим проектування форми “Form1.cs [Design]”. Зробити клік правою кнопкою мишки на елементі управління dataGridView2. У контекстному меню вибрати команду “Edit Columns…” (рисунок 25). У результаті відкриється вікно “Edit Columns”;
Рис. 25. Контекстне меню dataGridView2. Виклик команди “Edit Columns…”
- У вікні Edit Columns вибрати команду “Add…” (рисунок 26). Відкриється вікно “Add Column”.
Рис. 26. Вікно “Edit Columns”. Команда “Add…”
- у вікні “Add Column” в списку “Databound column” вибрати поле “Sum” (рисунок 27). Також можна змінити поле “Header text:”. Після вибору кнопки “Add…” відбудеться перехід у попереднє вікно Edit Columns;
Рис. 27. Вікно “Add Column”. Вибір поля Sum для відображення у dataGridView2
- у вікні “Edit Columns” поле Sum може знаходитись не на своїй позиції. Тому, його позицію в таблиці треба поправити з допомогою кнопок стрілок вверх та вниз (рисунок 28).
Рис. 28. Остаточне формування розрахункового поля Sum у вікні “Edit Columns”
Формування розрахункового поля засобами MS Visual Studio завершено.
⇑
3.6.3. Налаштування відображення розрахункового поля “Sum” з точністю 2 знаки після коми
На даний момент розрахункове поле Sum відображається у довільному форматі. Зручно мати відображення цього поля з точністю 2 знаки після коми. Щоб зробити це, потрібно виконати наступні кроки:
- викликати контекстне меню елементу управління DataGridView2. У меню вибрати команду “Edit Columns…”. У результаті відкриється вікно “Edit Columns”;
- у вікні “Edit Columns” активувати (виділити) поле “Sum” (рисунок 29). У переліку властивостей вибрати “…” напроти властивості DefaultCellStyle. Відкриється вікно “CellStyle Builder”;
Рис. 29. Виклик вікна редагування властивостей комірки у полі “Sum”
- у вікні “CellStyle Builder” вибрати властивість Format (рисунок 30). Відкриється вікно “Format String Dialog”;
Рис. 30. Вікно CellStyleBuilder. Властивість Format
- у вікні “Format String Dialog” пропонується декілька відомих форматів для відображення грошових величин. У полі “Format type:” потрібно вибрати тип формату Numeric. Значення “Decimal places” = 2 (рисунок 31).
Рис. 31. Вікно “Format String Dialog”
Після вибору на OK відбудеться перехід до попереднього вікна CellStyleBuilder. У цьому вікні можна поправити властивість Alignment у значення MiddleRight.
Останнім кроком потрібно підтвердити на OK в усіх наступних вікнах. Після цього, розрахункове поле “Sum” буде відображатись з точністю 2 знаки після коми.
⇑
3.7. Налаштування властивостей елементів управління Label, Button, TextBox
Налаштувати такі властивості елементів управління, що розміщуються в головній формі:
- у label1 властивість Text = “Worker” (в подальшому label1.Text);
- label2.Text = “Filter:”;
- label3.Text = “Account”;
- button1.Text = “Add…”;
- button2.Text = “Delete”;
- button3.Text = “Edit…”;
- button4.Text = “Add record…”;
- button5.Text = “Delete record”;
- button6.Text = “Edit record…”;
- textBox1.Text = “”.
⇑
3.8. Загальний вигляд форми “Form1.cs” після проведення налаштувань
Після налаштування, вигляд головної форми додатку має вигляд, як показано на рисунку 32.
Рис. 32. Вигляд форми додатку після налаштувань
⇑
4. Проектування додаткових форм
4.1. Проектування форми “FormAddWorker.cs” додавання нового працівника
На цьому кроці проектується форма додавання інформації про нового працівника.
Щоб додати нову форму, потрібно використати команду
Project -> Add Windows Form...
Відкриється вікно, у якому потрібно вказати ім’я файлу форми (рисунок 33). У нашому випадку задається ім’я “FormAddWorker.cs”.
Більш детальний опис того, як створюється форма, описується в темі:
Рис. 33. Додавання нової форми FormAddWorker.cs до додатку
Потрібно розмістити такі елементи управління (рисунок 34):
- три елементи управління типу Label. Створюються об’єкти з іменами label1, label2, label3;
- два елементи управління типу Button. Створюються об’єкти з іменами button1, button2;
- один елемент управління типу ComboBox. Створюється об’єкт з іменем comboBox1;
- два елементи управління типу TextBox. Створюються об’єкти з іменами textBox1, textBox2.
Рис. 34. Форма “FormAddWorker.cs”
Налаштовуються такі властивості елементів управління:
- у формі властивість Text = “Add worker” (далі FormAddWorker.Text);
- FormAddWorker.ControlBox = False;
- FormAddWorker.StartPosition = CenterScreen;
- FormAddWorker.FormBorderStyle = FixedDialog;
- в елементі управління label1 властивість Text = “Name of worker” (label1.Text);
- label2.Text = “Position”;
- label3.Text = “M/F”;
- button1.Text = “Add”;
- button2.Text = “Cancel”;
- button1.DialogResult = OK;
- button2.DialogResult = Cancel;
- textBox1.Modifiers = Public. Елемент управління textBox1 стає доступним з інших форм і методів;
- textBox2.Modifiers = Public;
- comboBox1.Modifiers = Public.
В елементі управління comboBox1 потрібно у властивість Items занести рядки, як показано на рисунку 35.
Рис. 35. Властивість Items елементу управління comboBox1
Після проектування вікно форми FormAddWorker показано на рисунку 36.
Рис. 36. Форма FormAddWorker
⇑
4.2. Проектування форми “FormDelWorker.cs” видалення працівника
За зразком проектування попередньої форми (пункт 4.1) проектується форма видалення працівника яка розміщується у файлі FormDelWorker.cs.
На формі розміщуються такі елементи управління:
- два елементи управління типу Label. Створюється два об’єкти з іменами label1, label2;
- два елементи управління типу Button. Створюється два об’єкти з іменами button1, button2
Налаштувати такі властивості елементів управління:
- FormDelWorker.Text = “Delete worker”;
- FormDelWorker.FormBorderStyle = FixedDialog;
- FormDelWorker.StartPosition = CenterScreen;
- FormDelWorker.ControlBox = False;
- label1.Text = “Delete worker. Are you sure?”;
- label2.Modifiers = Public. Цей елемент управління буде видимий з головної форми і буде формуватись з неї;
- button1.Text = “OK”;
- button1.DialogResult = OK;
- button2.Text = “Cancel”;
- button2.DialogResult = Cancel.
Після створення та налаштування елементів управління форма має вигляд, як показано на рисунку 37.
Рис. 37. Форма FormDelWorker.cs
⇑
4.3. Проектування форми “FormEditWorker.cs” редагування інформації про працівника
Форма FormEditWorker.cs призначена для редагування інформації про працівника і буде викликатись командою
Worker->Edit...
Форма FormEditWorker.cs створюється так само як і попередні форми. На формі розміщуються такі елементи управління:
- три елементи управління типу Label. Створюються об’єкти з іменами label1, label2, label3;
- два елементи управління типу Button. Створюються об’єкти з іменами button1, button2;
- один елемент управління типу ComboBox. Створюється об’єкт з іменем comboBox1;
- два елементи управління типу TextBox. Створюються об’єкти з іменами textBox1, textBox2.
Налаштовуються такі властивості елементів управління:
- FormEditWorker.Text = “Edit worker”;
- FormEditWorker.FormBorderStyle = FixedDialog;
- FormEditWorker.StartPosition = CenterScreen;
- FormEditWorker.ControlBox = False;
- label1.Text = “Name of worker”;
- label2.Text = “Position”;
- label3.Text = “M/F”;
- textBox1.Modifiers = Public;
- textBox2.Modifiers = Public;
- comboBox1.Modifiers = Public;
- comboBox1.Items = { “M”, “F” };
- button1.Text = “Edit”;
- button2.Text = “Cancel”;
- button1.DialogResult = OK;
- button2.DialogResult = Cancel.
Після проектування, вікно форми має вигляд як показано на рисунку 38.
Рис. 38. Вікно редагування інформації про працівника
⇑
4.4. Проектування форми “FormAddAccount.cs” додавання матеріального засобу
Форма FormAddAccount.cs призначена для додавання рядка матеріального засобу. На формі розміщуються такі елементи управління:
- 6 елементів управління типу Label. Створюються об’єкти label1, label2, label3, label4, label5, label6;
- 6 елементів управління типу TextBox. Створюються об’єкти textBox1, textBox2, textBox3, textBox4, textBox5, textBox6;
- 2 елементи управління типу Button. Створюються об’єкти button1, button2.
Налаштовуються властивості таких елементів управління:
- FormAddAccount.Text = “Add Inventory”;
- FormAddAccount.FormBorderStyle = FixedDialog;
- FormAddAccount.ControlBox = False;
- FormAddAccount.StartPosition = CenterScreen;
- label1.Text = “Number”;
- label2.Text = “Date”;
- label3.Text = “Inventory number”;
- label4.Text = “Object name”;
- label5.Text = “Count”;
- label6.Text = “Price”;
- button1.Text = “Add”;
- button1.DialogResult = OK;
- button2.Text = “Cancel”;
- button2.DialogResult = Cancel;
- textBox1.Modifiers = Public;
- textBox2.Modifiers = Public;
- textBox3.Modifiers = Public;
- textBox4.Modifiers = Public;
- textBox5.Modifiers = Public;
- textBox6.Modifiers = Public.
На рисунку 39 зображено вікно форми FormAddAccount.cs після налаштування.
Рис. 39. Вікно FormAddAccount.cs після налаштування
⇑
4.5. Проектування форми “FormDelAccount.cs” видалення рядка матеріального засобу
Форма FormDelAccount.cs є вікно запиту-підтвердження видалення рядка матеріального засобу.
На формі розміщуються такі елементи управління:
- два елементи управління типу Button (button1, button2);
- два елементи управління типу Label (label1, label2).
Потрібно налаштувати такі властивості елементів управління:
- FormDelAccount.Text = “Delete Inventory”;
- FormDelAccount.FormBorderStyle = FixedDialog;
- FormDelAccount.ControlBox = False;
- FormDelAccount.StartPosition = CenterScreen;
- label1.Text = “Are you sure you want to delete?”;
- label2.Modifiers = Public. Цей рядок буде змінюватись у головній формі, тому має бути видимим ззовні;
- button1.Text = “Delete”;
- button1.DialogResult = OK;
- button2.Text = “Cancel”;
- button2.DialogResult = Cancel.
На рисунку 40 відображено загальний вигляд форми
Рис. 40. Загальний вигляд форми FormDelAccount
⇑
4.6. Проектування форми “FormEditAccount.cs” редагування рядка
Форма FormEditAccount.cs призначена для редагування інформації поточного рядка таблиці Account. На формі розміщуються такі елементи управління:
- 6 елементів управління типу Label: label1, label2, label3, label4, label5, label6;
- 6 елементів управління типу TextBox: textBox1, textBox2, textBox3, textBox4, textBox5, textBox6;
- 2 елементи управління типу Button: button1, button2.
Налаштовуються такі властивості форми та елементів управління:
- FormEditAccount.Text = “Edit Inventory”;
- FormEditAccount.FormBorderStyle = FixedDialog;
- FormEditAccount.ControlBox = False;
- FormEditAccount.StartPosition = CenterScreen;
- label1.Text = “Number”;
- label2.Text = “Date”;
- label3.Text = “Inventory number”;
- label4.Text = “Object name”;
- label5.Text = “Count”;
- label6.Text = “Price”;
- button1.Text = “Add”;
- button1.DialogResult = OK;
- button2.Text = “Cancel”;
- button2.DialogResult = Cancel;
- textBox1.Modifiers = Public;
- textBox2.Modifiers = Public;
- textBox3.Modifiers = Public;
- textBox4.Modifiers = Public;
- textBox5.Modifiers = Public;
- textBox6.Modifiers = Public.
Після налаштування вигляд форми FormEditAccount.cs зображено на рисунку 41.
Рис. 41. Форма FormEditAccount.cs
⇑
5. Реалізація програмного коду
Залишається тільки написати програмний код обробників подій.
5.1. Програмування обробників подій головної форми Form1
5.1.1. Програмування подій Click та CellEnter елементу управління dataGridView1. Властивість Filter. Врахування зв’язку між таблицями при їх відображенні
На даний момент відображаються усі дані таблиць Worker та Account. Однак, у нашому випадку, потрібно відкорегувати відображення даних у таблицях за наступною вимогою.
Якщо в таблиці Worker вибрати працівника, то таблиця Account має відображати дані, що стосуються тільки цього працівника. Як відомо, таблиці Worker та Account є зв’язані між собою за полем ID_Worker. Це означає, що таблиця Account повинна відображати дані, що відповідають значенню ID_Worker активного (виділеного) рядка таблиці Worker.
У нашому випадку потрібно запрограмувати дві події для елементу управління dataGridView1:
- подію Click (рисунок 43). Ця подія генерується, коли користувач зробив клік на деякому рядку;
- подію CellEnter (рисунок 44). Ця подія генерується, коли рядок таблиці отримує фокус введення.
Рис. 43. Подія Click елементу управління dataGridView1
Рис. 44. Подія CellEnter елементу управління dataGridView1
У даній темі процес програмування обробника події опускається. Детальний приклад програмування події описується в темі:
Текст обробників подій наступний:
private void dataGridView1_Click(object sender, EventArgs e) { // створити фільтр, який виведе в dataGridView2 те що потрібно int id; int index; index = dataGridView1.CurrentRow.Index; // взяти значення id = Worker.ID_Worker id = (int)dataGridView1.Rows[index].Cells[0].Value; accountBindingSource.Filter = "ID_Worker = " + id.ToString(); } private void dataGridView1_CellEnter(object sender, DataGridViewCellEventArgs e) { // створити фільтр, який виведе в dataGridView2 те що потрібно int id; int index; index = dataGridView1.CurrentRow.Index; // взяти значення id = Worker.ID_Worker id = (int)dataGridView1.Rows[index].Cells[0].Value; accountBindingSource.Filter = "ID_Worker = " + id.ToString(); }
Як видно з вищенаведеного коду, текст обробників подій однаковий. Важливим тут є поле Filter об’єкту accountBindingSource, що був створений системою при підключенні до таблиці Account. Це поле, є, фактично, фрагментом умови у запиті на мові SQL. На мові SQL умова визначається ключовим словом WHERE.
Наприклад, якщо у Filter вказати
ID_Worker = 5
то цей рядок буде перетворений у фрагмент SQL-коду
WHERE ID_Worker = 5
⇑
5.1.2. Тестовий запуск програми на виконання. Текст програми
Тепер можна запустити додаток і перевірити його роботу. При зміні рядка в таблиці Worker автоматично виводяться зв’язані з цим рядком дані таблиці Account. Як відомо, дані зв’язані полем ID_Worker.
На даний момент, текст модуля 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 Oblik01 { public partial class Form1 : Form { public Form1() { InitializeComponent(); } private void Form1_Load(object sender, EventArgs e) { // TODO: This line of code loads data into the 'accountDataSet.Account' table. You can move, or remove it, as needed. this.accountTableAdapter.Fill(this.accountDataSet.Account); // TODO: This line of code loads data into the 'accountDataSet.Worker' table. You can move, or remove it, as needed. this.workerTableAdapter.Fill(this.accountDataSet.Worker); } private void dataGridView1_Click(object sender, EventArgs e) { // створити фільтр, який виведе в dataGridView2 те що потрібно int id; int index; index = dataGridView1.CurrentRow.Index; // взяти значення id = Worker.ID_Worker id = (int)dataGridView1.Rows[index].Cells[0].Value; // працює accountBindingSource.Filter = "ID_Worker = " + id.ToString(); } private void dataGridView1_CellEnter(object sender, DataGridViewCellEventArgs e) { // створити фільтр, який виведе в dataGridView2 те що потрібно int id; int index; index = dataGridView1.CurrentRow.Index; // взяти значення id = Worker.ID_Worker id = (int)dataGridView1.Rows[index].Cells[0].Value; // працює accountBindingSource.Filter = "ID_Worker = " + id.ToString(); } } }
⇑
5.1.3. Програмування команди “Worker” => “Add…”
Якщо користувач вибрав команду “Add…” з меню Worker, то повинно викликатись вікно FormAddWorker.cs. У цьому вікні вводяться дані нового працівника.
Текст обробника події Click вибору команди меню “Worker” => “Add…” має такий вигляд:
Рис. 45. Подія Click команди меню “Worker” => “Add…”
Текст обробника події наступний:
private void addToolStripMenuItem_Click(object sender, EventArgs e) { FormAddWorker f = new FormAddWorker(); // створити форму if (f.ShowDialog() == DialogResult.OK) // відобразити форму { // якщо OK, то додати працівника string WName, WPosition, WSex; WName = f.textBox1.Text; WPosition = f.textBox2.Text; WSex = f.comboBox1.Items[f.comboBox1.SelectedIndex].ToString(); // працює this.workerTableAdapter.Insert(WName, WPosition, WSex); // вставка this.workerTableAdapter.Fill(this.accountDataSet.Worker); // відображення } }
У вищенаведеному коді викликається вікно FormAddWorker, яке було спроектоване у п. 4.1. Потім з цього вікна заповнюються внутрішні змінні WName, WPosition, WSex.
В майбутньому, уся робота зі зміни даних в таблиці Worker буде здійснюватись з об’єктом workerTableAdapter, що був створений системою при підключенні до бази даних.
Вставка рядка здійснюється методом Insert() об’єкта workerTableAdapter. Цей метод формується системою програмно при підключенні таблиці Worker. У методі програмно формуються параметри, що відповідають полям таблиці Worker. Це є дуже зручно.
Метод Fill() фіксує зміни в базі даних.
⇑
5.1.4. Програмування команди “Worker” => “Delete”
При виклику команди Delete з меню Worker викликається форма підтвердження FormDelWorker. Текст обробника події команди Delete наступний
private void deleteToolStripMenuItem_Click(object sender, EventArgs e) { // Worker => Delete FormDelWorker f = new FormDelWorker(); // створити форму int id_worker; string WName, WPosition, WSex; int index; // взяти номер поточного (виділеного) рядка в dataGridView1 index = dataGridView1.CurrentRow.Index; // заповнити внутрішні змінні з поточного рядка dataGridView1 id_worker = Convert.ToInt32(dataGridView1[0, index].Value); WName = Convert.ToString(dataGridView1[1, index].Value); WPosition = Convert.ToString(dataGridView1[2, index].Value); WSex = Convert.ToString(dataGridView1[3, index].Value); // сформувати інформаційний рядок f.label2.Text = WName + " " + WPosition; if (f.ShowDialog() == DialogResult.OK) { workerTableAdapter.Delete(id_worker, WName, WPosition, WSex); // метод Delete this.workerTableAdapter.Fill(this.accountDataSet.Worker); } }
У цьому обробнику важливим є метод Delete() об’єкту workerTableAdapter. У цьому методі потрібно вказати значення полів рядка, що видаляється.
⇑
5.1.5. Програмування команди “Worker” => “Edit…”
Редагування працівника здійснюється у формі FormEditWorker.cs (див. п. 4.3) командою “Edit…” меню Worker. Текст обробника події вибору команди
private void editToolStripMenuItem_Click(object sender, EventArgs e) { // Worker => Edit... FormEditWorker f = new FormEditWorker(); // створити форму int index; string WName, WPosition, WSex; int id_worker; if (dataGridView1.RowCount <= 1) return; // отримати позицію виділеного рядка в dataGridView1 index = dataGridView1.CurrentRow.Index; if (index == dataGridView1.RowCount - 1) return; // // отримати дані рядка id_worker = (int)dataGridView1.Rows[index].Cells[0].Value; WName = (string)dataGridView1.Rows[index].Cells[1].Value; WPosition = (string)dataGridView1.Rows[index].Cells[2].Value; WSex = (string)dataGridView1.Rows[index].Cells[3].Value; // заповнити поля форми f f.textBox1.Text = WName; f.textBox2.Text = WPosition; if (WSex == "M") f.comboBox1.SelectedIndex = 0; else f.comboBox1.SelectedIndex = 1; if (f.ShowDialog() == DialogResult.OK) // викликати форму FormEditWorker { string nWName, nWPosition, nWSex; // отримати нові (змінені) значення з форми nWName = f.textBox1.Text; nWPosition = f.textBox2.Text; nWSex = f.comboBox1.Items[f.comboBox1.SelectedIndex].ToString(); // змінити в адаптері this.workerTableAdapter.Update(nWName, nWPosition, nWSex, id_worker, WName, WPosition, WSex); this.workerTableAdapter.Fill(this.accountDataSet.Worker); } }
Фактичні зміни в таблиці здійснює метод Update() адаптера даних workerTableAdapter. Цей метод отримує старі та нові значення рядка таблиці Worker, що змінюється.
⇑
5.1.6. Програмування команди “Inventory” => “Add…”
За зразком команди Worker => “Add…” реалізується програмний код команди “Inventory” => “Add…”. Текст обробника події наступний:
private void addToolStripMenuItem1_Click(object sender, EventArgs e) { // Inventory => Add... FormAddAccount f = new FormAddAccount(); // вікно if (f.ShowDialog() == DialogResult.OK) { int Id_Worker; int index; string ANum, ADate, AInvNum, AObjName; short ACount; double APrice; // взяти значення ID_Worker з таблиці Worker index = dataGridView1.CurrentRow.Index; // позиція в dataGridView1 Id_Worker = (int)dataGridView1.Rows[index].Cells[0].Value; // взяти значення інших полів з форми FormAddAccount ANum = f.textBox1.Text; ADate = f.textBox2.Text; AInvNum = f.textBox3.Text; AObjName = f.textBox4.Text; ACount = Convert.ToInt16(f.textBox5.Text); APrice = Convert.ToDouble(f.textBox6.Text); this.accountTableAdapter.Insert(Id_Worker, ANum, ADate, AInvNum, AObjName, ACount, APrice); this.accountTableAdapter.Fill(this.accountDataSet.Account); } }
Метод Insert() об’єкту accountTableAdapter отримує вхідними параметрами значення полів таблиці Account.
⇑
5.1.7. Програмування команди “Inventory” => “Delete”
Текст обробника події вибору команди Delete з меню Inventory:
private void deleteToolStripMenuItem1_Click(object sender, EventArgs e) { // Inventory => Delete FormDelAccount f = new FormDelAccount(); int id_account, id_worker; string ANum, ADate, AInvNum, AObjName; short ACount; double APrice; int index; // взяти індекс виділеного (поточного) рядка в dataGridView2 index = dataGridView2.CurrentRow.Index; // взяти значення полів рядка з номером index id_account = Convert.ToInt32(dataGridView2[0, index].Value); id_worker = Convert.ToInt32(dataGridView2[1, index].Value); ANum = Convert.ToString(dataGridView2[2, index].Value); ADate = Convert.ToString(dataGridView2[3, index].Value); AInvNum = Convert.ToString(dataGridView2[4, index].Value); AObjName = Convert.ToString(dataGridView2[5, index].Value); ACount = Convert.ToInt16(dataGridView2[6, index].Value); APrice = Convert.ToDouble(dataGridView2[7, index].Value); // сформувати інформаційний рядок у вікні FormDelAccount f.label2.Text = ANum + " / " + ADate + " / " + AInvNum + " / " + AObjName + " / " + ACount + " / " + APrice; if (f.ShowDialog() == DialogResult.OK) // вивести вікно { this.accountTableAdapter.Delete(id_account, id_worker, ANum, ADate, AInvNum, AObjName, ACount, APrice); // видалити рядок this.accountTableAdapter.Fill(this.accountDataSet.Account); // зафіксувати зміни } }
⇑
5.1.8. Програмування команди “Inventory” => “Edit…”
Текст обробника події наступний
private void editToolStripMenuItem1_Click(object sender, EventArgs e) { // Inventory => Edit... FormEditAccount f = new FormEditAccount(); int index; int id_account; int id_worker; string ANum, ADate, AInvNum, AObjName; short ACount; double APrice; if (dataGridView2.RowCount <= 1) return; // взяти номер поточного рядка в dataGridView2 index = dataGridView2.CurrentRow.Index; if (index == dataGridView2.RowCount-1) return; // // отримати дані рядка id_account = (int)dataGridView2.Rows[index].Cells[0].Value; id_worker = (int)dataGridView2.Rows[index].Cells[1].Value; ANum = (string)dataGridView2.Rows[index].Cells[2].Value; ADate = (string)dataGridView2.Rows[index].Cells[3].Value; AInvNum = (string)dataGridView2.Rows[index].Cells[4].Value; AObjName = (string)dataGridView2.Rows[index].Cells[5].Value; ACount = (short)dataGridView2.Rows[index].Cells[6].Value; APrice = (double)dataGridView2.Rows[index].Cells[7].Value; // заповнити даними рядка поля у FormEditAccount f.textBox1.Text = ANum; f.textBox2.Text = ADate; f.textBox3.Text = AInvNum; f.textBox4.Text = AObjName; f.textBox5.Text = Convert.ToString(ACount); f.textBox6.Text = Convert.ToString(APrice); // заповнити поля форми FormEditAccount if (f.ShowDialog() == DialogResult.OK) // викликати форму { // нові значення рядка string nANum, nADate, nAInvNum, nAObjName; short nACount; double nAPrice; // взяти нові значення nANum = f.textBox1.Text; nADate = f.textBox2.Text; nAInvNum = f.textBox3.Text; nAObjName = f.textBox4.Text; nACount = Convert.ToInt16(f.textBox5.Text); nAPrice = Convert.ToDouble(f.textBox6.Text); // оновити дані в рядку this.accountTableAdapter.Update(id_worker,nANum,nADate, nAInvNum, nAObjName,nACount,nAPrice, id_account,id_worker, ANum,ADate,AInvNum,AObjName,ACount,APrice); this.accountTableAdapter.Fill(this.accountDataSet.Account); } }
⇑
5.1.9. Програмування фільтру за прізвищем у таблиці “Worker”. Подія TextChanged елементу управління textBox1
З метою забезпечення зручності, у програмі можна використовувати фільтр за полем WName таблиці Worker. Для цього у програмі використовується елемент управління textBox1 (рисунок 46). Для забезпечення швидкої обробки тексту з textBox1, введений текст обробляється в події TextChanged (рисунок 46).
Рис. 46. Елемент управління textBox1. Подія TextChanged
Події TextChanged відповідає обробник події textBox1_TextChanged(). Щоб відфільтрувати записи у полі WName таблиці Worker, потрібно в об’єкті workerBindingSource заповнити значення властивості Filter. Ця властивість відповідає частині “…WHERE …” SQL-команди “SELECT … FROM … WHERE …”. У нашому випадку, потрібно сформувати рядок
WName LIKE 'Text%'
де Text – текст, що введений у рядку textBox1.Text.
Текст обробника події наступний
// фільтр у textBox1 private void textBox1_TextChanged(object sender, EventArgs e) { workerBindingSource.Filter = "WName LIKE '" + textBox1.Text + "%'"; }
Після цього, в таблиці Worker будуть виводитись тільки ті записи, що починаються на текст, що набраний в textBox1.Text. Якщо в textBox1.Text не введено нічого, то будуть виводитись усі записи (рядки) таблиці Worker.
⇑
5.1.10. Програмування команди “Вихід”
Текст обробника події Click команди “Вихід”
// Вихід private void exitToolStripMenuItem_Click(object sender, EventArgs e) { Close(); }
⇑
5.2. Програмування події Load форми FormAddWorker
У події Load форми FormAddWorker потрібно зробити початкову ініціалізацію значень полів форми.
Текст обробника події Load форми FormAddWorker (Worker -> Add…):
private void FormAddWorker_Load(object sender, EventArgs e) { textBox1.Text = ""; textBox2.Text = ""; comboBox1.SelectedIndex = 1; textBox1.Focus(); // при відкритті вікна, textBox1 отримує фокус }
⇑
5.3. Програмування події Load форми FormEditWorker
Текст обробника події FormEditWorker
private void FormEditWorker_Load(object sender, EventArgs e) { textBox1.Focus(); }
⇑
5.4. Програмування події Load форми FormAddAccount
Текст обробника події наступний:
private void FormAddAccount_Load(object sender, EventArgs e) { textBox1.Text = ""; textBox2.Text = ""; textBox3.Text = ""; textBox4.Text = ""; textBox5.Text = ""; textBox6.Text = ""; textBox1.Focus(); }
⇑
5.5. Програмування події Load форми FormEditAccount
Текст обробника події наступний
private void FormEditAccount_Load(object sender, EventArgs e) { textBox1.Focus(); }
⇑
6. Перенаправлення обробників подій кліку на кнопках швидкого виклику на команди меню
На цьому етапі потрібно зробити щоб команди меню викликались натиском відповідної кнопки на головній формі. Призначення кнопок наступне:
- кнопка “Add…” має викликати команду меню “Worker->Add…”;
- кнопка “Delete” має викликати команду “Worker -> Delete”;
- кнопка “Edit…” має викликати команду “Worker -> Edit”;
- кнопка “Add record…” має викликати команду “Inventory -> Add…”;
- кнопка “Delete record” має викликати команду “Inventory-> Delete”;
- кнопка “Edit record…” має викликати команду “Inventory -> Edit”.
Рис. 47. Команда меню “Worker -> Add…” і кнопка “Add…”
Не потрібно заново програмувати обробники події Click для кнопок. Засобами MS Visual Studio налаштовуються відповідні обробники подій, як показано на рисунку 48. Для події Click кнопки Add… (button1) призначається обробник події addToolStripMenuItem_Click()
Рис. 48. Призначення методу обробки події addToolStripMenuItem_Click() для кнопки “Add…”
Так само призначаються іншим кнопкам форми відповідні обробники подій:
- команді Delete призначається обробник deleteToolStripMenuItem_Click();
- команді Edit… призначається обробник editToolStripMenuItem_Click();
- команді Add record… призначається обробник addToolStripMenuItem1_Click();
- команді Delete record призначається обробник deleteToolStripMenuItem1_Click();
- команді Edit record… призначається обробник editToolStripMenuItem1_Click().
⇑
7. Запуск програми на виконання. Висновки
Тепер можна запустити програму на виконання.
У даній темі продемонстровано використання засобів MS Visual Studio для керування базою даних Microsoft Access.
Як було показано, не потрібно програмно формувати запити на мові SQL. Для цього, в об’єктах, що створює система, потрібно правильно налаштувати відповідні властивості. Таким чином, досягається мінімум написання програмного коду. Тому що більшість роботи виконується у діалогових вікнах, де налаштовуються зовнішній вигляд, зв’язки, відображення.
У роботі детально висвітлюються:
- організація навігації по таблицях за принципом “головний” – “підлеглий”. При зміні активного запису у головній таблиці відповідно виводяться зв’язані з ним записи підлеглої таблиці;
- використання об’єктів типу TabelAdapter, BindingSource для зручного оперування даними в таблицях;
- зручний виклик команд зміни даних в таблицях (INSERT, UPDATE, DELETE) шляхом виклику відповідних методів, що генеруються MS Visual Studio;
- створення розрахункового поля та задавання точності виведення 2 знаки після коми;
- програмування фільтру для виведення записів таблиці за заданим шаблоном;
- використання віконного інтерфейсу MS Visual Studio для зручного налаштування вигляду (відображення) полів таблиць бази даних.
⇑
Зв’язані теми
- C#. Курсова робота. Розробка програми автоматизації роботи диспетчера автовокзалу
- C#. Курсова робота. Розробка програми моніторингу забруднення навколишнього середовища
⇑