2. Работа с наборами типизированных данных

Работа с нулевыми типами в. NET

nullable b b и nul

Инфраструктура.NET Framework Поддерживает два типа. Nullable И Nul — 1аЫе<т>, которые помогают справиться с тем фактом, что среде исполнения.NET Тип-значение не может быть пустым . Эти типы позволяют заключить тип-значение в объект, способный выражать для типа-значения значение логического нуля. Обобщенный вариант Nullable<T> Предпочтительнее, поскольку Nullable Фактически инкапсулирует обычный тип в оболочке ссылочного типа, которая возлагает дополнительную нагрузку на сборщик мусора, если создается много экземпляров. Nullable<T> Сохраняет экземпляр на стеке как тип-значение, но при этом позволяет ему иметь значение Null.

В C# 2.0 для этих типов имеется специальная синтаксическая форма. Вы можете объявить переменную типа-значения с последующим знаком вопроса, который сообщает компилятору, что такую переменную следует создать как экземпляр типа Nullable<T>, Где Т — фактический тип, указанный в сокращенной нотации. Еще одной специальной разновидностью нулевых типов, с которой вы будете часто иметь дело при работе с привязкой данных, является класс DBNull. Это специальный класс-заместитель, предназначенный для представления значений Null В базе данных. Поскольку между Null В Базе данных и Null В.NET Нет стопроцентного соответствия, то если при извлечении значений из базы данных значением столбца является Null, В качестве соответствующего объекта.NET Будет создан экземпляр класса DBNull. Этот класс содержит единственное статическое свойство с именем Value, Которое вы можете использовать для проверки того, не равняется ли нечто DBNull. Однако если вы, как здесь, работаете с Ls<ColumnName>Null, Где <ColumnNa — Me> — это имя сильно типизированного свойства в наборе данных. При помощи этого метода вы можете заменить приведенный выше код следующим, более предпочтительным:

Другой метод, определяемый для каждого такого столбца, это SetcColumnNa — Me>Null. Если вы вызываете этот метод, он присваивает соответствующему свойству в строке данных значение DBNull .Value. Если вы затем используете эту строку для обновления базы данных через адаптер данных или адаптер таблицы, в базу данных будет записано значение логического Null.

Новый элемент C#

вы просто присваиваете событию имя

Новый элемент C# — неявный вывод делегатов — позволяет вам не создавать явным образом экземпляр делегата, чтобы назначить событию обработчик. Вы просто присваиваете событию имя метода с сигнатурой, соответствующей типу делегата события, а компилятор генерирует за вас экземпляр делегата. В Visual Basic используется операция AddHandler, Которая всегда так и работала.

Когда устанавливается источник данных сетки и она отображается, сетка перебирает строки источника данных и добавляет новую строку для каждой из строк в источнике данных, устанавливая значения ячеек в привязанных столбцах соответствующими значениями из источника данных. При создании каждой строки запускается событие RowsAdded. Кроме того, запускается ряд событий при создании каждой из ячеек строки. Как уже упоминалось, вы можете использовать событие Се 11 Formatting, Если хотите программно задавать для ячеек отображаемые значения. Аргумент, передаваемый событию CellFormatting, Экспонирует несколько свойств, сообщающих вам о том, какая ячейка отображается. По свойству Columnidex Вы можете определить, для какого столбца было запущено событие. Свойство сравнивается с индексом столбца Contact в коллекции Columns. Если оказывается, что это именно тот столбец, для которого вы хотите задать значение программно, вы можете получить действительную строку, заполняемую в настоящий момент, при помощи свойства Rowlndex Аргумента события. В данном случае код просто соединяет значения в столбцах ContactName И Phone, Чтобы с помощью метода String.Format Образовать строку с контактной информацией, и устанавливает эту строку в качестве значения столбца Contact. При других обстоятельствах вы можете воспользоваться событием CellFormatting, Чтобы, скажем, произвести поиск значения в другой таблице, такого, как внешний ключ, и использовать результат поиска в качестве значения, отображаемого в несвязанном столбце. Обработчик устанавливает также равным True Свойство FormattingApplied В аргументе события. Это очень важное действие; оно сообщает сетке, что данный столбец подвергается динамическому обновлению. Если этого не сделать, и вы к тому же задаете для столбца автоматическое определение размера, у вас получится бесконечный цикл.

Доступ к XML-данным

net сам по себе является

Доступ к XML-данным в. NET сам по себе является огромной темой, не связанной по большей части с реляционным доступом к данным. Есть несколько причин, которые делают его трудной темой для краткого обзора. Начать хотя бы со всех тех стандартов, знание которых является необходимой предпосылкой для работы с XML, таких, как сам стандарт XML, XPath, XML Schema, XSLT и XQuery. Далее, имеется несколько моделей работы с XML в. NET. Наконец, средства XML в. NET Framework были существенно расширены в версии 2.0. Невозможно вкратце охватить все способы программирования в. NET при помощи XML, поэтому я ограничусь теми моментами, которые позволят вам понять, каким образом можно принять данные XML в ваше приложение Windows и отобразить эти данные через элементы управления Windows Forms. Не существует способа непосредственной привязки XML-данных к каким-либо элементам управления Windows Forms, поставляемым с. NET Framework. Чтобы использовать XML-данные в привязке данных, вам нужно будет либо ввести их в набор данных, либо прочитать в специальные рабочие объекты, пригодные для привязки данных. Начать свое знакомство с XML в. NET вам следует с существующих разновидностей объектных моделей XML. Имеется класс XmlDocument, Который предусматривает реализацию стандарта Объектной модели документа XML W3C. Этот класс позволяет работать с XML в форме документов, которые читаются в память во всей своей полноте в «тяжелую» объектную модель. Существует также класс XmlDataDocument, Который на самом деле является просто производным от XmlDocument. Помимо того, что он предоставляет DOM-хранилище для XML, этот класс инкапсулирует набор данных, позволяющий работать с содержимым документа как с реляционными данными. Класс XmlDataDocument Позволяет вам также поместить реляционные данные через набор данных в объект, после чего вы можете манипулировать этими данными как XML. Классы XmlReader И XmlWriter Предлагают очень легкий потоковый подход для чтения XML. Эти классы и производные от них могут использоваться совместно с другими возможностями. NET, такими, как сериализация XML, доступ к данным XML из реляционных хранилищ и сырой доступ к потокам XML с диска или через сеть. Наконец, имеется новая объектная модель, введенная в. NET 1.0, основанная на классах XPathDocument И XPathNavigator. В. NET 2.0 эти классы образуют базис предпочтительного метода работы с XML.

Расширение привязанных элементов управления Framework

а именно если вы хотите

В зависимости от того, какого рода специальные функции привязки данных вам необходимо поддерживать, наилучшим решением может оказаться наследование от одного из существующих элементов управления из. NET Framework. А именно, если вы хотите приспособить к своим нуждам представление данных в элементе управления, то многие из элементов Windows Forms экспонируют в базовом классе богатую модель событий и виртуальные методы, позволяющие вам интегрировать в них свой собственный код, чтобы настроить внешний вид и/или поведение элемента управления, как он будет представлен пользователю или когда последний будет с ним взаимодействовать. Поведение элементов управления Windows Forms в привязке данных очень тесно переплетено с остальными их аспектами; оно не экспонируется так, чтобы можно было легко переопределить поведение при наследовании от элемента управления. Если вам нужно изменить данные, представляемые в элементе управления, то проще изменить источник данных, к которому вы привязываетесь, чем пытаться заставить элемент управления изменить то, какие данные из привязанного источника он должен отображать. Например, если вы хотите показывать в привязанном элементе управления только избранные элементы коллекции данных, нужно просто привязать его к источнику привязки и воспользоваться свойством Filter Последнего, чтобы модифицировать набор элементов данных, представляемых в элементе управления. В качестве альтернативы можно было бы исполнять повторный запрос в зависимости от действий пользователя. Однако если вы хотите изменить внешний вид данных в элементе управления, то большинство из привязанных к данным элементов Windows Forms позволяют вам частично либо полностью взять под свой контроль рисование или логику отображения, и выполнять отображение данных самостоятельно. В случае текстовых полей, комбинированных полей и DataGridview Существуют способы управления событиями рисования, возбуждаемыми Framework, и в своем обработчике вы можете сами выполнять отображение данных. Имеются также возможности настройки форматирования данных, как они будут представлены в элементе управления.

Поддержка сортировки в IBindingList

свойство b supportssorting b позволяет

Следующей категорией функций, специфицируемых элементами интерфейса IBindingList, Является сортировка. Свойство SupportsSorting Позволяет коллекции указать, поддерживает ли она вообще сортировку. Если нет, то привязанный элемент управления даже не должен показывать пользователю какие-либо средства сортировки. Если коллекция поддерживает сортировку, то методы ApplySort И RemoveSort Позволяют элементу управления активировать либо исключать функции сортировки, предусматриваемые коллекцией. Метод ApplySort Принимает два аргумента: PropertyDescriptor, Идентифицирующий свойство, по которому вы хотите сортировать, и перечисление ListSortDirection, Значением которого может быть Ascending Либо Descending. Поддержка сортировки, определяемая интерфейсом IBindingList, Обеспечивает сортировку только по одному критерию. Для сортировки по набору свойств нужно реализовать интерфейс IBindingListView, Как описывается в следующем разделе. сначала конструирует «на ходу» простой набор данных, с которым он будет работать, и возвращает в качестве коллекции данных его псевдотаблицу по умолчанию. Класс Dataview Реализует оба интерфейса IBindingList И ITypedList, Что позволяет нам динамически определять поведение и содержимое коллекции данных. Разумеется, в настоящем программном продукте нужно было бы проверить результат приведения, и если приведение неудачно, предпринять соответствующие действия. После получения интерфейсных ссылок на коллекцию данных код вызывает вспомогательный метод DumpList, Чтобы вывести содержимое списка до того, как к нему будут применены какие-либо сортировки.