Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
Троелсен Э. Язык программирования С# 2010 и п...docx
Скачиваний:
113
Добавлен:
21.09.2019
Размер:
6.92 Mб
Скачать

Свойство 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";

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

 carRow["PetName"] = "Hamlet";

 inveritoryTable.Rows.Add(carRow);

 // Выводит 'Состояние строки: Added.'

 Console.WriteLine("Состояние строки: {0}.",

 inventoryTable.Rows[0].RowState);

}

Как видите, DataRow в ADO.NET является достаточно "сообразительным" для того, чтобы контролировать текущее положение вещей. Поэтому, имея DataTable, вы можете выяснить, какие строки были изменены. Эта особенность DataSet очень важна, поскольку именно она при отправке обновленной информации в хранилище данных позволяет отправлять только измененные данные.

Работа с DataTable

Тип DataTable определяет большое количество членов, многие из которых по именам и возможностям идентичны членам DataSet. В табл. 22.14 предлагаются описания основных свойств типа DataTable, за исключением Rows и Columns.

Таблица 22.14. Основные свойства типа DataTable

Свойство

Описание

CaseSensitive

Индикатор необходимости учета регистра символов при сравнении строк в пределах таблицы. Значением по умолчанию является false (ложь)

ChildRelations

Возвращает коллекцию дочерних отношений для данного объекта DataTable (если таковые имеются)

Constraints

Возвращает коллекцию ограничений, поддерживаемых таблицей

DataSet

Возвращает объект DataSet, содержащий данную таблицу (если таковой имеется)

DefaultView

Возвращает пользовательское представление таблицы, которое может включать фильтр или позицию курсора

MinimumCapacity

Читает или устанавливает значение для начального числа строк данной таблицы (это значение по умолчанию равно 25)

ParentRelations

Возвращает коллекцию родительских отношений для данного объекта DataTable

PrimaryKey

Читает или устанавливает массив столбцов, функционирующих в качестве первичных ключей для таблицы данных

RemotingFormat

Позволяет определить, как объект DataSet должен выполнять сериализацию соответствующего содержимого (в двоичном или XML-формате) для слоя удаленного взаимодействия .NET. Это свойство появилось в .NET 2.0

TableName

Читает или устанавливает имя таблицы. Это же свойство может быть указано в качестве параметра конструктора

В нашем примере мы установим свойство PrimaryKey типа DataTable равным объекту carIDColumn типа DataColumn.

static void Main(string[] args) {

 …

 // Установка первичного ключа для таблицы.

 inventoryTable.PrimaryKey = new DataColumn[] { inventoryTable.Columns[0] };

}

На этом создание примера для DataTable завершается. Заключительным шагом будет вставка DataTable в DataSet-объект carsInventoryDS. Затем объект DataSet нужно оформлять вспомогательному методу PrintDataSet() (который ещё предстоит написать).

static void Main(string[] args) {

 …

 // Наконец, добавление таблицы в DataSet.

 carsInventoryDS.Tables.Add(inventoryTable);

 // Теперь вывод данных DataSet.

 PrintDataSet(carsInventoryDS);

}

Метод PrintDataSet() просто выполняет цикл по всем DataTable из DataSet. печатая имена столбцов и значения строк с помощью индексатора типа.

static void PrintDataSet(DataSet ds) {

 Console.WriteLine("Таблицы в DataSet '{0}'.\n", ds.DataSetName);

 foreach (DataTable dt in ds.Tables) {

  Console.WriteLine("Таблица {0}.\n", dt.TableName);

  // Вывод имен столбцов.

  for (int curCol = 0; curCol ‹ dt.Coumns.Count; curCol++) {

   Console.Write(dt.Columns[curCol].ColumnName.Trim() + ''\t");

  }

  Console.WriteLine("\n--------------------------------");

  // Вывод DataTable.

  for (int curRow = 0; curRow ‹ dt.Rows.Count; curRow++) {

   for (int curCol = 0; curCol ‹ dt.Columns.Count; curCol++) {

    Console.Write(dt.Rows[curRow][curCol.ToString() + "\t");

   }

   Console.WriteLine();

  }

 }

}

Вывод программы показан на рис. 22.12.

Рис. 22.12. Содержимое объекта DataSet примера