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

前端之家收集整理的这篇文章主要介绍了c# – 如何将事件处理程序添加到表适配器中的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();

猜你在找的C#相关文章