【问题标题】:RowChanged Event Fires and Throws an Error During DataAdapter.Fill(DataTable)RowChanged 事件在 DataAdapter.Fill(DataTable) 期间触发并引发错误
【发布时间】:2011-03-12 03:35:17
【问题描述】:

在我的表单代码顶部,我有以下语句(以及其他一些不相关的语句):

Dim LastDataRow As DataRow
Public Event RowChanged As DataRowChangeEventHandler  

当我的表单加载时,我运行以下代码行:

AddHandler dt.RowChanged, New DataRowChangeEventHandler(AddressOf Row_Changed)

表单加载后,我有一个 FetchData 按钮,该按钮连接到数据库并将记录带入数据表对象。在此填充操作期间,我的 Row_Changed 事件触发(对于我认为的每条记录)并尝试运行 DataAdapter.Update(DataTable) (伪代码),但最终失败,因为我没有尚未创建命令。我在 Row_Changed 过程中遇到的错误是:

在传递带有新行的 DataRow 集合时,更新需要有效的 InsertCommand。

我什至根本没有计划使用 InsertCommand,因为我不允许用户从这个表单插入记录。我确实计划允许他们删除或修改现有记录,但不插入新记录。

到目前为止,我发现解决此问题的唯一方法是在填充数据表后运行我的 AddHandler 语句。但是,我正在尝试弄清楚如何重写我的代码,以便我可以刷新数据表,而无需关闭表单/应用程序并不得不再次打开它。我认为这是一个单独讨论的问题。

知道为什么我会收到上述错误消息吗?

【问题讨论】:

    标签: vb.net datatable


    【解决方案1】:

    您可以在调用填充操作之前RemoveHandler,这样就不会调用更新。填充操作完成后,您可以重新添加处理程序。

    RemoveHandler
    da.Fill(dt)
    AddHandler
    

    【讨论】:

    • 我假设您的代码过于简单。我是否需要指定要删除和添加的处理程序?
    • @HK1 是的,它被简化了。我正在用手机打字,所以很难输入整个内容,但如果需要语法,您可以查找添加和删除处理程序。
    猜你喜欢
    • 1970-01-01
    • 2014-04-01
    • 1970-01-01
    • 1970-01-01
    • 2011-08-25
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多