Пошаговое руководство. Подключение к данным в объектах
Обновлен: Ноябрь 2007
В данном пошаговом руководстве показано, как создать объекты для хранения данных клиентов и заказов, а затем создать источник данных объекта на основе этих объектов. Источник данных объекта появится в окне Источники данных: при перетаскивании элементов на форму создаются элементы управления, присоединенные к данным через общие свойства объекта. В руководстве также показано использование адаптеров таблиц для выборки данных из базы данных и заполнения объектов.
Источник данных объекта создается путем запуска Мастер конфигурации источников данных и выбором элемента Объект в качестве типа источника данных. После завершения мастера Мастер настройки источника данных, общие свойства объекта доступны в Окно "Источники данных" для перетаскивания на форму.
Примечание. |
---|
Чтобы объект появился в мастере Мастер настройки источника данных, необходимо построить проект, содержащий его. Если объект недоступен в мастере, перестройте проект, содержащий нужные объекты. |
В этом пошаговом руководстве рассматриваются следующие задачи:
Создание нового проекта Приложение Windows.
Создание образцов объектов, представляющих заказчиков и заказы.
Создание и настройка источника данных объекта в приложении на основе образцов объектов при помощи Мастера настройки источника данных.
Добавление элементов управления к форме, которые привязаны к данным пользовательских объектов.
Создание набора данных при помощи адаптера таблиц для перемещения данных между объектами и базами данных.
Редактирование основного запроса адаптера таблицы.
Добавление запросов к адаптеру таблиц.
Заполнение объектов данными из базы данных.
Создание проекта
Для создания нового проекта приложения Windows
С помощью меню Файл создайте Новый проект.
Создайте Приложение Windows с именем ObjectBindingWalkthrough и нажмите кнопку OK. Дополнительные сведения см. в разделе Создание приложения для Windows.
Проект ObjectBindingWalkthrough будет создан и добавлен в Обозреватель решений.
В данном пошаговом руководстве требуются некоторые объекты для привязки, поэтому первым шагом является создание некоторых образцов объектов, представляющих клиентов и заказы. Для представления клиентов создадим объект Customer, представляющий одного клиента. Для представления заказов создадим объект Order, который представляет один заказ, и объект Orders, представляющий коллекцию объектов Order. Для коллекции объектов Customer воспользуйтесь встроенной коллекцией в классе BindingSource (описано ниже в данном пошаговом руководстве).
Создание объекта Customer
Чтобы создать объект Customer
В меню Проект выберите команду Добавить класс.
Назовите новый класс Customer и нажмите кнопку Добавить.
Замените код в файле класса Customer следующим кодом:
Примечание. Объект Customer содержит свойство ordersCollection типа Orders. В редакторе будет выведено сообщение о том, что Тип "заказы" не определен. Это сообщение ожидаемо и исчезнет при создании классов Order и Orders в следующем разделе.
''' <summary> ''' A single customer ''' </summary> Public Class Customer Public Sub New() End Sub ''' <summary> ''' Creates a new customer ''' </summary> ''' <param name="customerId">The ID that uniquely identifies this customer</param> ''' <param name="companyName">The name for this customer</param> ''' <param name="contactName">The name for this customer's contact</param> ''' <param name="contactTitle">The title for this contact</param> ''' <param name="address">The address for this customer</param> ''' <param name="city">The city for this customer</param> ''' <param name="region">The region for this customer</param> ''' <param name="postalCode">The postal code for this customer</param> ''' <param name="country">The country for this customer</param> ''' <param name="phone">The phone number for this customer</param> ''' <param name="fax">The fax number for this customer</param> Public Sub New(ByVal customerId As String, _ ByVal companyName As String, _ ByVal contactName As String, _ ByVal contactTitle As String, _ ByVal address As String, _ ByVal city As String, _ ByVal region As String, _ ByVal postalCode As String, _ ByVal country As String, _ ByVal phone As String, _ ByVal fax As String) customerIDValue = customerId companyNameValue = companyName contactNameValue = contactName contactTitleValue = contactTitle addressValue = address cityValue = city regionValue = region postalCodeValue = postalCode countryValue = country phoneValue = phone faxValue = fax End Sub Private customerIDValue As String ''' <summary> ''' The ID that uniquely identifies this customer ''' </summary> Public Property CustomerID() As String Get Return customerIDValue End Get Set(ByVal value As String) customerIDValue = value End Set End Property Private companyNameValue As String ''' <summary> ''' The name for this customer ''' </summary> Public Property CompanyName() As String Get Return companyNameValue End Get Set(ByVal Value As String) companyNameValue = Value End Set End Property Private contactNameValue As String ''' <summary> ''' The name for this customer's contact ''' </summary> Public Property ContactName() As String Get Return contactNameValue End Get Set(ByVal Value As String) contactNameValue = Value End Set End Property Private contactTitleValue As String ''' <summary> ''' The title for this contact ''' </summary> Public Property ContactTitle() As String Get Return contactTitleValue End Get Set(ByVal Value As String) contactTitleValue = Value End Set End Property Private addressValue As String ''' <summary> ''' The address for this customer ''' </summary> Public Property Address() As String Get Return addressValue End Get Set(ByVal Value As String) addressValue = Value End Set End Property Private cityValue As String ''' <summary> ''' The city for this customer ''' </summary> Public Property City() As String Get Return cityValue End Get Set(ByVal Value As String) cityValue = Value End Set End Property Private regionValue As String ''' <summary> ''' The region for this customer ''' </summary> Public Property Region() As String Get Return regionValue End Get Set(ByVal Value As String) regionValue = Value End Set End Property Private postalCodeValue As String ''' <summary> ''' The postal code for this customer ''' </summary> Public Property PostalCode() As String Get Return postalCodeValue End Get Set(ByVal Value As String) postalCodeValue = Value End Set End Property Private countryValue As String ''' <summary> ''' The country for this customer ''' </summary> Public Property Country() As String Get Return countryValue End Get Set(ByVal Value As String) countryValue = Value End Set End Property Private phoneValue As String ''' <summary> ''' The phone number for this customer ''' </summary> Public Property Phone() As String Get Return phoneValue End Get Set(ByVal Value As String) phoneValue = Value End Set End Property Private faxValue As String ''' <summary> ''' The fax number for this customer ''' </summary> Public Property Fax() As String Get Return faxValue End Get Set(ByVal Value As String) faxValue = Value End Set End Property Private ordersCollection As New System.ComponentModel.BindingList(Of Order) ''' <summary> ''' The orders for this customer ''' </summary> Public Property Orders() As System.ComponentModel.BindingList(Of Order) Get Return ordersCollection End Get Set(ByVal value As System.ComponentModel.BindingList(Of Order)) ordersCollection = value End Set End Property Public Overrides Function ToString() As String Return Me.CompanyName & " (" & Me.CustomerID & ")" End Function End Class
namespace ObjectBindingWalkthrough { /// <summary> /// A single customer /// </summary> public class Customer { /// <summary> /// Creates a new customer /// </summary> public Customer() { } /// <summary> /// Creates a new customer /// </summary> /// <param name="customerID"></param> /// <param name="companyName"></param> /// <param name="contactName"></param> /// <param name="contactTitle"></param> /// <param name="address"></param> /// <param name="city"></param> /// <param name="region"></param> /// <param name="postalCode"></param> /// <param name="country"></param> /// <param name="phone"></param> /// <param name="fax"></param> public Customer(string customerID, string companyName, string contactName, string contactTitle, string address, string city, string region, string postalCode, string country, string phone, string fax) { customerIDValue = customerID; } private string customerIDValue; /// <summary> /// The ID that uniquely identifies this customer /// </summary> public string CustomerID { get { return customerIDValue; } set { customerIDValue = value; } } private string companyNameValue; /// <summary> /// The name for this customer /// </summary> public string CompanyName { get { return companyNameValue; } set { companyNameValue = value; } } private string contactNameValue; /// <summary> /// The name for this customer's contact /// </summary> public string ContactName { get { return contactNameValue; } set { contactNameValue = value; } } private string contactTitleValue; /// <summary> /// The title for this contact /// </summary> public string ContactTitle { get { return contactTitleValue; } set { contactTitleValue = value; } } private string addressValue; /// <summary> /// The address for this customer /// </summary> public string Address { get { return addressValue; } set { addressValue = value; } } private string cityValue; /// <summary> /// The city for this customer /// </summary> public string City { get { return cityValue; } set { cityValue = value; } } private string regionValue; /// <summary> /// The region for this customer /// </summary> public string Region { get { return regionValue; } set { regionValue = value; } } private string postalCodeValue; /// <summary> /// The postal code for this customer /// </summary> public string PostalCode { get { return postalCodeValue; } set { postalCodeValue = value; } } private string countryValue; /// <summary> /// The country for this customer /// </summary> public string Country { get { return countryValue; } set { countryValue = value; } } private string phoneValue; /// <summary> /// The phone number for this customer /// </summary> public string Phone { get { return phoneValue; } set { phoneValue = value; } } private string faxValue; /// <summary> /// The fax number for this customer /// </summary> public string Fax { get { return faxValue; } set { faxValue = value; } } private System.ComponentModel.BindingList<Order> ordersCollection = new System.ComponentModel.BindingList<Order>(); public System.ComponentModel.BindingList<Order> Orders { get { return ordersCollection; } set { ordersCollection = value; } } public override string ToString() { return this.CompanyName + " (" + this.CustomerID + ")"; } } }
Создание объектов Order
Для создания объекта Order и коллекции Orders
В меню Проект выберите пункт Добавить класс.
Назовите новый класс Order и нажмите кнопку Добавить.
Замените код в файле класса Order следующим кодом:
''' <summary> ''' A single order ''' </summary> Public Class Order Public Sub New() End Sub ''' <summary> ''' Creates a new order ''' </summary> ''' <param name="orderid">The identifier for this order</param> ''' <param name="customerID">The customer who placed this order</param> ''' <param name="employeeID">The ID of the employee who took this order</param> ''' <param name="orderDate">The date this order was placed</param> ''' <param name="requiredDate">The date this order is required</param> ''' <param name="shippedDate">The date the order was shipped</param> ''' <param name="shipVia">The shipping method for this order</param> ''' <param name="freight">The freight charge for this order</param> ''' <param name="shipName">The name of the recipient for this order</param> ''' <param name="shipAddress">The address to ship this order to</param> ''' <param name="shipCity">The city to ship this order to</param> ''' <param name="shipRegion">The region to ship this order to</param> ''' <param name="shipPostalCode">The postal code to ship this order to</param> ''' <param name="shipCountry">The country to ship this order to</param> Public Sub New(ByVal orderid As Integer, _ ByVal customerID As String, _ ByVal employeeID As Integer, _ ByVal orderDate As DateTime, _ ByVal requiredDate As DateTime, _ ByVal shippedDate As DateTime, _ ByVal shipVia As Integer, _ ByVal freight As Decimal, _ ByVal shipName As String, _ ByVal shipAddress As String, _ ByVal shipCity As String, _ ByVal shipRegion As String, _ ByVal shipPostalCode As String, _ ByVal shipCountry As String) orderIDValue = orderid customerIDValue = customerID employeeIDValue = employeeID orderDateValue = orderDate requiredDateValue = requiredDate shippedDateValue = shippedDate shipViaValue = shipVia freightValue = freight shipAddressValue = shipAddress shipCityValue = shipCity shipRegionValue = shipRegion shipPostalCodeValue = shipPostalCode shipCountryValue = shipCountry End Sub Private orderIDValue As Integer ''' <summary> ''' Identifier for this order ''' </summary> Public Property OrderID() As Integer Get Return orderIDValue End Get Set(ByVal value As Integer) orderIDValue = value End Set End Property Private customerIDValue As String ''' <summary> ''' The customer who placed this order ''' </summary> Public Property CustomerID() As String Get Return customerIDValue End Get Set(ByVal Value As String) customerIDValue = Value End Set End Property Private employeeIDValue As Integer ''' <summary> ''' The ID of the employee who took this order ''' </summary> Public Property EmployeeID() As Integer Get Return employeeIDValue End Get Set(ByVal Value As Integer) employeeIDValue = Value End Set End Property Private orderDateValue As DateTime ''' <summary> ''' The date this order was placed ''' </summary> Public Property OrderDate() As DateTime Get Return orderDateValue End Get Set(ByVal Value As DateTime) orderDateValue = Value End Set End Property Private requiredDateValue As DateTime ''' <summary> ''' The date this order is required ''' </summary> Public Property RequiredDate() As DateTime Get Return requiredDateValue End Get Set(ByVal Value As DateTime) requiredDateValue = Value End Set End Property Private shippedDateValue As DateTime ''' <summary> ''' The date this order was shipped ''' </summary> Public Property ShippedDate() As DateTime Get Return shippedDateValue End Get Set(ByVal Value As DateTime) shippedDateValue = Value End Set End Property Private shipViaValue As Integer ''' <summary> ''' The shipping method for this order ''' </summary> Public Property ShipVia() As Integer Get Return shipViaValue End Get Set(ByVal Value As Integer) shipViaValue = Value End Set End Property Private freightValue As Decimal ''' <summary> ''' The freight charge for this order ''' </summary> Public Property Freight() As Decimal Get Return freightValue End Get Set(ByVal Value As Decimal) freightValue = Value End Set End Property Private shipNameValue As String ''' <summary> ''' The name of the recipient for this order ''' </summary> Public Property ShipName() As String Get Return shipNameValue End Get Set(ByVal Value As String) shipNameValue = Value End Set End Property Private shipAddressValue As String ''' <summary> ''' The address to ship this order to ''' </summary> Public Property ShipAddress() As String Get Return shipAddressValue End Get Set(ByVal Value As String) shipAddressValue = Value End Set End Property Private shipCityValue As String ''' <summary> ''' The city to ship this order to ''' </summary> Public Property ShipCity() As String Get Return shipCityValue End Get Set(ByVal Value As String) shipCityValue = Value End Set End Property Private shipRegionValue As String ''' <summary> ''' The region to ship this order to ''' </summary> Public Property ShipRegion() As String Get Return shipRegionValue End Get Set(ByVal Value As String) shipRegionValue = Value End Set End Property Private shipPostalCodeValue As String ''' <summary> ''' The postal code to ship this order to ''' </summary> Public Property ShipPostalCode() As String Get Return shipPostalCodeValue End Get Set(ByVal Value As String) shipPostalCodeValue = Value End Set End Property Private shipCountryValue As String ''' <summary> ''' The country to ship this order to ''' </summary> Public Property ShipCountry() As String Get Return shipCountryValue End Get Set(ByVal Value As String) shipCountryValue = Value End Set End Property Private customerValue As Customer ''' <summary> ''' The customer this order belongs to ''' </summary> Public Property Customer() As Customer Get Return customerValue End Get Set(ByVal Value As Customer) customerValue = Value End Set End Property End Class ''' <summary> ''' A collection of Orders ''' </summary> Public Class Orders Inherits System.ComponentModel.BindingList(Of Order) End Class
using System; namespace ObjectBindingWalkthrough { /// <summary> /// A single order /// </summary> public class Order { /// <summary> /// Creates a new order /// </summary> public Order() { } /// <summary> /// Creates a new order /// </summary> /// <param name="orderid"></param> /// <param name="customerID"></param> /// <param name="employeeID"></param> /// <param name="orderDate"></param> /// <param name="requiredDate"></param> /// <param name="shippedDate"></param> /// <param name="shipVia"></param> /// <param name="freight"></param> /// <param name="shipName"></param> /// <param name="shipAddress"></param> /// <param name="shipCity"></param> /// <param name="shipRegion"></param> /// <param name="shipPostalCode"></param> /// <param name="shipCountry"></param> public Order(int orderid, string customerID, int employeeID, DateTime orderDate, DateTime requiredDate, DateTime shippedDate, int shipVia, decimal freight, string shipName, string shipAddress, string shipCity, string shipRegion, string shipPostalCode, string shipCountry) { } private int orderIDValue; /// <summary> /// The ID that uniquely identifies this order /// </summary> public int OrderID { get { return orderIDValue; } set { orderIDValue = value; } } private string customerIDValue; /// <summary> /// The customer who placed this order /// </summary> public string CustomerID { get { return customerIDValue; } set { customerIDValue = value; } } private int employeeIDValue; /// <summary> /// The ID of the employee who took this order /// </summary> public int EmployeeID { get { return employeeIDValue; } set { employeeIDValue = value; } } private DateTime orderDateValue; /// <summary> /// The date this order was placed /// </summary> public DateTime OrderDate { get { return orderDateValue; } set { orderDateValue = value; } } private DateTime requiredDateValue; /// <summary> /// The date this order is required /// </summary> public DateTime RequiredDate { get { return requiredDateValue; } set { requiredDateValue = value; } } private DateTime shippedDateValue; /// <summary> /// The date this order was shipped /// </summary> public DateTime ShippedDate { get { return shippedDateValue; } set { shippedDateValue = value; } } private int shipViaValue; /// <summary> /// The shipping method of this order /// </summary> public int ShipVia { get { return shipViaValue; } set { shipViaValue = value; } } private decimal freightValue; /// <summary> /// The freight charge for this order /// </summary> public decimal Freight { get { return freightValue; } set { freightValue = value; } } private string shipNameValue; /// <summary> /// The name of the recipient for this order /// </summary> public string ShipName { get { return shipNameValue; } set { shipNameValue = value; } } private string shipAddressValue; /// <summary> /// The address to ship this order to /// </summary> public string ShipAddress { get { return shipAddressValue; } set { shipAddressValue = value; } } private string shipCityValue; /// <summary> /// The city to ship this order to /// </summary> public string ShipCity { get { return shipCityValue; } set { shipCityValue = value; } } private string shipRegionValue; /// <summary> /// The region to ship this order to /// </summary> public string ShipRegion { get { return shipRegionValue; } set { shipRegionValue = value; } } private string shipPostalCodeValue; /// <summary> /// The postal code to ship this order to /// </summary> public string ShipPostalCode { get { return shipPostalCodeValue; } set { shipPostalCodeValue = value; } } private string shipCountryValue; /// <summary> /// The country to ship this order to /// </summary> public string ShipCountry { get { return shipCountryValue; } set { shipCountryValue = value; } } } /// <summary> /// A collection of Order objects /// </summary> class Orders: System.ComponentModel.BindingList<Order> { } }
Выберите пункт Сохранить все в меню Файл.
Создание источника данных объекта
Чтобы создать источник данных, основанный на объектах, созданных на предыдущем шаге, запустите Мастер настройки источника данных.
Чтобы создать источник данных объекта
Откройте окно Источники данных, щелкнув элемент Показать источники данных в меню Данные.
В окне Источники данных выберите пункт Добавить новый источник данных.
На странице Выбор типа источника данных выберите Объект и нажмите кнопку Далее.
Разверните узлы ObjectBindingWalkthrough и выберите объект Customer.
Примечание. Если объект Customer недоступен, нажмите кнопку Отмена, выберите Построить ObjectBindingWalkthrough в меню Построение. После успешного построения проекта запустите мастер (шаг 2). Это приведет к появлению пользовательских объектов.
Нажмите кнопку Готово.
Объект Customer появится в окне Источники данных.
Создание формы с привязкой к данным
Элементы управления с привязкой к объекту Customer создаются путем перетаскивания элементов из окна Источники данных на форму.
Чтобы создать форму с элементами управления, связанными со свойствами объекта
Выберите Form1 в Обозревателе решений и щелкните элемент Конструктор представлений.
Перетащите узел Customer из окна Источники данных на Form1.
Разверните узел Customer и перетащите узел Orders из окна Источники данных на Form1.
Создание адаптеров таблиц для загрузки данных из базы данных в пользовательские объекты
Для перемещения данных между объектами и базами данных будем использовать адаптеры таблиц. Для таблиц Customers и Orders адаптеры таблиц можно создать с помощью Мастер конфигурации источников данных.
Чтобы создать адаптеры таблиц
В меню Данные выберите пункт Добавить новый источник данных.
На странице Выберите тип источника данных выберите База данных.
На странице Выбор подключения базы данных выполните одно из следующих действий:
Если подключение к учебной базе данных Northwind доступно в раскрывающемся списке, то выберите его.
либо
Выберите Новое подключение для настройки нового подключения данных к базе данных "Northwind". Дополнительные сведения см. в разделе Практическое руководство. Создание подключений к базам данных SQL Server или Практическое руководство. Создание подключений к базам данных Access.
Щелкните Далее на странице Сохранить строку подключения в файле конфигурации приложения.
Разверните узел Таблицы на странице Выбор объектов базы данных.
Выберите таблицы Customers и Orders и нажмите Готово.
NorthwindDataSet добавляется в проект, а таблицы Customers и Orders отображаются в окне Источники данных под узлом NorthwindDataSet.
Добавление набора данных и адаптеров таблиц в форму Form1
Экземпляры CustomersTableAdapter, OrdersTableAdapter и NorthwindDataSet можно добавить к форме путем перетаскивания представляющих их компонентов из Панели элементов.
Для заполнения объектов Customer данными из таблицы Customers
В меню Построение выберите пункт Построить решение.
Перетащите NorthwindDataSet с Панели элементов на Form1.
Перетащите CustomersTableAdapter из Панели элементов на Form1.
Перетащите OrdersTableAdapter с Панели элементов на Form1.
Добавление запроса в CustomersTableAdapter для возврата только нескольких клиентов
В реальных приложениях запрос, скорее всего, никогда не возвратит всю таблицу данных. В данном пошаговом руководстве будем возвращать пять первых клиентов.
Примечание. |
---|
Обычно для выбора определенных клиентов передается параметр, но для краткости в данном пошаговом руководстве жестко пропишем запрос для возврата только пяти клиентов и исключим необходимость создания пользовательского интерфейса для введения значений параметров. |
Добавление дополнительных запросов к CustomersTableAdapter
Дважды щелкните файл NorthwindDataSet.xsd в Обозревателе решений.
NorthwindDataSet откроется в Конструкторе наборов данных.
Щелкните правой кнопкой мыши на CustomersTableAdapter и выберите Добавить запрос.
Откроется Мастер настройки запроса адаптера таблицы.
Оставьте значение по умолчанию для Использовать инструкции SQL и нажмите кнопку Далее.
Оставьте значение по умолчанию для SELECT, возвращающий строки и нажмите кнопку Далее.
Замените инструкцию SQL приведенным ниже кодом и нажмите кнопку Далее:
SELECT Top 5 CustomerID, CompanyName, ContactName, ContactTitle, Address, City, Region, PostalCode, Country, Phone, Fax FROM Customers
Снимите флажок Заполнить таблицу данных.
Назовите метод Вернуть таблицу данныхGetTop5Customers и нажмите кнопку Готово.
Запрос GetTop5Customers будет добавлен в CustomersTableAdapter.
Изменение запроса OrdersTableAdapter для возвращения заказов конкретного клиента
При получении заказа из базы данных, нам не требуется возвращать всю таблицу заказов; будем возвращать заказы для конкретного клиента. В следующей процедуре приведены подробные сведения для перенастройки адаптера таблицы с помощью нового запроса (в отличие от добавления дополнительных запросов к CustomersTableAdapter как мы делали на предыдущем шаге).
Чтобы перенастроить основной запрос адаптера таблицы для возвращения заказов одного клиента
Щелкните OrdersTableAdapter правой кнопкой мыши и выберите пункт Настройка.
Откроется Мастер настройки запроса адаптера таблицы.
Замените инструкцию SQL приведенным ниже кодом и нажмите кнопку Далее:
SELECT OrderID, CustomerID, EmployeeID, OrderDate, RequiredDate, ShippedDate, ShipVia, Freight, ShipName, ShipAddress, ShipCity, ShipRegion, ShipPostalCode, ShipCountry FROM Orders WHERE CustomerID = @CustomerID
Снимите флажок Заполнить таблицу данных.
Назовите метод Вернуть таблицу данныхGetDataByCustomerID и нажмите кнопку Готово.
Основной запрос FillOrdersTableAdapter заменяется запросом GetDataByCustomerID.
Постройте проект, выбрав пункт Построить решение в меню Построение.
Добавление кода для загрузки данных в объекты Customer и Order
Чтобы загрузить данные в наши пользовательские объекты, выполните запросы адаптера таблиц, возвращающие новые таблицы данных (в отличие от запросов адаптера таблиц, которые заполняют существующие таблицы данных). В коде реализован цикл просмотра таблицы и заполнения каждого объекта Customer сведениями о клиенте, а также заполнения всех заказов в каждой коллекции Customer.Orders. Обратите внимание, как добавляется каждый объект Customer к внутренней коллекции CustomerBindingSource (CustomerBindingSource.Add(currentCustomer)); BindingSource таким образом предоставляет встроенную строго типизированную коллекцию Customers, доступную через свойство List.
Чтобы заполнить объекты данными
Выберите Form1 в Обозревателе решений и щелкните элемент Открыть в конструкторе.
Замените код в Form1 на следующий:
Public Class Form1 Private Sub LoadCustomers() Dim customerData As NorthwindDataSet.CustomersDataTable = _ CustomersTableAdapter1.GetTop5Customers() Dim customerRow As NorthwindDataSet.CustomersRow For Each customerRow In customerData Dim currentCustomer As New Customer() With currentCustomer .CustomerID = customerRow.CustomerID .CompanyName = customerRow.CompanyName If Not customerRow.IsAddressNull Then .Address = customerRow.Address End If If Not customerRow.IsCityNull Then .City = customerRow.City End If If Not customerRow.IsContactNameNull Then .ContactName = customerRow.ContactName End If If Not customerRow.IsContactTitleNull Then .ContactTitle = customerRow.ContactTitle End If If Not customerRow.IsCountryNull Then .Country = customerRow.Country End If If Not customerRow.IsFaxNull Then .Fax = customerRow.Fax End If If Not customerRow.IsPhoneNull Then .Phone = customerRow.Phone End If If Not customerRow.IsPostalCodeNull Then .PostalCode = customerRow.PostalCode End If If Not customerRow.Is_RegionNull Then .Region = customerRow._Region End If End With LoadOrders(currentCustomer) CustomerBindingSource.Add(currentCustomer) Next End Sub Private Sub LoadOrders(ByRef currentCustomer As Customer) Dim orderData As NorthwindDataSet.OrdersDataTable = _ OrdersTableAdapter1.GetDataByCustomerID(currentCustomer.CustomerID) Dim orderRow As NorthwindDataSet.OrdersRow For Each orderRow In orderData Dim currentOrder As New Order() With currentOrder .OrderID = orderRow.OrderID .Customer = currentCustomer If Not orderRow.IsCustomerIDNull Then .CustomerID = orderRow.CustomerID End If If Not orderRow.IsEmployeeIDNull Then .EmployeeID = orderRow.EmployeeID End If If Not orderRow.IsFreightNull Then .Freight = orderRow.Freight End If If Not orderRow.IsOrderDateNull Then .OrderDate = orderRow.OrderDate End If If Not orderRow.IsRequiredDateNull Then .RequiredDate = orderRow.RequiredDate End If If Not orderRow.IsShipAddressNull Then .ShipAddress = orderRow.ShipAddress End If If Not orderRow.IsShipCityNull Then .ShipCity = orderRow.ShipCity End If If Not orderRow.IsShipCountryNull Then .ShipCountry = orderRow.ShipCountry End If If Not orderRow.IsShipNameNull Then .ShipName = orderRow.ShipName End If If Not orderRow.IsShippedDateNull Then .ShippedDate = orderRow.ShippedDate End If If Not orderRow.IsShipPostalCodeNull Then .ShipPostalCode = orderRow.ShipPostalCode End If If Not orderRow.IsShipRegionNull Then .ShipRegion = orderRow.ShipRegion End If If Not orderRow.IsShipViaNull Then .ShipVia = orderRow.ShipVia End If End With currentCustomer.Orders.Add(currentOrder) Next End Sub Private Sub Form1_Load(ByVal sender As System.Object, ByVal e As System.EventArgs) _ Handles MyBase.Load LoadCustomers() End Sub End Class
using System; using System.Windows.Forms; namespace ObjectBindingWalkthrough { public partial class Form1 : Form { public Form1() { InitializeComponent(); this.Load += Form1_Load; } private void LoadCustomers() { NorthwindDataSet.CustomersDataTable customerData = customersTableAdapter1.GetTop5Customers(); foreach (NorthwindDataSet.CustomersRow customerRow in customerData) { Customer currentCustomer = new Customer(); currentCustomer.CustomerID = customerRow.CustomerID; currentCustomer.CompanyName = customerRow.CompanyName; if (customerRow.IsAddressNull() == false) { currentCustomer.Address = customerRow.Address; } if (customerRow.IsCityNull() == false) { currentCustomer.City = customerRow.City; } if (customerRow.IsContactNameNull() == false) { currentCustomer.ContactName = customerRow.ContactName; } if (customerRow.IsContactTitleNull() == false) { currentCustomer.ContactTitle = customerRow.ContactTitle; } if (customerRow.IsCountryNull() == false) { currentCustomer.Country = customerRow.Country; } if (customerRow.IsFaxNull() == false) { currentCustomer.Fax = customerRow.Fax; } if (customerRow.IsPhoneNull() == false) { currentCustomer.Phone = customerRow.Phone; } if (customerRow.IsPostalCodeNull() == false) { currentCustomer.PostalCode = customerRow.PostalCode; } if (customerRow.IsRegionNull() == false) { currentCustomer.Region = customerRow.Region; } LoadOrders(currentCustomer); customerBindingSource.Add(currentCustomer); } } private void LoadOrders(Customer currentCustomer) { NorthwindDataSet.OrdersDataTable orderData = ordersTableAdapter1.GetDataByCustomerID(currentCustomer.CustomerID); foreach (NorthwindDataSet.OrdersRow orderRow in orderData) { Order currentOrder = new Order(); currentOrder.OrderID = orderRow.OrderID; if (orderRow.IsCustomerIDNull() == false) { currentOrder.CustomerID = orderRow.CustomerID; } if (orderRow.IsEmployeeIDNull() == false) { currentOrder.EmployeeID = orderRow.EmployeeID; } if (orderRow.IsFreightNull() == false) { currentOrder.Freight = orderRow.Freight; } if (orderRow.IsOrderDateNull() == false) { currentOrder.OrderDate = orderRow.OrderDate; } if (orderRow.IsRequiredDateNull() == false) { currentOrder.RequiredDate = orderRow.RequiredDate; } if (orderRow.IsShipAddressNull() == false) { currentOrder.ShipAddress = orderRow.ShipAddress; } if (orderRow.IsShipCityNull() == false) { currentOrder.ShipCity = orderRow.ShipCity; } if (orderRow.IsShipCountryNull() == false) { currentOrder.ShipCountry = orderRow.ShipCountry; } if (orderRow.IsShipNameNull() == false) { currentOrder.ShipName = orderRow.ShipName; } if (orderRow.IsShippedDateNull() == false) { currentOrder.ShippedDate = orderRow.ShippedDate; } if (orderRow.IsShipPostalCodeNull() == false) { currentOrder.ShipPostalCode = orderRow.ShipPostalCode; } if (orderRow.IsShipRegionNull() == false) { currentOrder.ShipRegion = orderRow.ShipRegion; } if (orderRow.IsShipViaNull() == false) { currentOrder.ShipVia = orderRow.ShipVia; } currentCustomer.Orders.Add(currentOrder); } } private void Form1_Load(object sender, EventArgs e) { LoadCustomers(); } } }
Тестирование приложения
Чтобы проверить работу приложения
Нажмите клавишу F5 для запуска приложения.
Откроется форма, а элементы управления DataGridView заполнятся образцами данных.
Перейдите к клиентам в DataGridView для отображения их заказов.
Следующие действия
Чтобы добавить функциональность в приложение
Добавьте код для отправки данных из пользовательских объектов в базу данных. Дополнительные сведения см. в разделе Практическое руководство. Непосредственный доступ к базе данных с помощью адаптера таблицы.
Измените порядок столбцов в DataGridView, выбрав Изменить столбцы в смарт-теге DataGridView.
См. также
Основные понятия
Привязка объектов в Visual Studio
Другие ресурсы
Подключение к данным в Visual Studio
Подготовка приложения к получению данных
Отображение данных на форме в приложениях Windows