Извините за плохой заголовок, трудно подвести итог.
Итак, у меня есть форма, которая будет загружать данные из базы данных:
JobModel jobModel = Data.GetJobList(model)[0];
JobModel содержит поле для списка "частей", также известный как "PartModel "
public class JobModel
{
...
public List<PartModel> parts { get; set; }
...
}
Поэтому, когда пользователь загружает форму, я сохраняю данные, прежде чем они начнут ввод данных, назначая эту глобальную модель JobModel для ссылки в последующих сегментах кода. Кроме того, здесь также находится partsModel
public static JobModel previousJobModel = new JobModel();
public static List<PartModel> partModels = new List<PartModel>();
public void LoadFormData(int JobID)
{
...
JobModel jobModel = Data.GetJobList(model)[0];
partModels = jobModel.parts;
previousJobModel = jobModel;
...
}
Теперь происходит то, что во время сегмента кода предыдущиеJobModel.parts перезаписываются при выполнении секции DELETE кода
private void olvJobPartList_RightClick(object sender, BrightIdeasSoftware.CellRightClickEventArgs e)
{
PartModel model = (PartModel)e.Model;
if (model != null)
{
selectedModel = model;
menuStripOLV.Show(Cursor.Position);
}
}
private void deletePartToolStripMenuItem_Click(object sender, EventArgs e)
{
//previousJobModel.parts Count = 7
var itemToRemove = partModels.Single(r => r.PartNumber == selectedModel.PartNumber && r.partID ==
selectedModel.partID);
partModels.Remove(itemToRemove);
//previousJobModel.parts Count = 6
populateOLV();
}
Несколько замечаний: я поместил пару точек останова в функцию «удалить», перед удалением детали из списка, предыдущийJobModel нормальный, после того, как он облажался. Я также возвращаюсь к тому, что происходит с кодированием в целом, поэтому я могу упустить что-то глупое здесь. Кроме того, изменение других полей в задании не вызывает проблем с предыдущей моделью задания, а только удаляет деталь из списка