2012-05-30 45 views
1

火災後DataTableNewRowEvent現在我有如何Rows.Add

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

當然事件DataTableNewRowEvent的第一行被激發。但是我需要在最後一行之後解僱他們,我的意思是在添加新行到RowsCollection之後。如何做到這一點?我需要它在射擊DataTableNewRowEvent

的時刻得到DataTable實際數據我想:

//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()); 

但也許它不是最好的解決辦法。

+0

您是否正在添加和刪除新行? –

+0

@Saint爲什麼你不能綁定和解綁事件? – Habib

+0

@ Habib.OSU這是一個非常hacky的編程方式。 –

回答

8

我想你最好在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 
    } 
} 
+0

我不知道DataRowChangeEvent還指向添加新行。感謝名單 – Saint

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