Наша взаимовыгодная связь https://banwar.org/
Анотація: Зв'язування даних з елементами управління DataGrid і ComboBox. Підвищення ступеня деталізації представлення даних в елементі управління DataGrid. Елементи інтерфейсу користувача.
Зв'язування даних з елементами управління DataGrid і ComboBox
Файли до лабораторної роботи Ви можете завантажити тут .
Іноді для відображення переліку варіантів вибору може знадобитися елемент ComboBox поля із списком, а не використаний нами ListBox. У додатку може також виникнути необхідність представити інформацію у вигляді таблиці з урахуванням елементів, вибраних в цьому полі зі списком.
Що стосується нашої навчальній базі Northwind (див. Каталог Data) припустимо, що для відображення переліку замовників наше керівництво з похмілля вирішило використовувати замість ListBox елемент управління ComboBox. Воно захотіло, щоб після вибору замовника на екран виводилася інформація про те, які замовлення були зроблені цим замовником.
План дій
Але нас на переляк не взяти і на кривій козі НЕ об'їхати, оскільки ми знаємо, що для зв'язування елементів керування ComboBox і DataGrid з даними застосовуються такі ж властивості об'єктів і способи організації програми, як і при використанні елемента управління ListBox. Спочатку створюються постачальники даних DataAdapter і набори даних DataSet, що дозволяють визначити значення властивості DataSource джерела даних. Елемент управління DataAdapter для елемента, що розглядається управління DataGrid включатиме в себе параметр, в якому застосовується значення, вибране в елементі управління ComboBox.
Як значення властивості DataSource цих елементів управління повинен бути вказаний новостворений набір даних DataSet. Для успішного використання елемента управління DataGrid фактично досить привласнити значення тільки цій властивості. А при підготовці до роботи елемента управління ComboBox слід також привласнити значення властивостям ValueMember і DisplayMember.
Потім необхідно ввести в додаток код для заповнення елемента управління DataSet, зазначеного в якості значення властивості DataSource елемента управління ComboBox. І нарешті, повинна бути створена функція для передачі цього значення з ComboBox в постачальник даних DataAdapter, щоб той забезпечив заповнення DataGrid потрібними даними. В результаті, після вибору користувачем в ComboBox потрібного замовника на екрані елемент DataGrid негайно відобразить відповідну вибірку з бази. Ось і все - після цього можна знову йти палити бамбук.
Створення нового проекту
Набори даних DataSet для постачальника даних DataAdapter можна створити двома способами:
- поміщати компоненти DataSet на форму з вкладки
- через контекстне меню постачальника DataAdapter виконанням команди Generate Dataset (зробіть таким способом)
Примітка. Рекомендується налаштовувати елементи управління OleDbDataAdapter НЕ потім через панель властивостей, а відразу при їх створенні в автоматично запускає майстра Data Adapter Configuration Wizard, як ми це робили в минулому лабораторній роботі. Цей майстер ми можемо і самі завжди викликати через контекстне меню або за посиланням з підвалу панелі Properties для виділеного елемента DataAdapter.
Для створення елемента управління DataSet клацніть правою кнопкою миші на відповідному елементі управління OleDbDataAdapter і з контекстного меню виконайте команду Generate Dataset, або, те ж саме, за однойменною посиланням у підвалі панелі Properties.
Крім того, слід враховувати, що при створенні набору даних оболонка завжди модифікує замовлене ім'я джерела даних додаванням в кінці символу 1 і перекладу першої літери у верхній регістр. Якщо такі зміни, що вносяться самовільно оболонкою, вас не влаштовують, корегуйте їх через панель властивостей.
Елементи управління OleDbDataAdapter і DataSet
Об'єкт Властивість Значення OleDbDataAdapter Name odaCustomerList SelectCommand oleDbSelectCommand1 CommandText SELECT CustomerID, CompanyName FROM Customers DataSet Name dsCustomerList DataSetName dsCustomerList OleDbDataAdapter Name odaOrdersForCustomer SelectCommand oleDbSelectCommand2 CommandText SELECT OrderID , OrderDate, RequiredDate, ShippedDate FROM Orders WHERE (CustomerID =?) ORDER BY OrderDate DataSet Name dsOrdersForCustomer DataSetName dsOrdersForCustomer
Поля таблиці Orders, які ми використовуємо в SQL-запитах, можна подивитися в панелі Server Explorer оболонки
Значення властивостей Label, ComboBox і DataGridОб'єкт Властивість Значення Form Text Замовлення клієнтів Label Text Виберіть клієнта: TextAlign MiddleRight ComboBox Name cboCustomers DataSource dsCustomerList.Customers DisplayMember CompanyName ValueMember CustomerID DataGrid Name dgOrders DataSource dsOrdersForCustomer . Orders Dock Bottom // ********************************************* ****************** private void Form1_Load (object sender, System.EventArgs e) {// Вибрати з постачальника інформацію в набір даних, // вміст якого відразу відображається в ComboBox odaCustomerList .Fill (this.dsCustomerList); // Якщо клієнт обраний в ComboBox, // то завантажити його замовлення в DataGrid RefreshOrders (); } // *********************************************** **************** private void RefreshOrders () {// Очистити набір даних, відповідний DataGrid this.dsOrdersForCustomer.Clear (); // Визначити, чи вибраний клієнт в ComboBox if (this.cboCustomers.SelectedIndex == -1) return; // Клієнт не обрана // Передати постачальнику значення ключа CustomerID, // для якого постачальник повинен вибрати з бази // значення зазначених в операторі SELECT полів this.odaOrdersForCustomer.SelectCommand.Parameters [0] .Value = this.cboCustomers.SelectedValue; // Налити дані в dsOrdersForCustomer з постачальника this.odaOrdersForCustomer.Fill (dsOrdersForCustomer); } Лістинг 6.1. Обробник події Load форми // ******************************************** ******************* private void cboCustomers_SelectedIndexChanged (object sender, System.EventArgs e) {RefreshOrders (); } Лістинг 6.2. Обробник події SelectIndexChanged
CustomerID =?