Вопрос:

В чем разница между RowState.Added и DataRowVersion.Original

c# .net datatable datarow rowstate

860 просмотра

2 ответа

95 Репутация автора

У меня есть функция с 3 условиями:

  1. Если DataRow rowstate == Added
  2. Если !DataRow HasVersion(DataRowVersion.Original)
  3. Если DataRow rowstate == modified

Моя проблема со вторым, кто-нибудь может пролить свет на это? Чем оно отличается от первого условия?

Автор: Amit Toren Источник Размещён: 13.02.2018 05:22

Ответы (2)


2 плюса

2151 Репутация автора

Решение

объяснение

  1. DataRow имеет RowState « Добавлено », когда он вновь добавляется в таблицу. После вызова AcceptChanges()RowState будет установлено значение « Без изменений ».
  2. DataRow имеет DataRowVersion «Оригинал», когда он содержит свои исходные значения. При вызове AcceptChanges()DataRow или DataTable для DataRowVersion будет установлено значение «Original». Можно сказать, что оригинал означает, что все изменения были приняты.
  3. 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:

После вызова метода BeginEdit объекта DataRow при изменении значения становятся доступными значения Current и Proposed.

После вызова метода CancelEdit объекта DataRow предложенное значение удаляется.

После вызова метода EndEdit объекта DataRow предложенное значение становится текущим значением.

После вызова метода AcceptChanges объекта DataRow значение Original становится идентичным значению Current.

После вызова метода AcceptChanges объекта DataTable значение Original становится идентичным значению Current.

После вызова метода RejectChanges объекта DataRow предложенное значение отбрасывается, и версия становится текущей.

Автор: Tobias Theel Размещён: 13.02.2018 09:51

0 плюса

1 Репутация автора

Состояние строки (добавлено, удалено ..) Версия строки (оригинал, текущая, предлагаемая)

Метод обновления с использованием версии строки, чтобы решить, какие изменения применить к базе данных. Если мы вызовем метод AcceptChanges для TableAdapter перед вызовом метода обновления: текущая версия будет исходной версией. Поэтому не следует вызывать метод ACCEPTCHANGES перед вызовом метода обновления

Автор: Jay Patel Размещён: 11.08.2019 07:56
32x32