在.Net中正确删除数据表中的行

时间:2016-05-24 04:22:38

标签: .net vb.net datatable

基本上,我有一个MySQL数据库我将数据从表的一列绑定到ListBox ..我想允许用户添加/编辑/删除项目并能够保存/拒绝更改

要删除,我希望用户能够删除ListBox中的所选项目..这是我迄今为止所尝试的内容

(1)dt.Rows(lst.SelectedIndex).Delete()

但是这实际上并没有从DataTable中删除该行,直到使用DataAdapter.Update方法更新它,因此ListBox中的下一个索引将引用DataTable中的已删除行。

(2):dt.Rows.RemoveAt(lst.SelectedIndex)

这样可以正常使用,但在更新DataTable时(用户点击save后),删除的行甚至都不会被删除。

(3)尝试呼叫AcceptChanges

    dt.Rows(lst.SelectedIndex).Delete()
    dt.AcceptChanges()

我得到与上面第二个相同的结果。

以下是我最终更新DataTable的方法:

    Dim cmdBldr As New MySqlCommandBuilder(da)
    da.Update(dt)

那么,有没有办法允许用户在更新之前向DataTable添加/删除任意数量的行?

1 个答案:

答案 0 :(得分:3)

DataTable绑定到BindingSource(您将在设计器中添加)并将其绑定到ListBox。然后,您可以通过调用RemoveCurrent上的BindingSource来删除所选记录。这会将该行标记为Deleted,它将被BindingSource排除。

不要在任何事情上致电AcceptChanges。这样做会向数据适配器指示没有要保存的更改。在数据适配器上调用Update以将更改从DataTable保存回数据库。这将在成功保存后在内部调用AcceptChanges。调用AcceptChanges后,标记为Deleted的所有行都会从DataTable中删除,而标记为AddedModified的所有行都会标记为Unchanged