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

Метод GetRegions

затем он устанавливает объект соединения

Метод GetRegions Сначала очищает текущее содержимое набора данных, который хранится как элемент-переменная класса, содержащего этот метод. Затем он устанавливает объект соединения и передает его конструктору объекта команды вместе с именем сохраняемой процедуры, которая будет вызваться, всякий раз, когда вы собираетесь вызывать сохраняемую процедуру, вы должны устанавливать свойство CommandType Объекта команды перечислимым значением StoredProcedure. Адаптер настраивается на извлечение первичного ключа перечислимым значением AddwithKey В свойстве MissedSchemaAction, И его свойство SelectCommand Устанавливается на только что созданный объект команды. Наконец, вызывается метод Fill, Который исполнит сохраняемую процедуру, поместив возвращаемый результирующий набор в таблицу с именем Regions В наборе данных. Код в листинге Г.8 показывает метод обновления, который использует набор данных, содержащий таблицу Regions из базы данных Northwind, для выполнения обновлений, если в таблице были сделаны какие-либо вставки, удаления или модификации. Набор данных и адаптер являются здесь элементами охватывающего класса; таким образом, они доступны как для метода, заполняющего набор данных, так и для метода, который производит обновления и возвращает число обновленных строк. Этот код несколько более многословен, чем остальные примеры в этом приложении, поскольку каждая из сохраняемых процедур обновления, вставки и удаления требует некоторых параметров для решения о том, какие действия производить. Давайте разберем его строка за строкой.

Сначала метод извлекает необходимый ему объект соединения из команды выбора, ассоциированной с адаптером данных, который является элементом класса. Затем он создает каждую из команд сохраняемых процедур для обновления, вставки и удаления. Он создает объекты SqlParameter Для инкапсуляции каждого параметра каждой из команд и добавляет их к коллекции Parameters Команды. Затем метод ассоциирует каждую из команд с адаптером данных и вызывает метод Update Адаптера данных, чтобы исполнить команды для каждой строки в наборе данных, которая содержит изменения. Метод Update Адаптера возвращает число строк, которые были вставлены, удалены или обновлены при помощи набора данных. Кроме того, перед возвратом метод снова вызывает Fill Для адаптера данных, чтобы любые параллельные изменения, сделанные в базе данных, или столбцы, вычисляемые триггерами, отразились в кэшированном содержании в наборе данных.

Установка порядка табуляции

элементы управления windows forms следуют

Важным моментом, о котором следует помнить при планировке формы, является правильная установка порядка табуляции элементов управления. Элементы управления Windows Forms следуют стандартному соглашению Windows, позволяя пользователю перемещать фокус ввода от одного элемента управления к другому посредством клавиши Tab. Порядок, в котором будет перемещаться фокус, определяется порядком табуляции. Последний задается свойством Tablndex Каждого элемента управления. Вы можете устанавливать эти свойства вручную, но гораздо проще воспользоваться видом Tab Order конструктора Visual Studio. Если вы выберете Tab Order в меню View, когда в конструкторе отображается форма, вид Design будет модифицирован и отобразит индекс табуляции каждого элемента управления, как показано на

Вы можете установить порядок табуляции в виде Tab Order, щелкая на каждом элементе управления в том порядке, в котором вы хотите установить табуляции, начиная с первого элемента управления. Когда вы дойдете до последнего, автоматически установится новый порядок табуляции. Нажатие Esc или повторный выбор Tab Order в меню View закроет вид Tab Помните, что для меток, описывающих другие элементы управления, как те, что описывают назначение текстовых полей, вы должны устанавливать порядок табуляции, непосредственно предшествующий описываемому элементу управления. Это следует делать потому, что люди с ограниченными возможностями часто используют дополнительные инструменты, помогающие им различать элементы управления для ввода на экране, а многие из этих инструментов полагаются на порядок табуляции. Тогда экранный диктор у пользователя с поврежденным зрением сможет прочитать текст метки, когда он войдет табуляцией в текстовое поле, следующее за меткой по порядку табуляции. Когда пользователь проходит табуляцией по элементам управления, метки пропускаются, поскольку свойство TabStop В базовом классе Control Устанавливается по умолчанию в False. Входные элементы управления, такие, как текстовые поля, переопределяют это свойство, устанавливая его по умолчанию в True, Поэтому они будут принимать фокус ввода, когда пользователь табулирует по элементам управления.

Механизм преобразования типов

когда вы определяете свои собственные

Механизм преобразования типов устроен так, чтобы его можно было расширять. Когда вы определяете свои собственные типы, вы можете также определить для них конвертеры типа. Вы можете ассоциировать конвертер типа с типом, свойством или методом при помощи атрибута TypeConverterAt — Tribute. Конвертер типа используется привязкой данных Windows Forms И многими другими процессами в среде.NET Framework. Вы можете также реализовать Специальные форматеры , если вам требуется применять форматирование, выходящее за рамки возможностей встроенных форматеров. Тематика данной книги не охватывает реализацию собственных конвертеров и форматеров, но богатый набор конвертеров типа и обработчиков формата, имеющихся в.NET Framework, способен удовлетворить ваши потребности почти во всех ситуациях, связанных с привязкой данных. Для простых типов, таких, как целые или строки, чье обычное представление заключает в себе все содержимое данных в их сохраняемой форме, никаких преобразований типов на самом деле не требуется. Но для более сложных типов баз данных, таких, как Image, Datetime Или чисел с плавающей точкой, форматеры могут преобразовывать сырые данные в совершенно другой объектный тип. В следующих разделах мы рассмотрим несколько примеров привязки данных сложных типов, чтобы проиллюстрировать, как все это работает. Код для нескольких следующих разделов содержится в загружаемом образце приложения ComplexTypeBinding.

Привязка данных в ASP. NET 1.x

net x поддерживалась привязанными к

Привязка к данным в ASP. NET 1.x поддерживалась привязанными к данным элементами управления, привязанными к данным выражениями в разметке страницы, источниками данных и обработкой событий привязки, которая являлась частью цикла отображения станицы. Механизмы привязки к данным ASP. NET 1.x по соображениям обратной совместимости продолжают работать в ASP. NET 2.0, и вы по-прежнему будете пользоваться многими из тех же самых программных конструкций. Однако общий подход довольно сильно изменился, и появился ряд новых элементов управления, поддерживающих новый процесс, описываемый в оставшейся части этого приложения. Кроме того, в Visual Studio 2005 по сравнению с Visual Studio. NET 2003 имеются некоторые существенные изменения в самой разработке приложений. Для управлений разработкой Web-приложений больше не используются проекты; вы просто работаете с отдельными файлами и артефактами, которые содержатся в Web-папке. Имеются также новые возможности вроде динамической компиляции кода поддержки и обратных вызовов сценария, которая позволяет серверным элементам управления обновлять свое содержимое в браузере без полной отсылки всей страницы. Однако стоит вспомнить, как работала привязка к данным в ASP. NET 1.x, чтобы понять различия между моделью привязки к данным Web и моделью Windows Forms на случай, если вы столкнетесь с какими-то существующими приложениями ASP. NET, построенными до появления. NET 2.0. Вы по-прежнему можете применять в приложениях ASP. NET 2.0 элементы управления из ASP. NET 1.x, но рекомендуется все же придерживаться нового подхода привязки к данным, чтобы сократить объем кода, который вам придется писать и сопровождать. Привязанные к данным элементы управления ASP. NET 1.x следуют тому же процессу привязки к данным, что и соответствующие элементы управления Windows Forms. Например, элемент управления DataGrid Из ASP. NET является сложным табличным элементом, который позволяет показывать таблицы с данными, выбирать строки, редактировать их, сортировать столбцы и пролистывать данные. DataGrid Имеет свойство DataSource, Которое вы устанавливаете на коллекцию данных, и свойство DataMember, Которое можно использовать для уточнения того, какую коллекцию внутри этой коллекции вы хотите использовать для сложных контейнеров данных, таких, как набор данных.

Автоматическая установка размера столбцов

как и случае многих других

Одной из новых особенностей элемента управления DataGridView является его способность по ряду критериев автоматически вычислять ширину столбцов, чтобы содержимое вписывалось в столбцы. Как и случае многих других возможностей сетки, все, что вам для этого требуется — это установить соответствующее свойство нужного столбца, а сетка сделает все остальное. Говоря конкретнее, свойством, ответственным за автоматическую установку ширины, является свойство AutoSizeMode класса DataGridViewColumn. Устанавливая это свойство равным одному из значений перечисления DataGridViewAutoSizeColumnMode, описанных в таблице 6.5, вы можете управлять установкой ширины столбцов в сетке. Одним из наиболее полезных значений является All Се 11S. Я рекомендую всегда использовать его, если только это не слишком ухудшает эффективность для больШиХ наборов данных или в некоторых ячейках у вас получаются слишком длинные значения. Эта установка гарантирует, что строки содержимого ячеек не будут переноситься. Кроме того, не забывайте устанавливать свойство FormattingApplied Аргумента события, если вы предоставляете значения ячеек динамически. В противном случае установка AutoSizeMode Для одного из значений в строке приведет к бесконечному циклу. В качестве простого примера рассмотрите следующий код, являющийся модификацией кода из листинга 6.1, для установки ширины вычисляемого столбца FullName: Режим Fill Обладает мощным потенциалом в плане максимального использования наличного пространства в сетке, но может быть несколько труден для понимания. В принципе, когда вы устанавливаете для всех столбцов режим Fill, Их ширина будет устанавливаться равной, и столбцы будут заполнять границы сетки так, что горизонтальная полоса прокрутки не потребуется. Если свойство MinimumWidth Любого из столбцов в режиме Fill Больше, чем ширина, вычисленная по алгоритму заполнения, то будет вместо последней будет использовано значение MinimumWidth, А другие столбцы просто окажутся более узкими, так чтобы они все равно укладывались в сетку и не требовали горизонтальной прокрутки. Если свойства MinimumWidth Нескольких столбцов таковы, что все столбцы отобразить невозможно, то для тех столбцов, что не могут быть показаны, устанавливается минимальное значение ширины, при этом отображается полоса прокрутки. Значение по умолчанию для минимальной ширины равно всего 5 пикселам, поэтому вы наверняка захотите установить более разумное значение для MinimumWidth, Когда будете работать с режимом Fill.