Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
Разработка приложений баз данных (Visual Studio 2008).docx
Скачиваний:
143
Добавлен:
26.03.2016
Размер:
1.01 Mб
Скачать

Последовательность операций

При добавлении, изменении или удалении объекта DataRow надо выполнить следующую последовательность операций.

  1. Создайте предложенную запись и внесите любые изменения.

  2. Проверьте ограничения для столбцов, не входящих в выражения.

  3. Вызовите событие RowChanging или RowDeleting, в зависимости от ситуации.

  4. Сделайте предложенную запись текущей.

  5. Обновите все ассоциированные индексы.

  6. Вызовите события ListChanged для ассоциированных объектов DataView, а также события PropertyChanged для ассоциированных объектов DataRowView.

  7. Оцените все столбцы выражения, но отложите проверку любых ограничений для этих столбцов.

  8. Вызовите события ListChanged для ассоциированных объектов DataView, а также события PropertyChanged для ассоциированных объектов DataRowView, затронутых оценками столбцов выражения.

  9. Вызовите событие RowChanged или RowDeleted, в зависимости от ситуации.

  10. Проверьте ограничения на столбцы выражения.

Примечание.

Внесение изменений в столбцы выражений никогда не вызывает события DataTable. Внесение изменений в столбцы выражений вызывает только события DataView и DataRowView. Столбцы выражения могут иметь зависимости от нескольких других столбцов, их оценка во время одной операции DataRow может производиться несколько раз. Оценка каждого выражения вызывает события, а когда затронуты столбцы выражений, одна операция DataRow может вызвать несколько событий ListChanged и PropertyChanged, возможно, с несколькими событиями для одного столбца выражений.

Пример

В следующем примере демонстрируется, как создавать обработчики событий для событий RowChanged, RowChanging, RowDeleted, RowDeleting, ColumnChanged, ColumnChanging, TableNewRow, TableCleared и TableClearing. Каждый обработчик события при возникновении события отображает выводимые данные в консольном окне.

Язык C#

static void DataTableEvents()

{

DataTable table = new DataTable("Customers");

// Add two columns, id and name.

table.Columns.Add("id", typeof(int));

table.Columns.Add("name", typeof(string));

// Set the primary key.

table.Columns["id"].Unique = true;

table.PrimaryKey = new DataColumn[] { table.Columns["id"] };

// Add a RowChanged event handler.

table.RowChanged += new DataRowChangeEventHandler(Row_Changed);

// Add a RowChanging event handler.

table.RowChanging += new DataRowChangeEventHandler(Row_Changing);

// Add a RowDeleted event handler.

table.RowDeleted += new DataRowChangeEventHandler(Row_Deleted);

// Add a RowDeleting event handler.

table.RowDeleting += new DataRowChangeEventHandler(Row_Deleting);

// Add a ColumnChanged event handler.

table.ColumnChanged += new

DataColumnChangeEventHandler(Column_Changed);

// Add a ColumnChanging event handler.

table.ColumnChanging += new

DataColumnChangeEventHandler(Column_Changing);

// Add a TableNewRow event handler.

table.TableNewRow += new

DataTableNewRowEventHandler(Table_NewRow);

// Add a TableCleared event handler.

table.TableCleared += new

DataTableClearEventHandler(Table_Cleared);

// Add a TableClearing event handler.

table.TableClearing += new

DataTableClearEventHandler(Table_Clearing);

// Add a customer.

DataRow row = table.NewRow();

row["id"] = 1;

row["name"] = "Customer1";

table.Rows.Add(row);

table.AcceptChanges();

// Change the customer name.

table.Rows[0]["name"] = "ChangedCustomer1";

// Delete the row.

table.Rows[0].Delete();

// Clear the table.

table.Clear();

}

private static void Row_Changed(object sender, DataRowChangeEventArgs e)

{

Console.WriteLine("Row_Changed Event: name={0}; action={1}",

e.Row["name"], e.Action);

}

private static void Row_Changing(object sender, DataRowChangeEventArgs e)

{

Console.WriteLine("Row_Changing Event: name={0}; action={1}",

e.Row["name"], e.Action);

}

private static void Row_Deleted(object sender, DataRowChangeEventArgs e)

{

Console.WriteLine("Row_Deleted Event: name={0}; action={1}",

e.Row["name", DataRowVersion.Original], e.Action);

}

private static void Row_Deleting(object sender,

DataRowChangeEventArgs e)

{

Console.WriteLine("Row_Deleting Event: name={0}; action={1}",

e.Row["name"], e.Action);

}

private static void Column_Changed(object sender, DataColumnChangeEventArgs e)

{

Console.WriteLine("Column_Changed Event: ColumnName={0}; RowState={1}",

e.Column.ColumnName, e.Row.RowState);

}

private static void Column_Changing(object sender, DataColumnChangeEventArgs e)

{

Console.WriteLine("Column_Changing Event: ColumnName={0}; RowState={1}",

e.Column.ColumnName, e.Row.RowState);

}

private static void Table_NewRow(object sender,

DataTableNewRowEventArgs e)

{

Console.WriteLine("Table_NewRow Event: RowState={0}",

e.Row.RowState.ToString());

}

private static void Table_Cleared(object sender, DataTableClearEventArgs e)

{

Console.WriteLine("Table_Cleared Event: TableName={0}; Rows={1}",

e.TableName, e.Table.Rows.Count.ToString());

}

private static void Table_Clearing(object sender, DataTableClearEventArgs e)

{

Console.WriteLine("Table_Clearing Event: TableName={0}; Rows={1}",

e.TableName, e.Table.Rows.Count.ToString());

}

См. также:

Основные понятия

Обработка событий DataAdapter (ADO.NET)

Обработка событий DataSet (ADO.NET)

Другие ресурсы

Обработка данных в DataTable