如何添加事件处理程序到表适配器中的RowUpdated事件

我有一个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();

我有一个可能的选择。

虽然可以在tableadapter partial类中订阅tableadapters底层适配器,但我发现无法简单地初始化它,而无需记住调用自己的初始化。

不过,我发现我可以使用tableadpater直接从代码中订阅tableadapters.adapter.rowupdated事件,如下所示

AddHandler Me.TA_Case_Transactions.Adapter.RowUpdated, AddressOf Transaction_Row_Written

  Private Sub Transaction_Row_Written(p_Sender As Object, p_E As SqlRowUpdatedEventArgs)
        beep
    End Sub

“哔哔声是我可以为测试添加一个断点”

由于我不得不订阅这个活动,我认为这更直观,并且不需要任何“记忆”


编辑: 显然,下面建议的步骤都不是很有用。 我在这里单纯地保留这个答案,以便其他人试图回答它并不会提出相同的建议。


你在设计器中创建TableAdapter吗? 如果是这样,您是否可以不单击属性页面的Events部分,并在RowUpdated条目中键入“OnRowUpdated”?

如果您要在代码中明确创建适配器,请自行添加该调用。

或者,你的部分类是否有一个被调用的构造函数? 同样,如果是这样,您可以在那里添加呼叫。

编辑:好吧,大概这是用在一个特定的页面或窗体 - 你可以将它添加到该页面/窗体的InitializeComponent方法之后?

链接地址: http://www.djcxy.com/p/46905.html

上一篇: How do I Add an Event Handler To the RowUpdated event in a table adapter

下一篇: Why doesnt SIGINT get caught here?