1. Построение приложений с привязанными данными в Windows Forms

Метод Fill адаптера данных

сначала он проверяет не открыто

Я вызываю метод Fill Адаптера данных, который выполняет несколько действий. Сначала он проверяет, не открыто ли уже соединение в нижележащем объекте команды. Если нет, метод Fill Откроет соединение. Затем он исполняет запрос к базе данных. После этого адаптер принимает возвращаемые строки, проверяет, существует ли уже в наборе данных DataTable С требуемой схемой, и если нет, создает ее, а затем помещает в нее возвращаемые строки. Если адаптер данных открывал соединение, перед возвратом из вызова метода он закроет его. Если при заполнении набора данных вы не специфицируете имя таблицы, именем экземпляра таблицы данных будет просто Table, и по мере добавления дополнительных таблиц они будут названы Tablet, ТаЫе2 и т. д. Рис. Г. З показывает весь стек, используемый в типичном случае для работы с наборами данных и реляционными хранилищами данных. Обычно запрос или сохраняемая процедура будет возвращать только одну таблицу результатов, но вы могли бы возвратить одним запросом или сохраняемой процедурой сразу несколько таблиц, как показано в листинге Г.4. таблицы результатов, и набор данных заполняется двумя таблицами, одной для Customers и одной для Orders. Свойство TableName Каждой из результирующих таблиц устанавливается затем соответствующей строкой, поскольку в соответствии с соглашением по умолчанию они были бы названы Table и Tablet. Обратите также внимание на другой синтаксис при создании объектов в этом методе. Вместо спецификации различных параметров для каждого из объектов в его конструкторе здесь они передаются через свойства уже после конструирования.

Привязка элементов управления к источникам данных

в этой главе мы продолжим

В предыдущей главе было представлено введение в привязку данных Windows Forms и сделан краткий обзор компонента BindingSource, обеспечивающего более свободное связывание источников данных с элементами управления. В этой главе мы продолжим изучение вопросов привязки данных и рассмотрим многочисленные примеры привязки элементов управления Windows Forms, что поможет вам справляться даже с самыми сложными сценариями привязки на практике. В данной главе освещаются программные методы работы с компонентом BindingSource. Затем в главе 5 будет показана работа с окном источников данных и конструктором Windows Forms, которые в значительной мере автоматизируют процесс кодирования в типичных сценариях. Компонент BindingSource разрешает ряд каверзных проблем, которые возникали при непосредственной привязке источников данных к элементам управления, что имело место в. NET 1.x. Он образует промежуточный уровень между источником данных и привязанными элементами управления, что упрощает решение ряда задач. Кроме того, он открывает важные точки управления и доступ к нижележащему источнику данных, что избавляет вас от погружения в механизмы привязки данных формы, без чего нельзя было обойтись в прошлом. Источник привязки также дает вам, с точки зрения формы, единый интерфейс для программирования и позволяет сделать большую часть кода формы развязанной от конкретного типа источника данных. Благодаря этому вам не придется приспосабливать свой код к каждому из используемых приложением источников данных, будь то наборы данных, внешние источники, пользовательские рабочие объекты, массивы или что-то еще. Компонент BindingSource предоставляет обширный набор событий, к которым ваш код может подключаться для отклика на изменения в скрытых за ним данных, производимых другими элементами управления или каким-то кодом в вашем приложении. В этой главе мы шаг за шагом изучим все эти возможности.

Начала привязки данных в WinFx

в winfx существует и развитая

Итак, вы познакомились с парой простых программных приложений WinFx, но с данными в них ничего не происходило. В WinFx существует и развитая модель установки привязанных к данным элементов управления. Ее работа несколько отличается от того, что имеет место в Windows

Forms, и рассчитана на достижение большей гибкости и написание меньшего объема кода. Элементы WinFx ориентируются на концепцию контекста привязки данных, который автоматически передается дочерним элементам: из приложения к нижележащим оконным объектам, и далее вниз к дочерним элементам управления. Поэтому когда у вас есть источник данных, который нужно привязать к нескольким элементам управления, возможно, даже в различных окнах, вы можете организовать контекст данных, который позволит вам инициализировать и установить источник данных в одном месте, и будет автоматически передан вниз по каскадам дерева элементов к любым дочерним элементам, которые не устанавливают явным образом собственный контекст. Если вы внимательно прочитали главы этой книги, это должно вам кое-что напоминать. Подход к привязке в WinFx несколько сходен с работой объектов BindingSource В Windows Forms. Они представляют собой своего рода комплексный пункт для данных, к которым может быть привязано несколько элементов управления. Однако есть несколько явных отличий, как в способе объявления и инициализации привязок, так и в механизме их передачи другим элементам. В Windows Forms, чтобы создать ассоциацию между конкретным источником привязки и элементом управления, вы должны явным образом установить в свойстве DataSource Элемента управления ссылку на BindingSource, Либо добавить к коллекции DataBindings Элемента управления соответствующий объект Binding. Затем вы специфицируете еще и путь внутри источника данных к тому компоненту, к которому вы хотите привязаться. В случае привязок WinFx вам нужно только указать желаемый путь внутри контекста данных, а элемент управления автоматически воспримет контекст данных, установленный в его родительском дереве элементов.

Элементы управления TextBox

как и во многих элементах

Элемент управления TextBox Позволяет вам создавать однострочные и многострочные текстовые поля для ввода или отображения. Как и во многих элементах управления, его свойство Text Определяет строку, которая отображается внутри текстового поля. Когда вы помещаете текстовое поле на форму, режимом по умолчанию является однострочное поле. Если вам нужно многострочное, вы изменяете свойство Multiline На True. Через свойство Scrollbars У вас есть контроль над тем, будут ли у вас линейки прокрутки, когда вы находитесь в многострочном режиме. В. NET вам не нужно использовать для текстовых полей различного вида разные элементы управления, как это было в некоторых ранних инструментах разработки и языках. Однако в элементе управления текстового поля вы ограничены простым текстовым содержанием, и если вам нужно разрешить пользователям форматировать текст, который они вводят, то вы можете предоставить им элемент управления RichTextBox. Как и в случае элемента управления CheckBox, Вы можете обрабатывать событие CheckChanged, Чтобы отслеживать изменения выбора радиокнопок, либо просто проверять значение свойства Checked, Когда это потребуется для обработки. Класс RadioButton Является производным от CheckBox, И именно оттуда он получает определение этих свойств. Не совершайте только принципиального греха, используя радиокнопку там, где уместно поле флажка, и наоборот. Радиокнопки предназначены для взаимоисключающих вариантов выбора; флажки — для независимого выбора. Это часто нарушаемый момент в разработке пользовательского интерфейса, о котором вы не должны забывать. Элемент управления RichTextBox Позволяет пользователю вводить и форматировать текст, используя возможности, поддерживаемые спецификацией формата обогащенного текста. Подобно элементу управления TextBox, Строковое содержимое элемента управления доступно через свойство Text. Свойство Rtf Экспонирует содержимое со всеми встроенными кодами форматирования. Если пользователь вставляет в элемент управления форматированный текст из какой-то другой программы, поддерживающей форматирование, например, из Word или из Web-страницы, в тексте внутри элемента управления форматирование сохранится. Если вы хотите, чтобы пользователи имели возможность форматировать текст, который они вводят в элемент управления, то вам нужно будет предусмотреть другие элементы управления или горячие клавиши, которые позволят им исполнять команды форматирования для выбранного в элементе управления текста.

Форматирование при помощи стилей

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

Последней темой, которую мне хотелось бы охватить при обсуждении DataGridView, Является реализация специального форматирования ячеек. Как уже упоминалось, модель форматирования сетки обладает богатыми возможностями. Стили в сетке организованы по уровням, что позволяет вам установить стили более общего плана, а затем уточнить их на более подробном уровне. Например, вы могли бы установить стиль ячейки по умолчанию, относящийся ко всем ячейкам сетки, затем для одного из столбцов задать стиль с другим форматированием, а для некоторых ячеек этого столбца задать еще один стиль. Это делается путем установки ряда свойств стиля ячеек по умолчанию, экспонируемых сеткой, которые затем можно уточнять, устанавливая стили на уровне отдельной ячейки. Как можно видеть наинизшим уровнем модели является свойство DefaultCellstyle. Этот стиль будет использован по умолчанию для любой ячейки в сетке, для которой не установлено никакого стиля на каком-либо другом уровне стиля. Следующий уровень содержит RowHea — DersDefaultCellStyle И ColumnHeadersDefaultCellStyle, Которые воздействуют на способ представления заголовочных ячеек. Выше лежат свойство DataGridViewColumn. DefaultCellstyle И следующее за НИМ DataGridViewRow .DefaultCellstyle, Представляющие стили по умолчанию для отдельных столбцов или отдельных строк. Сетка поддерживает также стиль ячеек для перемежающихся строк, задаваемый свойством Alterna — TingRowsDefaultCellStyle. Наконец, наивысшим уровнем, который отменяет установки, сделанные на любом из более низких уровней, является СВОЙСТВО DataGridViewCell .CellStyle. Вы можете устанавливать эти свойства программно, обращаясь к соответствующим элементам экземпляров сетки, столбца, строки или ячейки. Все эти свойства относятся к типу DataGridViewCellStyle, Который экспонирует свойства для установки шрифта, цвета, выравнивания, заполнения и форматирования значений. Можно также конфигурировать стили ячейки в конструкторе. Всякий раз, когда вы обращаетесь к одному из свойств стиля ячейки в сетке или столбце через окно Properties либо через редакторы свойств контекстной вкладки в конструкторе, появляется диалог CellStyle Builder, показанный на рис. 6.12.