如果绑定表已排序,则从DataSet中删除行

时间:2010-08-31 14:28:09

标签: .net vb.net winforms datagridview dataset

我有一个绑定到DataGridView的{​​{1}},我允许有人从表中删除一行,然后从集合中删除该行。我的代码如下所示:

DataSet

我发现的问题是,如果网格排序,则行的索引不再对应ds.Tables(0).Rows(dgCourseList.SelectedRows(0).Index).Delete() 中的索引。结果,从集合中删除了错误的行。

我是否可以解决此问题,可能必须在DataSet的某个排序事件上对DataSet进行排序?

2 个答案:

答案 0 :(得分:0)

我想你会想用CurrencyManager来处理这个问题。

这是一篇解释这个概念的快速文章:http://support.microsoft.com/kb/817247

' Get the Currency Manager by using the BindingContext of the DataGrid '
Dim cm As CurrencyManager = CType(Me.BindingContext(DataGrid1.DataSource, DataGrid1.DataMember), CurrencyManager)

' Retrieve the default DataView of the DataGrid '
Dim dv As DataView = CType(cm.List, DataView)

' Use Currency Manager and DataView to retrieve the Current Row '
Dim dr As DataRow
dr = dv.Item(cm.Position).Row

' Display the Current Row Data '
TextBox1.Text = dr(0).ToString
TextBox2.Text = dr(1).ToString

使用CurrencyManager,您可以检索原始状态并从那里开始。

干杯, JS

答案 1 :(得分:0)

我没有对此进行测试,但尝试以下假设您已正确设置DataKeys

ds.Tables(0).Rows.Remove(ds.Tables(0).Rows.Find(dgCourseList.DataKeys(dg.SelectedIndex)))

编辑:根据您指定使用DataGridView这是一个winforms应用程序(我假设是一个webforms应用程序),您可以尝试:

ds.Tables(0).Rows.Remove(ds.Tables(0).Rows.Find(DirectCast(dg.SelectedRows(0).DataBoundItem, DataRowView).Row))

编辑2:已更新,因为我认为演员表错了......但仍未经过测试。