Чтение онлайн

на главную - закладки

Жанры

ЯЗЫК ПРОГРАММИРОВАНИЯ С# 2005 И ПЛАТФОРМА .NET 2.0. 3-е издание

Троелсен Эндрю

Шрифт:

static void Main(string[] args) {

 …

 // Создание объектов DataColumn, отображающих 'реальные'

 // столбцы таблицы Inventory из базы данных Cars.

 DataColumn carIDColumn = new DataColumn("CarID", typeof(int));

 carIDColumn.Caption = "Номер";

 carIDColumn.ReadOnly = true;

 carIDColumn.AllowDBNull = false;

 carIDColumn.Unique = true;

 DataColumn carMakeColumn = new DataColumn("Make", typeof(string));

 DataColumn carColorColumn = new DataColumn("Color", typeof(string));

 DataColumn carPetNameColumn = new DataColumn("PetName", typeof(string));

 carPetNameColumn.Caption = "Название";

}

Разрешение

автоприращения для полей

Одной из возможностей DataColumn, которая может Вам понадобиться, будет возможность автоприращения. Автоприращение используется для того, чтобы при добавлении новой строки столбцу автоматически присваивалось значение, вычисленное на основе заданного приращения. Это может оказаться полезным тогда, когда вы хотите, чтобы столбец не имел повторяющихся значений (например, как первичный ключ).

Соответствующим поведением можно управлять с помощью свойств AutoIncrement, AutoIncrementSeed и AutoIncrementStep. Значение AutoIncrementSeed используется для начального значения столбца, а значение AutoIncrementStер задает число, которое следует добавить к AutoIncrementSeed, когда выполняется приращение. Рассмотрите следующую модификацию конструкции объекта carIDColumn типа DataColumn.

static void Main(sting[] args) {

 …

 DataColumn carIDColumn = new DataColumn("CarID", typeof(int));

 carIDColumn.ReadOnly = true;

 CarIDColumn.Caption = "Номер";

 CarIDColumn.AllowDBNull = false;

 carIDColumn.Unique = true;

 carIDColumn.AutoIncrement = true;

 carIDColumn.AutoIncrementSeed = 0;

 catIDColumn.AutoIncrementStep = 1;

}

Здесь объект объект carIDColumn сконфигурирован так, чтобы при добавлении строк в соответствующую таблицу значение данного столбца увеличивалось на 1. Начальным значением является 0, поэтому для столбца будут выбираться числа 0, 1, 2. 3 и т.д.

Добавление DataColumn в DataTable

Тип DataColumn обычно не существует автономно, а добавляется в соответствующий объект DataTable.Для примера создайте новый тип DataTable (подробности будут предложены чуть позже) и вставьте объекты DataColumn в коллекцию) столбцов, используя свойство Columns.

static void Main(string[] args) {

 …

 // Добавление DataColumn в DataTable.

 DataTable inventoryTable = new DataTable("Inventory");

 inventoryTable.Columns.AddRange(new DataColumn[] {

carIDColumn; carMakeColumn, carColorColumn, carPetNameColumn

 });

}

Работа с DataRow

Вы видели, что коллекция объектов DataColumn представляет структуру DataTable. Коллекция типов DataRow представляет фактические данные таблицы. Поэтому если у вас в таблице Inventory базы данных Cars содержится 20 записей, вы можете представить эти записи с помощью 20 типов DataRow. Используя члены класса DataRow, можно вставлять, удалять оценивать и перемещать значения таблицы. Описания некоторых (но не всех) членов типа DataRow предлагаются

в табл. 22.12.

Таблица 22.12. Основные члены типа DataRow

Члены Описание
HasErrors GetColumnsInError GetColumnError ClearErrors RowError Свойство HasErrors возвращает булево значение, являющееся индикатором наличия ошибок. В этом случае можно использовать метод GetColumnslnError, чтобы получить информацию о членах, порождающих проблемы, метод GetColumnError, чтобы получить описание ошибки, и метод ClearErrors, удаляющий ошибки для данной строки. Свойство RowError позволяет задать текстовое описание ошибки для данной строки
ItemArray Свойство, возвращающее или устанавливающее значения для данной строки с помощью массива объектов
RowState Свойство, используемое для выяснения текущего "состояния" DataRow с помощью значений из перечня RowState
Table Свойство, используемое для получения ссылки на DataTable, содержащий данный объект DataRow
AcceptChanges RejectChanges Эти методы, соответственно, фиксируют или отвергают все изменения, сделанные в данной строке с момента последнего вызова AcceptChanges
BeginEdit EndEdit CancelEdit Эти методы, соответственно, начинают, завершают или отменяют операции редактирования для объекта DataRow
Delete Метод, помечающий данную строку для удаления при вызове метода AcceptChanges
IsNull Метод, возвращающий значение-индикатор того, что данный столбец содержит значение null

Работа с DataRow немного отличается от работы с DataColumn, поскольку вы не можете создать напрямую экземпляр этого типа, а получаете ссылку от данного DataTable. Предположим, например, что нам нужно вставить две строки в таблицу Inventory. Метод DataTable.NewRow позволяет добавить очередную строку в таблицу, а затем вы можете добавить в каждый столбец новые данные с помощью индексатора типа, как показано ниже.

static void Main(string[] args) {

 …

 // Добавление строк в таблицу Inventory.

 DataRow carRow = inventoryTable.NewRow;

 carRow["Make"] = "BMW";

 carRow["Colar"] = "черный";

 сarRow["PetName"] = "Hamlet";

 inventoryTable.Rows.Add(carRow);

 carRow = inventoryTable.NewRow;

 carRow["Make"] = "Saab";

 carRow["Color"] = "красный";

 carRow["PetName"] = "Sea Breeze";

 inventoryTable.Rows.Add(carRow);

}

Обратите внимание на то, что класс DataRow определяет индексатор, который может использоваться для получения доступа к данному объекту DataColumn как по числовому индексу позиции, так и по имени столбца. В результате выполнения указанных строк программного кода вы получите один объект DataTable, содержащий два столбца.

Свойство DataRow.RowState

Свойство RowState оказывается полезным тогда, когда необходимо программно идентифицировать набор всех строк в таблице, которая, например, была изменена, только что создана и т.д. Это свойство может принимать любое значение из перечня DataRowState. Описания этих значений предлагаются в табл. 22.13.

Поделиться:
Популярные книги

Отмороженный 8.0

Гарцевич Евгений Александрович
8. Отмороженный
Фантастика:
постапокалипсис
рпг
аниме
5.00
рейтинг книги
Отмороженный 8.0

Газлайтер. Том 14

Володин Григорий Григорьевич
14. История Телепата
Фантастика:
попаданцы
аниме
фэнтези
5.00
рейтинг книги
Газлайтер. Том 14

Ермак. Телохранитель

Валериев Игорь
2. Ермак
Фантастика:
альтернативная история
7.00
рейтинг книги
Ермак. Телохранитель

Матабар IV

Клеванский Кирилл Сергеевич
4. Матабар
Фантастика:
фэнтези
5.00
рейтинг книги
Матабар IV

Сборник коротких эротических рассказов

Коллектив авторов
Любовные романы:
эро литература
love action
7.25
рейтинг книги
Сборник коротких эротических рассказов

Идеальный мир для Лекаря 19

Сапфир Олег
19. Лекарь
Фантастика:
юмористическое фэнтези
аниме
5.00
рейтинг книги
Идеальный мир для Лекаря 19

Дочь моего друга

Тоцка Тала
2. Айдаровы
Любовные романы:
современные любовные романы
эро литература
5.00
рейтинг книги
Дочь моего друга

Свет Черной Звезды

Звездная Елена
6. Катриона
Любовные романы:
любовно-фантастические романы
5.50
рейтинг книги
Свет Черной Звезды

Кодекс Крови. Книга IV

Борзых М.
4. РОС: Кодекс Крови
Фантастика:
фэнтези
попаданцы
аниме
5.00
рейтинг книги
Кодекс Крови. Книга IV

Идеальный мир для Лекаря 22

Сапфир Олег
22. Лекарь
Фантастика:
юмористическое фэнтези
аниме
фэнтези
5.00
рейтинг книги
Идеальный мир для Лекаря 22

Попаданка в академии драконов 4

Свадьбина Любовь
4. Попаданка в академии драконов
Любовные романы:
любовно-фантастические романы
7.47
рейтинг книги
Попаданка в академии драконов 4

Сердце Дракона. Том 12

Клеванский Кирилл Сергеевич
12. Сердце дракона
Фантастика:
фэнтези
героическая фантастика
боевая фантастика
7.29
рейтинг книги
Сердце Дракона. Том 12

Лолита

Набоков Владимир Владимирович
Проза:
классическая проза
современная проза
8.05
рейтинг книги
Лолита

Сводный гад

Рам Янка
2. Самбисты
Любовные романы:
современные любовные романы
эро литература
5.00
рейтинг книги
Сводный гад