static void Main(string[] args) {
…
// Добавление DataColumn в DataTable.
DataTable inventoryTable = new DataTable("Inventory");
inventoryTable.Columns.AddRange(new DataColumn[] {
carIDColumn; carMakeColumn, carColorColumn, carPetNameColumn
});
}
Вы видели, что коллекция объектов 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.
Таблица 22.13.Значения перечня DataRowState
Значение |
Описание |
Added |
Строка была добавлена в DataRowCollection, но метод AcceptChanges() не вызывался |
Deleted |
Строка была удалена с помощью метода Delete() объекта DataRow |
Detached |
Строка была создана, но не является частью коллекции DataRowСollection. Объект DataRow находится в этом состоянии после своего создания до того, как будет добавлен к коллекции (или же после удаления этого объекта из коллекции) |
Modified |
Строка была изменена, но метод AcceptChanges() не вызывался |
Unchanged |
Строка не изменилась со времени последнего вызова AcceptChanges() |
Во время программных манипуляций строками объекта DataTable свойство RowState устанавливается автоматически.
static void Маin(string[] args) {
…
DataRow carRow = InventoryTable.NewRow();
// Выводит 'Состояние строки: Detached.'
Console.WriteLine("Сoстояние строки: {0}.", carRow.RowState);
carRow["Make"] = "BMW";
Читать дальше