У меня есть две кнопки - отменить и добавить, которые добавляют новую строку в виде сетки, и соответственно каждый раз, когда я нажимаю ее, в контекст добавляется новая запись, которая подключена к источнику привязки, который установлен как источник данных вид сетки.
Поэтому, если у меня есть 2 строки и я добавляю 8 строк (например), когда я нажимаю «Отмена», он должен очищать только несохраненные строки и снова оставлять их двумя.
Проблема в том, что он отменяет только 4 из них (я вижу проблему в своем коде, но не могу найти способ ее исправить).
Вот мой простой код, который пока не работает:
try
{
DialogResult dialogResult = MessageBox.Show("Do you want to cancel all unsaved changes?", "Cancel all unsaved changes", MessageBoxButtons.YesNo);
if (dialogResult == DialogResult.Yes)
{
for (var i = 0; i < bindingSource1.Count; i++)
{
var f = bindingSource1[i] as MyConfiguration;
if (f.MyConfigurationId == 0)
{
context.RemoveMyConfiguration(f);
bindingSource1.Remove(f);
}
}
}
}
catch (Exception ex)
{
throw ex;
}
Проблема в том, что я перебираю источник привязки и одновременно удаляю элементы, и он обновляется, поэтому в какой-то момент он может увидеть, что он зациклился на всей коллекции.
Каков правильный путь? Должен ли я перебирать строки в сетке?
РЕДАКТИРОВАТЬ: я извиняюсь за это, это WinForms. Источником данных BindingSource
является список, полученный из базы данных. Я использую Entity Framework 4.0.
GridView
или на самом деле WinFormsDataGridView
? Каков источник данных дляBindingSource
? - person jmcilhinney   schedule 06.11.2014BindingSource
является List‹MyConfiguration›, полученный из базы данных. Я использую Entity Framework 4.0. - person Apostrofix   schedule 06.11.2014DataGridView
- person Apostrofix   schedule 06.11.2014