Элементы управления Базами данных. C#. ADO.NET

advertisement
Участник
Элементы управления Базами данных. C#. ADO.NET
29.02.2016
Связывание данных с элементами управления ComboBox и DataGrid
Продолжим работу на примере готовой БД Northwind. В этом упражнении создадим проект, в
котором содержимое поля CompanyName таблицы Customers (заказчики) будем загружать в
раскрывающийся список ComboBox, а при выборе определенного элемента списка связанные с
соответствующей записью данные другой таблицы ( Orders — заказы) будем отображать
пользователю в элементе управления DataGrid.
Отображение данных на одной форме
Для двух разных таблиц нам понадобятся два поставщика OleDbDataAdapter и два набора
данных DataSet. Элементы управления ComboBox и DataGrid свяжем с наборами данных через
их свойство DataSource. Для ComboBox нужно дополнительно еще связать свойства
DisplayMember и ValueMember с соответствующими полями ( CompanyName и CustomerID )
подключенной таблицы Customers, а для DataGrid указать таблицу Orders в свойстве
DataMember.
При выборе пользователем элемента списка значение CustomerID будет передаваться как
параметр в команду поставщика данных, связанного с таблицей Orders, который загрузит из
БД в набор нужные записи для отображения их в DataGrid. Если пользователь редактировал
данные в DataGrid, то при смене записи в ComboBox эти данные нужно сохранить в БД. Для
этого нужно создать соответствующую SQL-команду для поставщика.
Добавьте к решению командой Добавить/Создать проект (Add/New Project) новый проект типа
Windows Forms Application с именем FormsADO2
рис 1
Прежний проект FormsADO исключите из решения командой Удалить (Remove)
http://vitcs.ru
Компьютерное образование для всех
1/10
Участник
Элементы управления Базами данных. C#. ADO.NET
29.02.2016
рис 2
Проделаем знакомые нам действия из занятия СОЗДАНИЕ ПОЛЬЗОВАТЕЛЬСКОГО
ИНТЕРФЕЙСА БАЗЫ ДАННЫХ. C#. ADO.NET
Поместите в рабочую область оболочки компонент OleDbDataAdapter, соедините его с файлом
учебной базы данных Northwind.mdb(ссылка на скачивание) корпорации microsoft.
На предложение оболочки скопировать файл БД в проект ответьте Да.
рис 3
Настройте его только на чтение(кнопка Дополнительно) полей CustomerID и CompanyName
таблицы Customers (заказчики), используя построитель Построитель запросов(Query Builder),
как это мы делали ранее в предыдущем упражнении.
рис 4
Выставите свойства БД Копировать в выходной каталог в положение Копировать более
позднюю версию.
Выделите поставщик oleDbDataAdapter1 и командой меню Создать набор данных(Generate
Dataset) создайте для него класс DataSet1 и объект набора данных с автоматически
сгенерированным именем dataSet11
http://vitcs.ru
Компьютерное образование для всех
2/10
Участник
Элементы управления Базами данных. C#. ADO.NET
29.02.2016
рис 5
Поместите на форму новый поставщик OleDbDataAdapter с именем oleDbDataAdapter2 для
таблицы Orders (заказы), в его настройках учтите все возможности взаимодействия с данными,
а в команде SELECT предусмотрите передачу значения параметра по полю CustomerID и
сортировку по дате выбранных из БД данных. Для правильного формирования команды
используйте окно Построитель запросов(Query Builder).
рис 6
Обратите внимание, как в каком порядке мы визуально формируем в Построитель
запросов(Query Builder), условие выборки по параметру CustomerID:
вначале отмечаем поле CustomerID в верхней вкладке окна мастера, чтобы это поле появилось
во второй вкладке, далее прописываем фильтр =?, а затем в этой же второй вкладке снимаем
флажок Вывод(Output) со столбца CustomerID, чтобы не включать его данные поставщиком.
С помощью oleDbDataAdapter2 мы предполагаем менять данные, поэтому все разрешения
чтения записи оставляем включенными (кнопка Дополнительно…).
http://vitcs.ru
Компьютерное образование для всех
3/10
Участник
Элементы управления Базами данных. C#. ADO.NET
29.02.2016
рис 7
Выделите поставщик oleDbDataAdapter2 и командой меню Создать набор данных(Generate
Dataset) создайте для него класс DataSet2 и объект набора данных с автоматически
сгенерированным именем dataSet21
рис 8
Поместите на форму компоненты Label, ComboBox и DataGrid (если их нет в палитре Toolbox,
добавьте к соответствующей вкладке командой контекстного меню Choose Items ),
рис 9
разместите их в соответствии с рисунком и настройте согласно приведенной таблице свойств:
http://vitcs.ru
Компьютерное образование для всех
4/10
Участник
рис 10
Компонент
Элементы управления Базами данных. C#. ADO.NET
Свойство
29.02.2016
Значение
Label
Text
Заказчики
ComboBox
(Name)
cbCustomers
DataSource
dataSet11
DisplayMember Customers.CompanyName
DataGrid
ValueMember
Customers.CustomerID
(Name)
dgOrders
DataSource
dataSet21
DataMember
Orders
CaptionText
Заказы для выбранного заказчика
Создайте для формы Form1 обработчик события Load, двойным «кликом» по заголовку формы
и заполните его следующим кодом:
рис 11
Запустите проект и испытайте работу приложения, форма запускается, но работает не
корректно, необходимо создать обработчик события SelectedIndexChanged.
В свойствах объекта ComboBox в режиме События , выбираем события SelectedIndexChanged
и двойным «кликом» переходим к написанию кода;
http://vitcs.ru
Компьютерное образование для всех
5/10
Участник
Элементы управления Базами данных. C#. ADO.NET
29.02.2016
рис 12
Теперь приложение работает, как надо.
рис 13
Отображение связанных подробностей на дополнительной форме
В предыдущем разделе мы просматривали отфильтрованные записи дочерней таблицы Orders
(заказы) по записи, выбранной в таблице Customers (заказчики). В этом разделе мы разовьем
проект и дадим возможность пользователю отметить в DataGrid конкретный заказ, после чего в
дополнительной форме появятся подробности о выбранном заказе.
Командой меню Проект\Добавить новую форму(Project/Add Windows Form) добавьте к
проекту новую форму
Установите для нее свойства FormBorderStyle=Fixed3D ; ShowInTaskbar=false ;
MinimizeBox=false ; MaximizeBox=false , чтобы размеры формы нельзя было менять и при
запуске она бы не отображалась в панели задач, а также убрали системные кнопки
свертывания и развертывания окна
Из палитры Панель элементов(Toolbox) перенесите на форму невизуальные
пользовательские элементы, указанные в таблице, которые обеспечат только чтение
данных из БД, и настройте их через мастера как ранее ( только для Select )
Мы будем связывать поставщики с тремя таблицами БД Northwind: Orders, Employees, Order
Details и для них в значениях свойств объектов приведены уже готовые SQL-команды, которые
попытайтесь получить с помощью мастера Построитель запросов(Query Builder).
КОМПОНЕНТ
СВОЙСТВО
OleDbDataAdapter (Name)
ЗНАЧЕНИЕ
oleOrders
CommandText SELECT OrderID, CustomerID, EmployeeID, OrderDate,
RequiredDate,
ShippedDate, ShipVia, Freight, ShipName, ShipAddress,
ShipCity, ShipRegion,
ShipPostalCode, ShipCountry
FROM Orders
WHERE (OrderID = ?)
OleDbDataAdapter (Name)
http://vitcs.ru
oleEmployees
Компьютерное образование для всех
6/10
Участник
Элементы управления Базами данных. C#. ADO.NET
29.02.2016
CommandText SELECT EmployeeID, RTRIM(LastName) + ‘, ‘ +
RTRIM(FirstName) AS FullName
FROM Employees
WHERE (EmployeeID = ?)
OleDbDataAdapter (Name)
oleOrderDetails
CommandText SELECT OrderID, ProductID, UnitPrice, Quantity, Discount
FROM [Order Details]
WHERE (OrderID = ?)
Для всех поставщиков создадим общий класс набора данных с именем DataSetAll и один
экземпляр этого класса dataSetAll, где будут храниться все три таблицы БД одновременно.
Вызовите контекстное меню для поставщика oleOrders, выполните команду Создать набор
данных(Generate DataSet) и заполните окно мастера в соответствии с рисунком:
рис 14
Переименуйте созданный объект набора данных в dataSetAll
Вызовите контекстное меню для поставщика oleEmployees, выполните команду Создать набор
данных(Generate DataSet) и заполните окно мастера в соответствии с рисунком:
рис 15
Вызовите контекстное меню для поставщика oleOrderDetails, выполните команду Создать
набор данных(Generate DataSet) и заполните окно мастера в соответствии с рисунком:
http://vitcs.ru
Компьютерное образование для всех
7/10
Участник
Элементы управления Базами данных. C#. ADO.NET
29.02.2016
рис 16
Что мы сделали? Мы связали каждый поставщик с общим набором данных, где будут храниться
три таблицы одновременно, а поставщики будут заполнять свои таблицы по команде из кода.
Теперь нужно создать пользовательский интерфейс дополнительной формы.
Добавьте на форму Form2 и настройте компоненты в соответствии с таблицей свойств,
позиционируйте их в соответствии с рисунком:
КОМПОНЕНТ
СВОЙСТВО
ЗНАЧЕНИЕ
Label
Text
Номер заказа:
TextBox
BorderStyle
FixedSingle
(DataBindings).Text dataSetAll — Orders.OrderID
Label
Text
Дата заказа:
DateTimePicker (DataBindings).Value dataSetAll — Orders.OrderDate
Format
Long
Label
Text
Принял заказ:
TextBox
BorderStyle
FixedSingle
(DataBindings).Text dataSetAll — Employees.FullName
DataGrid
http://vitcs.ru
(Name)
dgOrderDetails
CaptionText
Подробности заказов
DataSource
dataSetAll
DataMember
Order Details
Компьютерное образование для всех
8/10
Участник
Элементы управления Базами данных. C#. ADO.NET
29.02.2016
рис 15
В конструктор класса Form2 файла Form2.cs введите дополнительный параметр для передачи
из Form1 номера выбранного заказа.
рис 16
Для формы Form2 создайте обработчик события Load, который заполните так
рис 17
Перейдите в режим Конструктор(View Designer) формы Form1, выделите объект dgOrders и
через панель Свойства(Properties) создайте обработчик события Click, который заполните так
рис 18
Вторичное окно мы показываем в модальном режиме, который перехватывает на себя цикл
сообщений приложения, пока не будет закрыто модальное окно.
http://vitcs.ru
Компьютерное образование для всех
9/10
Участник
Элементы управления Базами данных. C#. ADO.NET
29.02.2016
Испытайте работу приложения.
рис 19
Самостоятельное задание.
Используя материалы занятия, создайте несколько дополнительных связанных форм вашей
базы данных.
http://vitcs.ru
Компьютерное образование для всех
10/10
Download