public static void SaveIssueGroupsData(IssueGroupsData[] data) { var issueGroupsTable = GetAllData(); var issueGroupsIssuesTable = IssueGroupsIssues2.GetAllData(); // delete any missing IssueGroups rows foreach (var igRow in issueGroupsTable) { if (data.All(ig => igRow.IssueGroupId != ig.IssueGroupId)) { igRow.Delete(); } } // delete any missing IssueGroupsIssues rows foreach (var igiRow in issueGroupsIssuesTable) { var issueGroup = data.FirstOrDefault(ig => ig.IssueGroupId == igiRow.IssueGroupId); if (issueGroup == null || issueGroup.Issues.All(igi => igi.IssueId != igiRow.IssueId)) { igiRow.Delete(); } } // update or add remaining entries var igOrder = 0; foreach (var ig in data) { igOrder += 10; var igRow = issueGroupsTable.Where(r => r.RowState != DataRowState.Deleted) .FirstOrDefault(r => r.IssueGroupId == ig.IssueGroupId); if (igRow == null) { //igRow = issueGroupsTable.NewRow(ig.IssueGroupId, igOrder, ig.IsEnabled, // ig.Heading, ig.SubHeading); //issueGroupsTable.AddRow(igRow); // insert directly because of auto increment column Insert(ig.IssueGroupId, igOrder, ig.IsEnabled, ig.Heading, ig.SubHeading); } else { if (igRow.IssueGroupOrder != igOrder) { igRow.IssueGroupOrder = igOrder; } if (igRow.IsEnabled != ig.IsEnabled) { igRow.IsEnabled = ig.IsEnabled; } if (igRow.Heading != ig.Heading) { igRow.Heading = ig.Heading; } if (igRow.SubHeading != ig.SubHeading) { igRow.SubHeading = ig.SubHeading; } } var igiOrder = 0; foreach (var igi in ig.Issues) { igiOrder += 10; var igiRow = issueGroupsIssuesTable.Where(r => r.RowState != DataRowState.Deleted) .FirstOrDefault(r => r.IssueGroupId == ig.IssueGroupId && r.IssueId == igi.IssueId); if (igiRow == null) { igiRow = issueGroupsIssuesTable.NewRow(ig.IssueGroupId, igi.IssueId, igiOrder); issueGroupsIssuesTable.AddRow(igiRow); } else if (igiRow.IssueOrder != igiOrder) { igiRow.IssueOrder = igiOrder; } } } UpdateTable(issueGroupsTable); IssueGroupsIssues2.UpdateTable(issueGroupsIssuesTable); }
public static void SaveIssuesData(IssuesDataIssue[] data) { var issuesTable = GetAllData(); var issueGroupsIssuesTable = IssueGroupsIssues2.GetAllData(); var issuesQuestionsTable = IssuesQuestions.GetAllData(); // this dictionary is used for adding IssueGroupsIssues entries for new issues var igiMaxOrderByIssueGroup = issueGroupsIssuesTable.GroupBy(igi => igi.IssueGroupId) .Select(g => new { IssueGroupId = g.Key, MaxOrder = g.Max(igi => igi.IssueOrder) }) .ToDictionary(ig => ig.IssueGroupId, ig => ig.MaxOrder); // delete any missing Issues rows foreach (var iRow in issuesTable) { if (data.All(i => iRow.IssueId != i.IssueId)) { iRow.Delete(); } } // delete any missing IssueGroupsIssues rows foreach (var igiRow in issueGroupsIssuesTable) { var issue = data.FirstOrDefault(i => i.IssueId == igiRow.IssueId); if (issue == null) { igiRow.Delete(); } } // delete any missing IssuesQuestions rows foreach (var iqRow in issuesQuestionsTable) { var issue = data.FirstOrDefault(i => i.IssueId == iqRow.IssueId); if (issue == null || issue.QuestionIds.All(iq => iq != iqRow.QuestionId)) { iqRow.Delete(); } } // update or add remaining entries var iOrder = 0; foreach (var i in data) { iOrder += 10; var iRow = issuesTable.Where(r => r.RowState != DataRowState.Deleted) .FirstOrDefault(r => r.IssueId == i.IssueId); // Issues if (iRow == null) { // insert directly because of auto increment column Insert(i.IssueId, iOrder, i.Issue, !i.IsEnabled); // new issues are added to IssueGroupsIssues at the end of the sequence by issue group var maxOrder = igiMaxOrderByIssueGroup[i.IssueGroupId] + 10; igiMaxOrderByIssueGroup[i.IssueGroupId] = maxOrder; var igiRow = issueGroupsIssuesTable.NewRow(i.IssueGroupId, i.IssueId, maxOrder); issueGroupsIssuesTable.AddRow(igiRow); } else { if (iRow.IssueOrder != iOrder) { iRow.IssueOrder = iOrder; } if (iRow.Issue != i.Issue) { iRow.Issue = i.Issue; } if (iRow.IsIssueOmit != !i.IsEnabled) { iRow.IsIssueOmit = !i.IsEnabled; } } var iqOrder = 0; foreach (var iq in i.QuestionIds) { iqOrder += 10; var iqRow = issuesQuestionsTable.Where(r => r.RowState != DataRowState.Deleted) .FirstOrDefault(r => r.IssueId == i.IssueId && r.QuestionId == iq); if (iqRow == null) { iqRow = issuesQuestionsTable.NewRow(i.IssueId, iq, iqOrder); issuesQuestionsTable.AddRow(iqRow); } else if (iqRow.QuestionOrder != iqOrder) { iqRow.QuestionOrder = iqOrder; } } } UpdateTable(issuesTable); IssueGroupsIssues2.UpdateTable(issueGroupsIssuesTable); IssuesQuestions.UpdateTable(issuesQuestionsTable); }