Читать «ЯЗЫК ПРОГРАММИРОВАНИЯ С# 2005 И ПЛАТФОРМА .NET 2.0. 3-е издание» онлайн - страница 587

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

Работа с 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()