C# 如何在行之后激发DataTableNewRowEvent。添加

C# 如何在行之后激发DataTableNewRowEvent。添加,c#,winforms,events,datatable,newrow,C#,Winforms,Events,Datatable,Newrow,现在我有 var row = container.Tables[name].NewRow(); row[0] = time; row[1] = val; container.Tables[name].Rows.Add(row); 当然,事件DataTableNewRowEvent在第一行激发。但我需要在最后一行之后触发它们,我的意思是在将新行添加到RowsCollection之后。怎么做?我需要它在触发DataTableNewRowEvent 我想到: //to insert proper d

现在我有

var row = container.Tables[name].NewRow();
row[0] = time;
row[1] = val;
container.Tables[name].Rows.Add(row);
当然,事件
DataTableNewRowEvent
在第一行激发。但我需要在最后一行之后触发它们,我的意思是在将新行添加到
RowsCollection
之后。怎么做?我需要它在触发
DataTableNewRowEvent

我想到:

//to insert proper data
var row = container.Tables[name].NewRow();
row[0] = time;
row[1] = val;
container.Tables[name].Rows.Add(row);
//to fire event
container.Tables[name].Rows.Remove(container.Tables[name].NewRow());

但这可能不是最好的解决方案。

我认为您最好处理
DataTable
上的
RowChanged
事件,您将得到一个类型为
DataRowChangeEventArgs
的参数,该参数有一个
DataRowAction
属性,让您知道行上实际发生的更改,
Add
是可能的值之一

您的处理程序看起来像这样

protected void DataTable_RowChanged(object sender, DataRowChangeEventArgs e)
{
    if (e.Action == DataRowAction.Add)
    {
        // Do something with e.Row which is already populated
    }
}

DataTableNewRowEvent事件在内部激发

protected virtual void OnTableNewRow(DataTableNewRowEventArgs e);
此方法仅在DataTable类的NewRow方法中调用。如果希望在不同的时间触发事件,除了继承DataTable类之外,唯一的解决方案是使用反射

MethodInfo mi = (typeof(DataTable)).GetMethod("OnTableNewRow", BindingFlags.Instance | BindingFlags.NonPublic);

// ...

mi.Invoke(container.Tables[name], new object[] { new DataTableNewRowEventArgs(row) }); // fire the event as you please

您是否要立即添加和删除新行?@Saint为什么不能在需要时绑定和解除绑定事件?@Habib.OSU这是一种非常有技巧的编程方式。@MonsterTruck,是的,但是。。其他选项是什么?我不知道DataRowChangeEvent也指添加新行。塔克斯