Механизм привязки данных (DataBinding), страница 12

Слева вы видите таблицу клиентов Customers, а справа результат запроса к удаленной таблице заказов Orders. Заказы были получены путем запроса к Web-сервису. Они отфильтрованы по индексу клиента, выбранного в левой таблице. В верхней части окна вы видите элементы управления, синхронизированные (связанные по технологии DataBinding) с данными таблицы Customers. Кроме особенностей разработки и обращения к Web-сервисам мы покажем некоторые другие важные приемы:

¨  Запуск Web-сервиса в рамках отдельного потока, реализованного с помощью нового класса BackgroundWorker.

¨  Использование коллекции типа хэш-таблицы, которую реализует generic-класс Dictionary<TKey,TValue>. Роль ключа будет выполнять название страны (TKey — имеет тип string), а роль значения — изображение флага этой страны (TValue— имеет тип Bitmap). Изображение флага вы видите в верхней части окна.

¨  Создание и введение в проект внедряемых ресурсов (Embedded Resource).

¨  Нестандартный способ перерисовки ячеек DataGridView. Облик ячеек левой таблицы (клиентов) создается в реакции на событие CellPainting класса DataGridView.

Проект типа ASP.NET Web-service Application

Структура нашего решения (solution) будет более сложной, чем ранее, поэтому создайте новое пустое решение (File►New►Project►Other Project Types►Visual Studio Solutions►Blank Solution) с именем NorthWindXML. Добавьте в него проект типа Windows Application с именем OrdersClient. Затем добавьте в решение еще один проект типа ASP.NET Web-service Application с именем MyServices. Последний проект довольно прост с точки зрения логики, котрую следует запрограммировать, но сложен с точки зрения своей скрытой структуры. Его задачей является:

¨  Прочесть данные таблицы Orders, расположенные в файле Orders.xml.

¨  Выбрать из нее строки соответствующие переданному значению поля CustomerID (связанный ключ),

¨  Создать временный DataSet и вложить в него таблицу, состоящую из отфильтрованных строк,

Передача таблицы, точнее, набора данных клиенту осуществляется автоматически. Набор данных сериализуется в XML-поток и вкладывается в конверт (Envelope) XML-протокола, соответствующего формату SOAP (Simple Object Access Protocol). Эту часть задачи решает проект типа Web-сервис почти без нашего участия.

Сначала рассмотрим формат файла Orders.xml. Вы должны взять его из папки нашего курса и поместить в папку Data, которую следует создать внутри папки проекта MyServices.

<?xml version="1.0" standalone="yes"?>

<NorthwindDataSet xmlns="http://tempuri.org/NorthwindDataSet.xsd">

<xs:schema id="NorthwindDataSet" targetNamespace="http://tempuri.org/NorthwindDataSet.xsd"

xmlns:mstns="http://tempuri.org/NorthwindDataSet.xsd"

xmlns="http://tempuri.org/NorthwindDataSet.xsd" mlns:xs="http://www.w3.org/2001/XMLSchema"

xmlns:msdata="urn:schemas-microsoft-com:xml-msdata" attributeFormDefault="qualified"

elementFormDefault="qualified">

. . . Здесь следует код разметки схемы набора данных NorthwindDataSet с одной таблицей Orders.

</xs:schema>

<Orders>

<OrderID>10248</OrderID>

<CustomerID>VINET</CustomerID>

<EmployeeID>5</EmployeeID>

<OrderDate>1996-07-04T00:00:00-07:00</OrderDate>

<RequiredDate>1996-08-01T00:00:00-07:00</RequiredDate>

<ShippedDate>1996-07-16T00:00:00-07:00</ShippedDate>

<ShipVia>3</ShipVia>

<Freight>32.3800</Freight>

<ShipName>Vins et alcools Chevalier</ShipName>

<ShipAddress>59 rue de l'Abbaye</ShipAddress>

<ShipCity>Reims</ShipCity>

<ShipPostalCode>51100</ShipPostalCode>

<ShipCountry>France</ShipCountry>

</Orders>

<Orders>

. . . Здесь расположены другие строки таблицы Orders.

</Orders>

</NorthwindDataSet>