// Проверяет, изменились ли данные в строке и добавляет новую услугу или меняет существующую. // Если в строке недостаточно данных для услуги(новая строка), ничего не делает, предотвращая создание новой услуги из пустой строки private void ChangeServiceRow(DataGridViewRow row) { if (row.IsNewRow) { return; } var id = AllServices.IndexOfKey((int)row.Cells["ColumnIdService"].Value); // индекс в списке var summ = (decimal)row.Cells["ColumnServiceSumm"].Value; var nw = (string)row.Cells["ColumnNameWork"].Value ?? ""; if (summ == 0 || nw?.Length == 0) { return; // если эти ячейки пусты, значит данных для добавления/изменения услуги недостаточно(false) } var nd = (string)row.Cells["ColumnNameDevice"].Value ?? ""; var sd = CurrentClient.Subdivisions.IndexOfValue((string)row.Cells["ColumnSubdivision"].Value ?? ""); var ai = (string)row.Cells["ColumnAddInfo"].Value ?? ""; var numb = (int)row.Cells["ColumnServiceNumb"].Value; Service sv; if (id == -1) { sv = new Service(nw, nd, sd, numb, summ, -1, ai); // добавляем новую услугу CurrentContract.AddService(sv); // добавляем в список услуг текущего договора row.Cells["ColumnIdService"].Value = sv.Id; } else { sv = AllServices.Values[id]; // извлекаем существующую // Проверяем, изменились ли данные if (summ != sv.Value || numb != sv.Number || nw != sv.Nw.Name || nd != sv.Nd.Name || sd != sv.Sd || ai != sv.Ai.Name) { CurrentContract.SetService(nw, nd, sd, numb, summ, sv.Id, ai); // меняем значения } } }