using System;
using System.Data;
namespace DataColumnsApplication00
{
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"] };
// Добавление события ColumnChanging handler для таблицы.
custTable.ColumnChanging +=
new DataColumnChangeEventHandler(Column_Changing);
// Добавление события ColumnChanged event handler для таблицы.
custTable.ColumnChanged +=
new DataColumnChangeEventHandler(Column_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 во всех строках.
foreach (DataRow row in custTable.Rows)
{
row["name"] = string.Format("vip{0}", row["id"]);
}
}
// И после вмешательства результаты становятся известны
// обработчику события Column_Changing. А толку-то...
private static void Column_Changing
(object sender, DataColumnChangeEventArgs e)
{
Console.WriteLine
("Column_Changing Event: name={0}; Column={1}; proposed name={2}",
e.Row["name"],
e.Column.ColumnName,
e.ProposedValue);
}
// Аналогично устроен обработчик Column_Changed.
private static void Column_Changed
(object sender, DataColumnChangeEventArgs e)
{
Console.WriteLine
("Column_Changed Event: name={0}; Column={1}; proposed name={2}",
e.Row["name"],
e.Column.ColumnName,
e.ProposedValue);
}
}
class Program
{
static void Main(string[] args)
{
DataTester dt = new DataTester();
dt.DTBuild();
dt.RowsAdd(10);
dt.RowsChange();
}
}
} |
Листинг 18.2. |
| Закрыть окно |