我有一个绑定到DataGridView
的{{1}},我允许有人从表中删除一行,然后从集合中删除该行。我的代码如下所示:
DataSet
我发现的问题是,如果网格排序,则行的索引不再对应ds.Tables(0).Rows(dgCourseList.SelectedRows(0).Index).Delete()
中的索引。结果,从集合中删除了错误的行。
我是否可以解决此问题,可能必须在DataSet
的某个排序事件上对DataSet进行排序?
答案 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:已更新,因为我认为演员表错了......但仍未经过测试。