Удалить строку из DataSet, если связанная таблица отсортирована - PullRequest
0 голосов
/ 31 августа 2010

У меня есть DataGridView, который связан с DataSet, и я разрешаю кому-то удалить строку из таблицы, и я удаляю строку из набора. Мой код выглядит так:

ds.Tables(0).Rows(dgCourseList.SelectedRows(0).Index).Delete()

Моя проблема, которую я обнаружил, заключается в том, что если сетка сортируется, индекс строк больше не соответствует индексам в DataSet. В результате из набора удаляются неправильные строки.

Могу ли я решить эту проблему, возможно, придется отсортировать DataSet по какому-то событию DataGridView?

Ответы [ 2 ]

0 голосов
/ 31 августа 2010

Я не проверял это, но попробуйте следующее, если вы правильно настроили 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: Обновлено, потому что я думаю, что приведение было неверным ... все еще не проверено.

0 голосов
/ 31 августа 2010

Я думаю, вы захотите использовать 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, вы можете получить исходное состояние и перейти оттуда.

Cheers, JS

...