Уникальная ошибка contstaint при отклонении изменений в DataTable

У меня возникает проблема с датами, когда я отклоняю изменения в таблице. Я создал пример ниже, который демонстрирует проблему:

DataTable table = new DataTable();
table.Columns.Add("Name", typeof(string));
table.Columns.Add("Last_Name", typeof(string));
table.Columns.Add("Male", typeof(Boolean));

foreach (DataColumn column in table.Columns)
{
    if (column.ColumnName == "Name")
    {
        column.Unique = true;
    }
}

DataRow row;

row = table.NewRow();
row["Name"] = String.Format("Steve");
row["Last_Name"] = String.Format("Smith");
row["Male"] = true;

table.Rows.Add(row);

table.AcceptChanges();

Итак, на этом этапе у меня есть DataTable с уникальным ограничением столбца и 1 строкой в ​​этой таблице.

Теперь я удаляю эту строку:

row.Delete();

Это устанавливает состояние строки как Удаленное.

На этом этапе я понимаю, что допустил ошибку и хочу снова добавить строку. Поэтому я снова создаю новую строку и добавляю ее в DataTable:

row = table.NewRow();
row["Name"] = String.Format("Steve");
row["Last_Name"] = String.Format("Smith");
row["Male"] = true;

table.Rows.Add(row);

На этом этапе мое содержимое DataTable находится в следующем состоянии:

table.Rows [0].RowState удален

table.Rows[1].RowState добавлен

Теперь я передумал обо всем этом и хочу вернуться к тому, как я начал, поэтому я вызываю RejectChanges:

table.RejectChanges();

Когда я делаю это, я получаю следующую ошибку:

Column 'Name' is constrained to be unique.  Value 'Steve' is already present.

Я понимаю, что есть 2 строки с одинаковыми значениями, но я думал, что отклоненные изменения привели бы к этому, поскольку RowStates разные.

Любые идеи, как я могу обойти это?

В моем живом коде я использую это для перемещения строк между двумя сетками (например, позволяя пользователю выбирать, какие столбцы видны)

Я использую C#4.0 в Visual Studio 2012

заранее спасибо

0 ответов

Другие вопросы по тегам