У меня есть данные, которые заполняются из базы данных. Я загружаю источник привязки с этой таблицей.Как получить исходную строку и измененную строку DataRowView с использованием DataRowViewVersion
Sub LoadData()
Dim bsTemp As BindingSource = New BindingSource
bsTemp.DataSource = dtTemp
End Sub
У меня тогда есть другой код, программно редактирующий значения в datatable. Я НИКОГДА не называю AcceptChanges(). Позвольте мне быть ясным НИКОГДА.
Я вызываю bsTem.EndEdit(), и я также называю это на моем dtTemp.Row (x) .EndEdit() Всякий раз, когда я вношу в него изменения.
Так что теперь все, что я хочу сделать, это сравнить две строки (я знаю, что могу сделать это с для каждого столбца, но я не хотел, чтобы сделать это.)
Я хотел бы знать, как сделать эта работа:
Dim modview As New DataView(dtTemp.Copy, "", "Id", DataViewRowState.ModifiedCurrent)
Dim origView As New DataView(dtTemp.Copy, "", "Id", DataViewRowState.ModifiedOriginal)
Так что может выполнить что-то вроде этого:
Dim rowComparer As DataRowComparer(Of DataRow) = DataRowComparer.Default
IsEqual = rowComparer.Equals(origRow.Row, modRow.Row)
Когда я делаю это оба мнения показывают измененные данные, один из них должен только показать мне оригинал неизмененной Row.
Я знаю, что могу это сделать [C# версия]:
SomeDataRow[0, DataRowVersion.Original] //by index
SomeDataRow["ColumnName", DataRowVersion.Original]
Но опять тис работы на колонке на колонке основе - я, будучи итератор - и я не вижу никаких причин, чтобы сделать это, когда DataView якобы имеет этот встроенный. Так что я могу делать неправильно, что не вижу оригинальной версии.
Кажется странным, но это также дает то же самое - я вижу только измененную строку, но не исходную строку, но если я выполню этот SomeDataRow («myColumnName», DataRowVersion.Original), я получаю исходное значение для столбца! Что происходит? – Ken
Я создал тест, и это не сработало для меня. Поэтому я последовал примеру MS и работал, если вы используете 'RowStateFilter' в DataView. См. Этот пример: https://msdn.microsoft.com/en-us/library/system.data.dataviewrowstate(v=vs.110).aspx – Steve
, который является примером, который я использовал, и когда я проверяю, я вижу, что он фильтрует строки, но когда вы смотрите на фактические значения в этих строках - все эти фильтры будут отображать измененный столбец с измененным значением, а не значением Unmodified или иным образом. Чтобы сделать это, я должен перейти к объекту строки и столбцу и запросить DataRowVersion для получения этой версии (по столбцу для каждой строки. Быстрый вопрос - вы видите то же самое в своем. Я нахожусь на win7 pro 64. NET4.0 Я наблюдаю за значениями в дендгере VS 2015 CE. – Ken