В чем разница между RowState.Added и DataRowVersion.Original
860 просмотра
2 ответа
95 Репутация автора
У меня есть функция с 3 условиями:
- Если
DataRow rowstate == Added
- Если
!DataRow HasVersion(DataRowVersion.Original)
- Если
DataRow rowstate == modified
Моя проблема со вторым, кто-нибудь может пролить свет на это? Чем оно отличается от первого условия?
Автор: Amit Toren Источник Размещён: 13.02.2018 05:22Ответы (2)
2 плюса
2151 Репутация автора
объяснение
- DataRow имеет RowState « Добавлено », когда он вновь добавляется в таблицу. После вызова
AcceptChanges()
RowState будет установлено значение « Без изменений ». - DataRow имеет DataRowVersion «Оригинал», когда он содержит свои исходные значения. При вызове
AcceptChanges()
DataRow или DataTable для DataRowVersion будет установлено значение «Original». Можно сказать, что оригинал означает, что все изменения были приняты. - DataRow имеет RowState "Modified" после того, как он был отредактирован.
Пример программы
Я создал небольшой пример программы, которая показывает изменения в действии, чтобы прояснить различия.
class Program {
static void Main(string[] args) {
var table = new DataTable("MyTable");
table.Columns.Add(new DataColumn("MyColumn"));
var row = table.NewRow();
Console.WriteLine($"Rowstate: {row.RowState}"); //Prints Detached
table.Rows.Add(row);
Console.WriteLine($"Rowstate: {row.RowState}"); //Prints Added
table.AcceptChanges();
Console.WriteLine($"Rowstate: {row.RowState}"); //Prints Unchanged
row.BeginEdit();
row[0] = "NewValue";
row.EndEdit();
Console.WriteLine($"Rowstate: {row.RowState}"); //Prints Modified
if (row.HasVersion(DataRowVersion.Current)) { // Does the row contain uncommited values?
Console.WriteLine($"DataRowVersion: {DataRowVersion.Current}"); //Prints Current
}
table.AcceptChanges(); //Commit all DataRowChanges
if (row.HasVersion(DataRowVersion.Original)) {
Console.WriteLine($"DataRowVersion: {DataRowVersion.Original}"); //Prints Current
}
Console.ReadLine();
}
}
Дальнейшее чтение
Документация msdn о DataRowStates на самом деле довольно хорошо объяснена. Он дает краткое объяснение каждого состояния, а также пример кода. То же самое для DataRowVersions . Вы должны обязательно взглянуть на эти 2 статьи.
DataRowVersion
Цитата из связанной статьи MSDN:
Автор: Tobias Theel Размещён: 13.02.2018 09:51После вызова метода BeginEdit объекта DataRow при изменении значения становятся доступными значения Current и Proposed.
После вызова метода CancelEdit объекта DataRow предложенное значение удаляется.
После вызова метода EndEdit объекта DataRow предложенное значение становится текущим значением.
После вызова метода AcceptChanges объекта DataRow значение Original становится идентичным значению Current.
После вызова метода AcceptChanges объекта DataTable значение Original становится идентичным значению Current.
После вызова метода RejectChanges объекта DataRow предложенное значение отбрасывается, и версия становится текущей.
0 плюса
1 Репутация автора
Состояние строки (добавлено, удалено ..) Версия строки (оригинал, текущая, предлагаемая)
Метод обновления с использованием версии строки, чтобы решить, какие изменения применить к базе данных. Если мы вызовем метод AcceptChanges для TableAdapter перед вызовом метода обновления: текущая версия будет исходной версией. Поэтому не следует вызывать метод ACCEPTCHANGES перед вызовом метода обновления
Автор: Jay Patel Размещён: 11.08.2019 07:56Вопросы из категории :
- c# Преобразовать десятичную в двойную?
- c# Как рассчитать чей-то возраст в C #?
- c# Как вы сортируете словарь по значению?
- c# В чем разница между int и Integer в Java и C #?
- .net Как создать новый экземпляр объекта из Типа
- .net Действительно ли опечатанные классы действительно предлагают преимущества?
- datatable Проверить наличие изменений в таблице SQL Server?
- datatable Datatable против Dataset
- datatable LINQ-запрос к DataTable
- datatable Как преобразовать DataTable в общий список?
- datarow Почему я не могу сделать foreach (var Item в DataTable.Rows)?
- datarow Добавление данных в существующую DataRable DataRow
- datarow Конвертировать datarow в int
- datarow Датаров до CSV линии C #
- rowstate Как проверить комбинированное изменение RowState '| Изменить 'в RowDataBound?
- rowstate В чем разница между RowState.Added и DataRowVersion.Original