- Любовные романы
- Фантастика и фэнтези
- Ненаучная фантастика
- Ироническое фэнтези
- Научная Фантастика
- Фэнтези
- Ужасы и Мистика
- Боевая фантастика
- Альтернативная история
- Космическая фантастика
- Попаданцы
- Юмористическая фантастика
- Героическая фантастика
- Детективная фантастика
- Социально-психологическая
- Боевое фэнтези
- Русское фэнтези
- Киберпанк
- Романтическая фантастика
- Городская фантастика
- Технофэнтези
- Мистика
- Разная фантастика
- Иностранное фэнтези
- Историческое фэнтези
- LitRPG
- Эпическая фантастика
- Зарубежная фантастика
- Городское фентези
- Космоопера
- Разное фэнтези
- Книги магов
- Любовное фэнтези
- Постапокалипсис
- Бизнес
- Историческая фантастика
- Социально-философская фантастика
- Сказочная фантастика
- Стимпанк
- Романтическое фэнтези
- Ироническая фантастика
- Детективы и Триллеры
- Проза
- Юмор
- Феерия
- Новелла
- Русская классическая проза
- Современная проза
- Повести
- Контркультура
- Русская современная проза
- Историческая проза
- Проза
- Классическая проза
- Советская классическая проза
- О войне
- Зарубежная современная проза
- Рассказы
- Зарубежная классика
- Очерки
- Антисоветская литература
- Магический реализм
- Разное
- Сентиментальная проза
- Афоризмы
- Эссе
- Эпистолярная проза
- Семейный роман/Семейная сага
- Поэзия, Драматургия
- Приключения
- Детская литература
- Загадки
- Книга-игра
- Детская проза
- Детские приключения
- Сказка
- Прочая детская литература
- Детская фантастика
- Детские стихи
- Детская образовательная литература
- Детские остросюжетные
- Учебная литература
- Зарубежные детские книги
- Детский фольклор
- Буквари
- Книги для подростков
- Школьные учебники
- Внеклассное чтение
- Книги для дошкольников
- Детская познавательная и развивающая литература
- Детские детективы
- Домоводство, Дом и семья
- Юмор
- Документальные книги
- Бизнес
- Работа с клиентами
- Тайм-менеджмент
- Кадровый менеджмент
- Экономика
- Менеджмент и кадры
- Управление, подбор персонала
- О бизнесе популярно
- Интернет-бизнес
- Личные финансы
- Делопроизводство, офис
- Маркетинг, PR, реклама
- Поиск работы
- Бизнес
- Банковское дело
- Малый бизнес
- Ценные бумаги и инвестиции
- Краткое содержание
- Бухучет и аудит
- Ораторское искусство / риторика
- Корпоративная культура, бизнес
- Финансы
- Государственное и муниципальное управление
- Менеджмент
- Зарубежная деловая литература
- Продажи
- Переговоры
- Личная эффективность
- Торговля
- Научные и научно-популярные книги
- Биофизика
- География
- Экология
- Биохимия
- Рефераты
- Культурология
- Техническая литература
- История
- Психология
- Медицина
- Прочая научная литература
- Юриспруденция
- Биология
- Политика
- Литературоведение
- Религиоведение
- Научпоп
- Психология, личное
- Математика
- Психотерапия
- Социология
- Воспитание детей, педагогика
- Языкознание
- Беременность, ожидание детей
- Транспорт, военная техника
- Детская психология
- Науки: разное
- Педагогика
- Зарубежная психология
- Иностранные языки
- Филология
- Радиотехника
- Деловая литература
- Физика
- Альтернативная медицина
- Химия
- Государство и право
- Обществознание
- Образовательная литература
- Учебники
- Зоология
- Архитектура
- Науки о космосе
- Ботаника
- Астрология
- Ветеринария
- История Европы
- География
- Зарубежная публицистика
- О животных
- Шпаргалки
- Разная литература
- Зарубежная литература о культуре и искусстве
- Пословицы, поговорки
- Боевые искусства
- Прочее
- Периодические издания
- Фанфик
- Военное
- Цитаты из афоризмов
- Гиды, путеводители
- Литература 19 века
- Зарубежная образовательная литература
- Военная история
- Кино
- Современная литература
- Военная техника, оружие
- Культура и искусство
- Музыка, музыканты
- Газеты и журналы
- Современная зарубежная литература
- Визуальные искусства
- Отраслевые издания
- Шахматы
- Недвижимость
- Великолепные истории
- Музыка, танцы
- Авто и ПДД
- Изобразительное искусство, фотография
- Истории из жизни
- Готические новеллы
- Начинающие авторы
- Спецслужбы
- Подростковая литература
- Зарубежная прикладная литература
- Религия и духовность
- Старинная литература
- Справочная литература
- Компьютеры и Интернет
- Блог
Обработка баз данных на Visual Basic®.NET - Джеффри Мак-Манус
Шрифт:
Интервал:
Закладка:
РИС. 7.1. Содержимое объекта DataSet с отображениями таблицы и полей
Листинг 7.5. Измененная версия функции ReadDataMapped для отображения таблицы и полей
Private Sub ReadDataMapped()
Dim daEmployees As SqlDataAdapter = New _
SqlDataAdapter("select * from tblEmployee", _
"server=localhost;uid=sa;database=novelty")
dsEmployeeInfo = New DataSet()
' Конфигурация отображений таблицы и полей.
daEmployees.TableMappings.Add("MappingName", "empDataSetTable")
With daEmployees.TableMappings("MappingName").ColumnMappings
.Add("ID", "empEmployeeID")
.Add("FirstName", "empFirstName")
.Add("LastName", "empLastName")
.Add("DepartmentID", "empDepartmentID")
.Add("Salary", "empSalary")
End With
daEmployees.Fill(dsEmployeeInfo, "MappingName")
DisplayDataSet(dsEmployeeInfo)
End Sub
НА ЗАМЕТКУПо умолчанию отображение таблицы называется Table. Оно применяется в том случае, если в методе Fill (или методе Update) используется только имя объекта DataSet. Однако его можно указать явно вместе с нужным именем таблицы с помощью приведенного ниже кода.
daEmployees.TableMappings.Add("Table", "MyTableName")
daEmployees.Fill(dsEmployeeInfo)
Это приведет к созданию таблицы MyTableName и вставке данных в нее.
Объект DataView
Объект DataView позволяет одновременно создавать разные представления данных из объекта DataTable и обладает перечисленными ниже свойствами, которые позволяют настраивать способ отображения данных.
• Порядок сортировки (нисходящий или восходящий) по одному или нескольким полям.
• Выражение для фильтрации записей, которое указывает критерии отображения записей на основе значений полей.
• Фильтр состояния записи, который указывает критерии отображения записей на основе состояния записи (см. перечисление DataViewRowState, показанное в табл. 5.3).
Хотя этот способ может показаться аналогичным способу на основе использования метода Select объекта DataTable, они существенно отличаются. С одной стороны, объект DataView – это полностью динамичное представление данных. Помимо изменений значений полей, вставки и удаления записей в таблице-источнике немедленно отражаются в объекте DataView. С другой стороны, метод Select возвращает массив фиксированный длины со ссылками на записи, которые отражают изменения значений полей в таблице-источнике, но не отражают вставку и удаление записей или их упорядочение. Этот динамический аспект объекта DataView особенно эффективно применяется для создания кода, связанного с данными.
НА ЗАМЕТКУХотя объект DataView аналогичен классическому представлению базы данных, он все же отличается от него следующим:
• не может использоваться как таблица;
• не может быть объединением нескольких таблиц;
• не может исключать поля, которые присутствуют в таблице-источнике;
• не может включать дополнительные поля (например, вычисленные поля), которых нет в таблице-источнике.
Объекты DataView используются с помощью свойства DefaultView объекта DataTable. Предположим, нужно создать представление для таблицы Customers, причем клиенты в нем должны быть упорядочены по почтовым индексам и иметь фамилии, начинающиеся с символа С. Для этого нужно использовать указанные ниже значения двух соответствующих свойств.
dsCustomers.Tables("Customers").DefaultView.RowFilter = _
"LastName = 'Like C* ' "
dsCustomers.Tables("Customers").DefaultView.Sort = "Zip"
Если необходимо отобразить в представлении текущие значения только из тех записей, которые были изменены (но еще не сохранены), то нужно указать новое значение для свойства RowFilter и значение свойства RowState.
dsCustomers.Tables("Customers").DefaultView.RowFilter = " "
dsCustomers.Tables("Customers").DefaultView.RowStateFilter = _
DefaultView.RowState.ModifiedCurrent
НА ЗАМЕТКУОбъект DataView также имеет метод Find для поиска одной записи и метод FindRows для поиска и возвращения нескольких записей. Если нужно извлечь или набор записей, которые соответствуют заданному критерию, вместо динамического представления данных, то с помощью методов Find и FindRows (вместо указания свойства RowFilter) будут возвращены только интересующие нас записи. Этот метод обладает более высокой производительностью, чем метод на основе установки значения свойства RowFilter. Дело в том, что указание значения свойства RowFilter вызывает перестройку индекса представления, а методы Find и FindRows используют уже существующие индексы.
Для таблицы могут быть созданы также дополнительные объекты – представления данных. Для определения еще одного представления таблицы Customers нужно создать еще один объект dvView2 и указать его свойства так, как показано ниже.
dvView2 = New DataView(dsCustomers.Tables("Customers"), _
"", "LastName", DataViewRowState.CurrentRows)
Теперь, после определения объекта DataView, можно изменить его свойства.
dvView2.RowFilter = "LastName > 'F'"
dvView2.Sort = "LastName DESC"
dvView2.RowStateFilter = DataViewRowState.Current
НА ЗАМЕТКУОбъект DataViewManager предлагает удобный централизованный способ управления параметрами представлений для всех таблиц набора данных DataSet.
В большинстве других случаев объект DataView аналогичен объекту DataTable. Доступ к отдельным записям и полям представления осуществляется с помощью объекта DataRowView. Этот объект также поддерживает отношения между таблицами объекта DataSet.
Объект DataView имеет модель редактирования, аналогичную модели редактирования объекта DataTable. Указание значения True для свойств AllowNew, AllowEdit и AllowDelete означает разрешение на выполнение соответствующих операций редактирования (вставки, изменения и удаления). Методы BeginEdit и EndEdit и CancelEdit объекта DataRowView управляют внесением изменений в объект DataTable. Метод EndEdit вносит изменения в объект DataRow с версией Current. Эти изменения затем принимаются (или отвергаются) базовым объектом DataTable с помощью метода AcceptChanges (или RejectChanges).
Рассмотрим теперь, как описанные выше идеи применяются на практике. Создайте новую форму frmDataViews в проекте DataSetCode (готовая версия этой формы находится в каталоге с примерами главы 5, "ADO.NET: объект DataSet") для создания двух разных представлений одной таблицы Customers. Каждый объект DataGrid отображает данные представления и содержит кнопки управления сортировкой и фильтрацией. Для этого выполните перечисленные ниже действия.
1. В форме frmDataSets проекта DataSetCode создайте новую кнопку под кнопкой Data Adapter Updates.
2. В окне Properties укажите значение btnDataViews для свойства (Name) и значение Data Views для свойства Text этой кнопки.
3. Создайте новую форму.
4. В окне Properties укажите значение frmDataViews для свойства (Name) и значение Dueling Data Views для свойства Text новой формы Form1.
5. Увеличьте размер формы frmDataViews.
6. Создайте в правой части формы сетку данных DataGrid1, текстовое поле txtFilter1 с надписью, поле со списком cboSort1 и надписью, флажок chkDesc1 с надписью, поле со списком cboRowState1 и надписью, кнопку btnApply1, перетаскивая их из панели элементов управления.
7. В окне Properties укажите значение Descending для свойства Text флажка chkDesc1 и значение Apply для свойства Text кнопки btnApply1. Укажите значение DropDownList для свойства DropDownStyle полей со списком cboSort1 и cboRowState1. Укажите для свойства Text надписей значения by Column: и Row State.
8. Укажите значение Default Data View для свойства CaptionText сетки DataGrid1.
9. Расположите элементы управления так, как показано на рис. 7.2.
РИС. 7.2. Расположение элементов управления в верхней части формы frmDataViews
РИС. 7.З. Окончательный вид формы frmDataViews
10. Выберите все элементы управления и скопируйте их в нижнюю часть формы frmDataViews. Переименуйте все элементы управления (за исключением надписей) так, чтобы их имена заканчивались цифрой 2, а не 1 (например, btnApply2).
11. Укажите значение DataView2 для свойства CaptionText сетки DataGrid2.
Окончательный вид формы frmDataViews показан на рис. 7.3, а ее код представлен в листинге 7.6.
Листинг 7.6. Код создания двух объектов-сеток для отображения разных представлений одной таблицы данныхImports System
Imports System.Data
Imports System.Data.SqlClient
Public Class frmDataViews
Inherits System.Windows.Forms.Form
"Windows Form Designer generated code"
Private dsCustomers As New DataSet()
Private dvView2 As DataView
Private Sub frmDataViewS_Load(ByVal sender As System.Object, _
ByVal e As System.EventArgs) Handles MyBase.Load
Dim i As Integer
Dim col As DataColumn
' Инициализация объекта DataAdapter.
Dim daCustomers As SqlDataAdapter = New _
SqlDataAdapter("select * from tblCustomer", _
"server=localhost;uid=sa;database=novelty")
' Вставка данных только в ОДНУ таблицу.
daCustomers.Fill(dsCustomers, "Customers")
' Создание второго объекта DataView.
dvView2 = New DataView(dsCustomers.Tables("Customer"), _
"", "LastName", DataViewRowState.CurrentRows)
' Вставка списка из имен полей.

