我在第2個階段解決了這個。
a。添加部分類和擴展表適配器
b。在使用這個適配器之前在開始時調用一個方法(比如在創建它的實例之後在主窗體中)。
下面的代碼是解決我與SQL CE的特定問題,以便能夠更新表上的ID。但是,您可以使用擴展方法來包裝RowUpdated事件,並暴露在其他類(即MyRowUpdated)
擴展
public partial class ScannedItemsTableAdapter
{
public void InitEvents()
{
this._adapter.RowUpdated += _adapter_RowUpdated;
}
void _adapter_RowUpdated(object sender, SqlCeRowUpdatedEventArgs e)
{
if (e.Status == UpdateStatus.Continue &&
e.StatementType == StatementType.Insert)
{
var pk = e.Row.Table.PrimaryKey;
pk[0].ReadOnly = false;
SqlCeCommand cmd = new SqlCeCommand("SELECT @@IDENTITY",
e.Command.Connection, e.Command.Transaction);
object id = (decimal)cmd.ExecuteScalar();
e.Row[pk[0]] = Convert.ToInt32(id);
e.Row.AcceptChanges();
}
}
}
在主窗體調用:
tableAdapter = new ScannedItemsTableAdapter();
tableAdapter.Fill(ds.ScannedItems);
tableAdapter.InitEvents();
如果你有機會把它放在適配器的創建後,我會把它那裏如果你有'InitializeComponent'方法它在容器類的構造函數中爲你做初始化,並在'InitializeComponent'調用之後立即執行代碼。 – Andreas 2010-07-14 06:46:36
我在這個問題上付出了一定的代價,因爲從.NET 1.1開始,我經常遇到這樣一個問題,我覺得在實例化它之後,必須有更好的解決方案,而不是竊聽表適配器。 – 2011-04-18 13:20:33
答案中提供的解決方案實用而且技術完善。 – 2013-01-23 13:16:46