Елемент управління DataGridView та відображення масивів
Елемент керування DataGridView є останньою новинкою серії табличних елементів DataGrid, що дозволяють відображати таблиці. Головне призначення цих елементів - зв'язування з таблицями зовнішніх джерел даних, насамперед із таблицями баз даних. Ми ж зараз розглянемо інше його застосування – в інтерфейсі, що дозволяє користувачеві вводити та відображати матриці – двомірні масиви.
Розглянемо класичне завдання множення прямокутних матриць C=A*B. Побудуємо інтерфейс, що дозволяє користувачеві задавати розміри матриць, що перемножуються, вводити дані для вихідних матриць A і B, перемножувати матриці і бачити результати цієї операції. На рис. 6.6 показаний можливий вид форми, що підтримує роботу користувача. Форма показана в той момент, коли користувач вже поставив розміри та значення вихідних матриць, виконав множення матриць та отримав результат.

збільшити зображенняМал. 6.6. Форма з елементами DataGridView, що підтримує роботу з матрицями
На формі розташовані три текстові вікна для завдання розмірів матриць, три елементи DataGridView для відображення матриць, три командні кнопки для виконання операцій, доступних користувачеві. Крім того, на формі є 9 міток (елементів управління label), сім з яких видно на рис. 6.6. Вони відображається інформація, пов'язана з формою та окремими елементами управління. Текст у невидимих малюнку тег з'являється тоді, коли виявляється, що користувач некоректно задав значення будь-якого елемента вихідних матриць.
А тепер перейдемо до опису того, як цей інтерфейс реалізовано. У класі Form2, якому належить наша форма, поставимо поля, що визначають розміри матриць, і самі матриці:
// поля класу Form int m, n, p; //Розміри матрицьdouble [,] A, B, C; //Самі матриці
Розглянемо тепер, як виглядає обробник події Click командної кнопки Створити DataGridView. Передбачається, що користувач розумний і, перш ніж натиснути кнопку, задає розміри матриць у відповідних текстових вікнах. Нагадаю, що при перемноженні матриць розміри матриць повинні бути узгоджені - число стовпців першого співмножника має збігатися з числом рядків другого співмножника, а розміри матриці, що результує, визначаються розмірами співмножників. Тому для трьох матриць у даному випадку достатньо задати не шість, а три параметри, що визначають розміри.
Обробник події виконує три завдання - створює самі матриці, здійснює чищення елементів керування DataGridView, видаляючи попередній стан, потім додає стовпці та рядки в ці елементи у повній відповідності до заданих розмірів матриць. Ось текст оброблювача:
- Створюються стовпці колекції Columns по одному. У циклі за кількістю стовпців матриці, яку має відображати елемент керування DataGridView, викликається метод Add цієї колекції, який створює черговий стовпець. Одночасно у цьому циклі створюється і ім'я стовпця (властивість Name), що відображається у формі. Показано можливість формування ще одного імені (DataPropertyName), що використовується при зв'язуванні зі стовпцем таблиці зовнішнього джерела даних. У прикладі це ім'я немає.
- Створивши стовпці, потрібно створити ще й потрібну кількість рядків кожного з елементів DataGridView. Робиться це аналогічно, викликаючи метод Add колекції Rows. Трохи по-іншому задаються імена рядків - для цього використовується спеціальний об'єкт HeaderCell, що має кожен рядок і задає комірку заголовка.
- Після того, як сформовані рядки та стовпці, елемент DataGridViewготовий до того, щоб користувач або програма вводила значення в комірки сформованої таблиці.
Розглянемо тепер, як виглядає обробник події "Click" наступної кнопки "Перенести дані в масив". Передбачається, що користувач розумний і, перш ніж натиснути цю кнопку, задає значення елементів матриць, що перемножуються, у відповідних осередках підготовлених таблиць перших двох елементів DataGridView. Обробник події виконує такі завдання - у циклі читає елементи, записані користувачем у таблиці DataGridView, перевіряє їхню коректність і у разі успіху переписує їх у матриці. Ось текст оброблювача:
private vo; frm.ShowDialog(); dataGr & Лістинг .