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

标签 c# ado.net

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

关于c# - 如何将事件处理程序添加到表适配器中的 RowUpdated 事件,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/3243881/

相关文章:

c# - 更新条目时出错 - 字符串或二进制数据将被截断

c# - 如何在 A 列或 B 列上加入 Linq 查询

c# - 使用自定义表情符号 Windows Phone

c# - 从数据库自动更新

entity-framework - 如何在 Entity Framework 中使用 SSDL 中的定义查询?优点和例子会有帮助

c# - 违反 PRIMARY KEY 约束。无法在对象中插入重复的键

oracle - TransactionScope 和存储过程?

c# - C#3 和 4 中扩展方法的区别

c# - 使用带有参数的文本资源?

c# - 在 ASP.NET Core 2 和 Entity Framework Core 2 中查询表中的附近位置