using System;
using System.Data;
namespace DataRowsApplication00
{
class DataTester
{
DataTable custTable;
public void DTBuild()
{
custTable = new DataTable("Customers");
// Добавляем столбики.
custTable.Columns.Add("id", typeof(int));
custTable.Columns.Add("name", typeof(string));
// Определяем первичный ключ.
custTable.Columns["id"].Unique = true;
custTable.PrimaryKey = new DataColumn[] { custTable.Columns["id"] };
// Добавляем RowChanging event handler для нашей таблицы.
custTable.RowChanging += new DataRowChangeEventHandler(Row_Changing);
// Добавляем a RowChanged event handler для нашей таблицы.
custTable.RowChanged += new DataRowChangeEventHandler(Row_Changed);
}
public void RowsAdd(int id)
{
int x;
// Добавляем строки.
for (x = 0; x < id; x++)
{
custTable.Rows.Add(new object[] { x, string.Format("customer{0}", x) });
}
// Фиксируются все изменения, которые были произведены над таблицей
// со времени последнего вызова AcceptChanges.
custTable.AcceptChanges();
}
public void RowsChange()
{
// Изменяем значение поля name во всех строках.
// Все имена убираются, а на их место
// подставляется буквосочетание, состоящее из
// префикса vip и старого значения строки каждого клиента.
// Была строка customer5 – стала vip customer5.
foreach (DataRow row in custTable.Rows)
{
row["name"] = string.Format("vip {0}", row["id"]);
}
}
// И после вмешательства результаты становятся известны
// обработчику события Row_Changing. А толку-то...
private static void Row_Changing(object sender, DataRowChangeEventArgs e)
{
Console.WriteLine("Row_Changing Event: name={0}; action={1}",
e.Row["name"],
e.Action);
}
// Аналогично устроен обработчик Row_Changed.
private static void Row_Changed(object sender, DataRowChangeEventArgs e)
{
Console.WriteLine("Row_Changed Event: name={0}; action={1}",
e.Row["name"],
e.Action);
}
}
class Program
{
static void Main(string[] args)
{
DataTester dt = new DataTester();
dt.DTBuild();
dt.RowsAdd(10);
dt.RowsChange();
}
}
} |
Листинг 18.1. |
| Закрыть окно |