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

RowChangedでイベントを処理したほうがよいと思います。行で実際に行われた変更を知らせるプロパティを持つDataTable型のパラメーターを取得します。これは可能な値の 1 つです。DataRowChangeEventArgsDataRowActionAdd

ハンドラーは次のようになります

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 に答える