基本上,我有一个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添加/删除任意数量的行?
答案 0 :(得分:3)
将DataTable
绑定到BindingSource
(您将在设计器中添加)并将其绑定到ListBox
。然后,您可以通过调用RemoveCurrent
上的BindingSource
来删除所选记录。这会将该行标记为Deleted
,它将被BindingSource
排除。
不要在任何事情上致电AcceptChanges
。这样做会向数据适配器指示没有要保存的更改。在数据适配器上调用Update
以将更改从DataTable
保存回数据库。这将在成功保存后在内部调用AcceptChanges
。调用AcceptChanges
后,标记为Deleted
的所有行都会从DataTable
中删除,而标记为Added
或Modified
的所有行都会标记为Unchanged
。