Categories

Links

OnTableNewRow 的怪异举止

显然,同一般的.net OnXX行为不同 ,通常的OnXX 会检查XX事件是否有设置,有的话就执行.

这段代码在DataTable.NewRow 中被调用









private void NewRowCreated(DataRow row)
{
if (this.onTableNewRowDelegate != null)
{
DataTableNewRowEventArgs e = new DataTableNewRowEventArgs(row);
this.OnTableNewRow(e);
}
}









protected virtual void OnTableNewRow(DataTableNewRowEventArgs e)
{
if (this.onTableNewRowDelegate != null)
{
Bid.Trace("<ds.DataTable.OnTableNewRow|INFO> %d#\n", this.ObjectID);
this.onTableNewRowDelegate(this, e);
}
}



大家可以看到,NewRowCreated中在检查onTableNewRowDelegate了,如果这个没有设置,则OnTableNewRow是不会被触发的,因此, 比方说你想要一个自定义的事件,比方说 NewEntity ,你无法在OnTableNewRow来挂接它. 你要先挂接TableNewRow事件,然后这个OnTableNewRow才能生效.这不是开玩笑吗?
      //protected override void OnTableNewRow(DataTableNewRowEventArgs e)
        //{
        //    base.OnTableNewRow(e);
        //    if (this.NewEntity != null)
        //        this.NewEntity(this, new NewEntityEventArgs<T>((T)e.Row));
        //}

[2007-11-11 10:43:01 | jiangjianxiao]

comments


Powered by Google App Engine