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

Создание специального содержания с помощью несвязанных столбцов

могу вас успокоить что для

Теперь, когда вы понимаете, как программно создавать столбцы и строки и заполнять их значениями, у вас может возникнуть вопрос, неужели придется заниматься всем этим всякий раз, когда вам потребуется представить содержимое в ячейке, не привязанной к данным? Могу вас успокоить, что для большинства сценариев, где вы захотите представлять непривязанные данные, существуют более быстрые способы. Вам потребуется программно создать все столбцы сетки, но вы можете воспользоваться событиями, чтобы сделать процесс заполнения сетки несколько проще, особенно в случаях, когда вы совмещаете привязанные данные и несвязанные столбцы. Несвязанный столбец — это столбец, не привязанный к данным. Вы добавляете к сетке несвязанные столбцы программно, и заполняете их значениями либо программным путем, как показано в предыдущем разделе, либо используя события, что будет обсуждаться ниже. Вы все равно можете добавлять к сетке столбцы, автоматически привязываемые к столбцам или свойствам элементов в источнике данных. Это делается после создания столбца, путем установки его свойства DataPropertyName. Затем вы можете добавлять и несвязанные столбцы. Строки сетки будут созданы, когда вы установите свойство DataSource Сетки на источник данных, как это делалось в простом случае привязки, при этом сетка будет перебирать строки или объекты в источнике данных, создавая для каждой строки или объекта новую строку.

Наиболее распространенные параметры используемые для баз данных SQL Server

b существуют другие имена параметров

Наиболее распространенными параметрами, используемыми для баз данных SQL Server, являются параметры Server, Database, Trusted Con — Nection, User Id И Password. Существуют другие имена параметров, которые дают тот же результат, что и перечисленные , Так что вы можете сами решить, какие из них использовать для типичных сценариев соединения. Из этого примера вы можете видеть, что с SQL Express 2005 можно использовать параметр AttachDbFileName Для спецификации базы данных по файловому пути. Ключевое слово |DataDirectory | является специальной синтаксической конструкцией, которая предписывает объекту соединения искать файл в рабочем каталоге исполняющегося приложения. Строка соединения специфицирует также, что экземпляром сервера является экземпляр по умолчанию SQLEXPRESS, a Trusted_Connection=True Указывает интегрированную защиту, т. е. вы будете авторизованы в базе данных с использованием идентификации из учетной записи Windows, под которой запущено приложение. Вы можете также явным образом передать в строке соединения имя пользователя и пароль, если захотите воспользоваться авторизацией SQL Server. Обычно вам не потребуется в своих приложениях жестко кодировать стоки соединения, как это сделано в листинге Г. З. Лучше размещать их в вашем конфигурационном файле, причем как Visual Studio 2005, так и. NET 2.0 поддерживают новую развитую модель для размещения строк соединения и других специальных и пользовательских установок в файлах конфигурации, в то же время позволяя обращаться к ним программно, сильно типизированным образом. Эти возможности подробно описываются в главах 2 и 5.

Вам требуется поддерживать только одностороннюю привязку данных

как уже упоминалось компонент b

Если вам требуется поддерживать только одностороннюю привязку данных, для получения всех элементов данных достаточно будет интерфейса LEnumerable, И для отображения можно использовать данные, обнаруженные при последней привязке. Как уже упоминалось, компонент BindingSource Может проходить по объектам коллекции, реализующие только LEnumerable, Чтобы поместить эти объекты в свой внутренний список элементов, и В Этой точке можно в Windows Forms привязать данные к компоненту BindingSource, Поскольку он поддерживает интерфейс IList. Методы Add, Insert, Remove, RemoveAt И Clear Упрощают манипуляцию элементами в коллекции как упорядоченном списке переменной длины. Методы Contains И IndexOf В сочетании с индексатором обеспечивают прямой доступ к содержимому коллекции как для чтения данных для отображения, так и для модификации содержимого в заданной позиции списка. Свойства IsFixedSize И IsReadOnly Дают вам знать, можно ли модифицировать содержимое коллекции, и если да, то до какой степени. Поскольку другие элементы IList специально предназначены для поддержки модификации списка, вы редко встретитесь с коллекцией, которая была бы совершенно немодифицируема, и обычно по умолчанию устанавливается модифицируемость. Однако можно было бы найти и такие коллекции, которые поддерживают переключение в режим только для чтения или в режим фиксированного размера. Данные свойства позволяют проверить наличие такого режима перед попыткой модифицировать содержимое коллекции, которая привела бы к исключению в случае, если коллекция была помечена как допускающая только чтение или как имеющая фиксированный размер.

Интерфейс ITypedList: экспонирование свойств привязки данных

через этот интерфейс код потребителя

Интерфейс ITypedList Позволяет экспонировать или получать доступ к информации о типе относительно свойств, определяемых элементами коллекции. Через этот интерфейс код потребителя может сказать коллекции: «Расскажи мне все об элементах данных, которые ты содержишь». Эта информация широко используется конструктором Visual Studio, Когда вы на этапе проектирования декларативно конфигурируете привязанные элементы управления, например, при установке конфигурации столбцов сетки DataGridView В зависимости от типизированных свойств элементов в привязанной коллекции. Он может использоваться и во время выполнения, чтобы менять поведение в зависимости от динамически раскрываемых типов свойств элементов коллекции. Типы, реализующий интерфейс ITypedList, могут поддерживать раскрытие информации о типе содержащихся в них элементов данных, на этапе проектирования или во время выполнения. Классы DataView И Bin — DingSource Реализуют ITypedList, И информация, экспонируемая их реализациями, позволяет раскрывать информацию о типе относительно содержащихся элементов данных. Поскольку каждая таблица DataTable Экспонирует DataView По умолчанию, это делает информацию о типе для данных в DataTable Доступной через интерфейс ITypedList. Элементы этого интерфейса показаны в таблице 7.7. Описание метода GetltemProperties Может несколько напоминать порочный круг •— вы передаете массив дескрипторов свойств, чтобы получить обратно коллекцию дескрипторов свойств. Проще всего понять, что здесь происходит, если разобраться в реализации DataView Этого интерфейса. Если вы получите интерфейсную ссылку ITypedList На DataView И вызовете затем через нее GetltemProperties С параметром Null, То метод возвратит коллекцию объектов PropertyDescriptor, Которые описывают каждое поле таблицы данных, на которую ссылается псевдотаблица. Листинг 7.1 далее в этой главе демонстрирует пример использования GetltemProperties Для получения дескрипторов свойств столбцов в таблице.

Интерфейс ICollection: управление доступом к коллекции

b он является производным от

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

Возможно, самым важным и часто используемым элементом, входящим в интерфейс ICollection, Является свойство Count. Если у вас есть коллекция, которая реализует только LEnumerable, То единственным способом выяснить, сколько в ней элементов — это получить перечислитель и и перебрать все элементы, подсчитав их в своем собственном цикле. Писать такого рода код очень скучно и долго, в то время как коллекции, реализующие ICollection, Позволяют пользователям получать число элементов в коллекции прямо из свойства Count, Что возлагает бремя о этого значения на класс-реализатор, как и должно быть.

Метод СоруТо Позволяет потребителю коллекции получить копию всех элементов коллекции в форме типизированного массива, так что он может оперировать этими элементами, не беспокоясь о других потребителях коллекции. Метод принимает два аргумента: ссылку на массив и индекс, указывающий, с какого элемента коллекции должно начинаться копирование. Массив, передаваемый вызывающим, должен иметь тип, подходящий для размещения элементов коллекции, и размер, достаточный для копирования всех элементов, начиная с указанного индекса. Конечно, прежде чем воспользоваться этим методом, вы должны принять во внимание и издержки производительности, связанные с копированием каждого элемента. Если же приемлемо непосредственное манипулирование элементами коллекции, то не стоит и беспокоиться о предварительном их копировании в отдельный массив.

Если коллекция поддерживает одновременный доступ из нескольких потоков, ее нужно синхронизировать. Это означает, что в ней должен быть реализован механизм блокировки, гарантирующий, что не будет возникать состояний «гонок», когда, например, один поток пытается обратиться к элементу коллекции, который был только что удален другим потоком. Детали синхронизации выходят за рамки этой главы, однако есть много других книг, предоставляющих сведения по этой теме.