加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 百科 > 正文

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

发布时间:2020-12-15 17:13:35 所属栏目:百科 来源:网络整理
导读:我有一个tableadapter,我想在触发RowUpdated事件时做一些事情.我无法弄清楚将代码添加到事件的处理器的位置. public partial class MyTableAdapter{ void OnRowUpdated(object sender,System.Data.Odbc.OdbcRowUpdatedEventArgs e) { }} 如何在创建TableAdap
我有一个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();

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读