4

我现在有

var row = container.Tables[name].NewRow();
row[0] = time;
row[1] = val;
container.Tables[name].Rows.Add(row);

当然,事件DataTableNewRowEvent是在第一行触发的。但我需要在最后一行之后解雇他们,我的意思是在添加新行到RowsCollection. 怎么做?DataTable我需要它在发射时获取实际数据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());

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

4

2 回答 2

11

我认为您最好处理RowChangedon 上的事件DataTable,您将获得一个类型的参数,该参数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
    }
}
于 2012-05-30T12:58:20.520 回答
0

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
于 2012-05-30T13:02:58.290 回答