ASP.net 操作ログ採取 ボタン等

○基底クラス作成

    /// 
    /// ログ採取などの共通処理
    /// 
    public class baseBasePage : System.Web.UI.Page
    {
        protected override void OnInit(EventArgs e)
        {
            base.OnInit(e);

            if (!IsPostBack)
            {                
                putLog(this.GetType().Name + " 初回表示");
            }
        }

        public override void RegisterRequiresRaiseEvent(System.Web.UI.IPostBackEventHandler control)
        {
            string str = string.Empty;

            if (control.GetType().Equals(typeof(Button)))
            {
                Button ctl = (Button)control;
                str += "ID=" + ctl.ID + " Txt=" + ctl.Text;
            }

            if (str != string.Empty)
            {
                str = this.GetType().Name + " - ■■■" + str + " (" + control.GetType().ToString() + ")";
                putLog(str);
            }

            base.RegisterRequiresRaiseEvent(control);
        }

        protected override void RaisePostBackEvent(System.Web.UI.IPostBackEventHandler sourceControl, string eventArgument)
        {
            string str = string.Empty;

            if (sourceControl.GetType().Equals(typeof(LinkButton)))
            {
                LinkButton ctl = (LinkButton)sourceControl;
                str += "ID=" + ctl.ID + " Txt=" + ctl.Text;
            }

            if (str != string.Empty)
            {
                str = this.GetType().Name + " - ■■■" + str + " (" + sourceControl.GetType().ToString() + ")";
                putLog(str);
            }

            base.RaisePostBackEvent(sourceControl, eventArgument);
        }

        public override void ProcessRequest(HttpContext context)
        {
            string key = string.Empty;

            key = "__CALLBACKID";
            if (context.Request.Params[key] != null)
            {
                putLog(MethodBase.GetCurrentMethod(), "■■■" + key + "=" + context.Request.Params[key]);
            }

            System.Diagnostics.Debug.Print("■context.Rezuest.Params cnt=" + context.Request.Params.Count.ToString());
            foreach (string s in context.Request.Params.Keys)
            {
                System.Diagnostics.Debug.Print(s + "=" + context.Request.Params[s]);
            }

            base.ProcessRequest(context);
        }
    }

ASP.net 操作ログ採取 TableAdapter拡張

○TableAdapterの基底クラスを作成

using System.ComponentModel;
using System.Data.SqlClient;
using System.Reflection;
using System.Web;

namespace Logic.dataset
{
    public class TableAdapterBase : Component
    {
        public SqlDataAdapter InnerAdapter
        {
            get
            {
                return (SqlDataAdapter)GetType().GetProperty("Adapter",
                  BindingFlags.NonPublic | BindingFlags.Instance).GetValue(this, null);
            }
        }
    }
}

○TableAdapterの基底クラスを変更

○イベントを設定

        public static void setTableAdapterUpdateLogEvent(Logic.dataset.TableAdapterBase ta)
        {
            ta.InnerAdapter.RowUpdated += new System.Data.SqlClient.SqlRowUpdatedEventHandler(Adapter_RowUpdated);
            //ta.InnerAdapter.RowUpdating += new System.Data.SqlClient.SqlRowUpdatingEventHandler(Adapter_RowUpdating);
        }

        private static void Adapter_RowUpdated(object sender, System.Data.SqlClient.SqlRowUpdatedEventArgs e)
        {
            putLog(e.Row);
        }

        //private static void Adapter_RowUpdating(object sender, System.Data.SqlClient.SqlRowUpdatingEventArgs e)
        //{
        //    putLog(e.Row);
        //}

※dt.Update()系は拾えるが、dt.Delete()系はダメ。Update()でDeleteしていたら拾える?