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. |
Закрыть окно |