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

在.Net中正确删除数据表中的行,.net,vb.net,datatable,.net,Vb.net,Datatable,基本上,我有一个MySQL数据库,我将表中一列的数据绑定到一个列表框中。。我希望允许用户添加/编辑/删除项目,并能够保存/拒绝更改 对于删除,我希望用户能够删除列表框中的选定项。。这是我到目前为止试过的 (1) dt.Rows(lst.SelectedIndex).Delete() 但在使用DataAdapter.Update方法更新数据表之前,这实际上不会从数据表中删除该行,因此列表框中的下一个索引将引用数据表中已删除的行 (2) :dt.Rows.RemoveAt(lst.SelectedI

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

对于删除,我希望用户能够删除列表框中的选定项。。这是我到目前为止试过的

(1)
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的回答,但无论如何,你的建议不是一个好主意,因为首先它会同时从列表框中删除两个项目。