○TableAdapterの基底クラスを作成
using System.ComponentModel; using System.Data.SqlClient; using System.Reflection; using System.Web; using System; namespace Logic.dataset { public class TableAdapterBase : Component { public SqlDataAdapter InnerAdapter { get { return (SqlDataAdapter)GetType().GetProperty("Adapter", BindingFlags.NonPublic | BindingFlags.Instance).GetValue(this, null); } } static public event SqlRowUpdatedEventHandler sqlRowUpdatedEvent = delegate { }; static public event SqlRowUpdatingEventHandler sqlRowUpdatingEvent = delegate { }; public TableAdapterBase() : base() { InnerAdapter.RowUpdated += rowUpdatedEventHandler; InnerAdapter.RowUpdating += rowUpdatingEventHandler; } private void rowUpdatedEventHandler(object sender, SqlRowUpdatedEventArgs e) { sqlRowUpdatedEvent(sender, e); } private void rowUpdatingEventHandler(object sender, SqlRowUpdatingEventArgs e) { sqlRowUpdatingEvent(sender, e); } } }
○イベントを設定
・Page_Load部 Logic.dataset.TableAdapterBase.sqlRowUpdatedEvent += putLogSqlRowUpdatedHandler; ・Page_Unload部 Logic.dataset.TableAdapterBase.sqlRowUpdatedEvent -= putLogSqlRowUpdatedHandler; private static void putLogSqlRowUpdatedHandler(object sender, System.Data.SqlClient.SqlRowUpdatedEventArgs e) { putLog(e.Row); } private static void putLogSqlRowUpdatingHandler(object sender, System.Data.SqlClient.SqlRowUpdatingEventArgs e) { //putLog(e.Row); }
※dt.Update()系は拾えるが、dt.Delete()系はダメ。Update()でDeleteしていたら拾える?
SqlDataAdapterはsealedの為、拡張できない。。。