Уникальная ошибка 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
заранее спасибо