4. Привязка объектов контроля к источникам данных

Привязка к рабочим объектам в окне Data Sources

образец custombusinessobjects на самом деле

Теперь, когда мы изучили весь процесс объявления рабочих объектов и коллекций, поддерживающих весь диапазон функций для привязки данных, давайте взглянем снова на простейший способ их использования в сценариях привязки данных при помощи окна Data Sources. Образец CustomBusinessObjects на самом деле объявляет классы Customer, Order, CustomerCollection И TestDataGenerator В Отдельной сборке библиотеки классов из проекта приложения Windows, который использовался для их тестирования. Чтобы показать, насколько просто использовать эти типы в привязке данных, давайте добавим к проекту CustomBusinessObjects — Client новую форму с именем Customers Form. Вы видите, что установить при помощи этих немногих операций привязку данных к специальным объектам и коллекциям не сложнее, чем организовать привязку к наборам данных. Однако вы видели также, что, безусловно, требуется масса работы для определения самих типов специальных объектов и коллекций таким образом, чтобы они правильно работали в сценарии привязки данных. В этой главе вы рассмотрели концепции, стоящие за определением и использованием специальных рабочих объектов для привязки данных в Windows Forms 2.0. По существу все сводится к поддержке разнообразных интерфейсов привязки данных на уровне объектов и коллекций. Вы узнали, как определять объекты, поддерживающие транзакционное редактирование и уведомления об изменении свойств, а также о различных видах коллекций, которые можно определять и использовать в сценариях привязки данных. Подводя итог, можно сказать, что для определения коллекций рабочих объектов, которые вы собираетесь использовать в привязке данных, следует предпочитать обобщенный тип BindingList<T> или производный от него класс. В зависимости от ваших потребностей вы, возможно, захотите также предусмотреть в своем производном классе коллекции реализации для сортировки, поиска и фильтрации.

Подключение обработчика события и привязка данных

а именно когда вы двойным

Хотя вы и работаете с двумя различными представлениями класса Forml, Видом Design и видом Code, вид Design в действительности является просто отражением кода, которое динамически поддерживает Visual Studio. А именно, когда вы двойным щелчком открываете исходный файл, содержащий определение класса формы, IDE видит, что класс, определенный в исходном файле, является производным от базового класса Form. Класс Form предусматривает специфическую поддержку для работы с ним в конструкторе, поэтому IDE, когда вы открываете файл, по умолчанию отображает вид Design класса. Вы можете переключиться в вид Code, либо щелкнув правой кнопкой где-нибудь внутри конструктора и выбрав в контекстном меню View Code, либо выбрав кнопку View Code в середине маленькой инструментальной панели в верхней части окна Solution Explorer, когда в дереве Solution Explorer выбран файл класса формы. Для переключения между видом Code и видом Design формы вы можете также воспользоваться клавишей F7. Чтобы прочитать данные из файла XML и привязать их к сетке, добавьте к методу Private Заметьте, что вам не нужно создавать экземпляр набора данных, как вы делали это в предыдущем примере, поскольку вы создали его как элемент, сбросив на форму в конструкторе. Когда вы сделали это, был также добавлен код для создания этого экземпляра. Но вы все равно устанавливаете привязку данных между сеткой и источником данных, устанавливая свойство Datasource сетки. В зависимости от того, каким образом вы создаете в конструкторе набор данных, у вас также может быть возможность установить эту привязку данных в конструкторе. В настоящем случае структура набора данных не определена до тех пор, пока набор данных не будет загружен из XML-файла во время выполнения, поэтому во время проектирования у конструктора нет достаточной информации, чтобы привязать первую таблицу, поэтому вы делаете это здесь программно.

Приложение Hello World

для этого вам потребуется создать

Давайте начнем с простого приложения WinFx «Hello World», не используя ничего, кроме кода. Для этого вам потребуется создать проект в Visual Studio 2005. Имеются типы проектов WinFx, которые добавляются в Visual Studio 2005 Beta 2 при установке Visual Studio Extensions for WinFx, так что вам нужно будет установить эти расширения, равно как и компоненты среды выполнения вместе с WinFx SDK.

Из этого простого приложения можно видеть, что прежде всего вам потребуется объект приложения. Вам нужно также главное окно, которое в простых сценариях можно создать как экземпляр класса Window.

В реальных приложениях вы обычно будете создавать экземпляр своего собственного класса, производного от Window Или одного их производных классов WinFx Framework, такого, как NavigationWindow. Окно, как и элементы управления, является элементом визуального дерева, поэтому вы модифицируете отображаемое содержимое окна путем установки его свойства Content. В данном случае установите в нем простую строку, а класс Window Сам способен отобразить ее за вас. В типичном случае вы образуете содержание UI окна, конструируя дерево из других элементов и устанавливая верхний объект этого дерева в качестве свойства Content Для окна. Как только вы установили для содержимого окна строку «Hello WinFx», вы показываете окно, вызывая его метод Show. Затем вы вызываете метод Run Объекта Application, Который организует цикл обработки событий, используемый Windows для коммуникации с запущенным приложением, точно так же, как это делается в сегодняшних приложениях WindowsForms. Обратите внимание на атрибут STAThread Для метода Main. В WinFx на Windows ХР он все еще необходим, так как WinFx заключает в оболочку некоторые из предоставляемых системой элементов управления, которые предназначены для выполнения в однопоточном разделе.

Интерфейс IListSource: экспонирование коллекций коллекций

вы можете инкапсулировать расположение и

Интерфейс IListSource Позволяет типу сообщить, содержит ли он коллекцию коллекций, и экспонировать коллекцию по умолчанию для привязки данных. Код привязки данных может использовать реализацию интерфейса IListSource Объекта для получения списка для привязки, когда сам источник данных списком не является, или для получения списка коллекций, которые содержит объект.

Часто вам потребуется работать с коллекциями данных, которые связаны друг с другом. Наиболее частым случаем этого является работа с наборами данных в. NET. Набор данных можно рассматривать в качестве Коллекции коллекций, так как он может содержать набор таблиц. Каждая DataTable Является Коллекцией элементов данных, которыми являются строки данных . Вы можете также реализовать свой собственный специальный тип контейнера, который содержит другие коллекции, такой, как список списков. Или, возможно, ваш тип контейнера содержит единственный список, но вы хотите позволить потребителям использовать ваш объект как источник данных и получать из объекта список для целей привязки данных. Предположим, например, что у вас есть рабочий класс с именем InventoryManager, Который позволяет вам управлять позициями вашего инвентаря и получать к ним доступ для различных случаев применения. Допустим, вы захотите предоставить приложениям возможность привязки к вашему менеджеру инвентаря, причем менеджер контролировал бы, что будет экспонироваться для привязки данных, исходя из некоторого критерия, экспонируемого классом: У вас также мог бы быть контейнер с несколькими коллекциями, например, класс менеджера инвентаря, содержащий списки наличных позиций инвентаря, позиций, поставляемых по предварительному заказу, и поставщиков. В этом случае вы хотели бы предоставить потребителям простой способ получить список списков, которые содержит ваш объект. Интерфейс IListSource Поддерживает эти сценарии посредством двух своих элементов, описанных в 6. Он позволяет возвратить при вызове GetList Коллекцию по умолчанию . Этот список может быть либо простым списком объектов для привязки данных, либо списком списков, содержащихся в объекте. Если свойство ContainsListCollection Возвращает True, Предполагается, что список, возвращаемый GetList, Сам содержит списки.

Реляционный доступ к данным

вам требуется классы определяемые в

Имея дело с доступом к реляционным данным, вы обычно следуете одной и той же процедуре всякий раз, когда вам требуется войти в контакт с базой данных для извлечения или обновления данных. Вам требуется Классы, определяемые в ADO. NET, используются для инкапсуляции состояния и поведения, ассоциированных с каждым из этих пунктов. Центральной концепцией реляционного доступа к данным в. NET является модель отключенных данных. Очевидно, вы не можете исполнить запрос, если у вас нет действительного соединения с базой данных. Отключенный доступ к данным означает, что вы открываете соединение, используете это соединение для выдачи набора запросов, а затем закрываете соединение. Некоторое время вы можете продолжать в клиенте работу с данными, полученными от запроса. Затем в некоторый момент вы можете восстановить соединение с базой данных, чтобы либо выдать запросы на обновление, либо обновить свои собственные данные, но вы не поддерживаете соединение с базой данных открытым все время, пока работаете с данными. Работа с такой моделью данных сильно отличается от того, что имело место в традиционных API баз данных, где обычно предпочиталась подключенная модель. Это также отлично от концепции автономных операций в приложениях развитого клиента. Автономные операции сосредоточены на возможности кэширования операциональных данных на стороне клиента, которое позволяет продолжать поддерживать некоторые случаи применения, даже когда нет подключения к сети. Отключенный доступ к данным обычно предполагает, что соединение с сетью доступно, но вы просто не поддерживаете соединения с базой данных открытыми в течение всего периода работы приложения.