在.Net中正确删除数据表中的行
基本上,我有一个MySQL数据库,我将表中一列的数据绑定到一个列表框中。。我希望允许用户添加/编辑/删除项目,并能够保存/拒绝更改 对于删除,我希望用户能够删除列表框中的选定项。。这是我到目前为止试过的 (1)在.Net中正确删除数据表中的行,.net,vb.net,datatable,.net,Vb.net,Datatable,基本上,我有一个MySQL数据库,我将表中一列的数据绑定到一个列表框中。。我希望允许用户添加/编辑/删除项目,并能够保存/拒绝更改 对于删除,我希望用户能够删除列表框中的选定项。。这是我到目前为止试过的 (1) dt.Rows(lst.SelectedIndex).Delete() 但在使用DataAdapter.Update方法更新数据表之前,这实际上不会从数据表中删除该行,因此列表框中的下一个索引将引用数据表中已删除的行 (2) :dt.Rows.RemoveAt(lst.SelectedI
dt.Rows(lst.SelectedIndex).Delete()
但在使用DataAdapter.Update
方法更新数据表之前,这实际上不会从数据表中删除该行,因此列表框中的下一个索引将引用数据表中已删除的行
(2) :dt.Rows.RemoveAt(lst.SelectedIndex)
这很好,但在更新数据表时(用户单击保存
后),删除的行甚至不会被删除
(3) 已尝试调用AcceptChanges
:
dt.Rows(lst.SelectedIndex).Delete()
dt.AcceptChanges()
我得到了与上面第二个相同的结果
下面是我最终更新DataTable的方式:
Dim cmdBldr As New MySqlCommandBuilder(da)
da.Update(dt)
那么,有没有一种方法允许用户在更新数据表之前向数据表添加/删除任意数量的行?将
数据表
绑定到BindingSource
(您将在设计器中添加)并将其绑定到列表框
。然后在BindingSource
上调用RemoveCurrent
,删除所选记录。这将把该行标记为已删除,它将被BindingSource
排除
不要对任何内容调用
AcceptChanges
。这样做将向数据适配器表明没有要保存的更改。在数据适配器上调用Update
,将DataTable
中的更改保存回数据库。成功保存后,将在内部调用AcceptChanges
。调用AcceptChanges
时,标记为Deleted
的任何行将从DataTable
中删除,而标记为Added
或Modified
的任何行将标记为Unchanged将DataTable
绑定到绑定源代码>(您将在设计器中添加)并将其绑定到列表框
。然后在BindingSource
上调用RemoveCurrent
,删除所选记录。这将把该行标记为已删除
,它将被BindingSource
排除
不要对任何内容调用AcceptChanges
。这样做将向数据适配器表明没有要保存的更改。在数据适配器上调用Update
,将DataTable
中的更改保存回数据库。成功保存后,将在内部调用AcceptChanges
。调用AcceptChanges
时,标记为Deleted
的任何行都将从DataTable
中删除,而标记为Added
或Modified
的任何行都将标记为Unchanged谢谢,BindingSource
解决了这个问题。。但是我想知道有没有一种方法可以不使用额外的BindingSource
(通过将DataTable
直接绑定到ListBox
)来实现这一点?是的,但是为什么要这样做呢?BindingSource
的存在是有原因的。这只是因为我绑定了6-8个表,但我已经为每个表使用了一个绑定源。再次感谢:)谢谢,BindingSource
解决了这个问题。。但是我想知道有没有一种方法可以不使用额外的BindingSource
(通过将DataTable
直接绑定到ListBox
)来实现这一点?是的,但是为什么要这样做呢?BindingSource
的存在是有原因的。这只是因为我绑定了6-8个表,但我已经为每个表使用了一个绑定源。再次感谢:)如果您同时调用('.Delete()'和'.RemoveAt()'),会发生什么?我最终使用了一个BindingSource
——感谢jmchiliney的回答,但无论如何,您的建议不是一个好主意,因为首先它会同时从列表框中删除两个项目。如果您同时调用('.Delete()'和'.RemoveAt()'))发生了什么?我最终使用了BindingSource
——这要感谢jmchilinney的回答,但无论如何,你的建议不是一个好主意,因为首先它会同时从列表框中删除两个项目。