我有一个tableadapter,我想在触发RowUpdated事件时做一些事情.我无法弄清楚将代码添加到事件的处理器的位置.
public partial class MyTableAdapter
{
void OnRowUpdated(object sender,System.Data.Odbc.OdbcRowUpdatedEventArgs e)
{
}
}
如何在创建TableAdapter时运行以下代码?
Adapter.RowUpdated +=
new System.Data.Odbc.OdbcRowUpdatedEventHandler(OnRowUpdated);
解决方法
我分两个阶段解决了这个问题.
一个.添加部分类和扩展表适配器
湾在使用此适配器之前调用一个方法(在创建它的实例后以主窗体表示).
下面的代码是用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();