public TestItemForm(KlokanTestDBScan scanItem, bool viewMode) { InitializeComponent(); filePathLabel.Text = ""; updateButton.Enabled = false; this.scanItem = scanItem; scanFilePath = null; this.viewMode = viewMode; addMode = !viewMode; // this array is effectively two-dimensional; this is a trick to help make the code cleaner and faster // (I want to work with multi-dimensional arrays as opposed to jagged arrays) expectedValuesStudentTable = new bool[1, 5, 10]; expectedValuesAnswerTable = new bool[3, 8, 5]; expectedValuesStudentTableTemp = new bool[1, 5, 10]; expectedValuesAnswerTableTemp = new bool[3, 8, 5]; if (viewMode) { chooseFileButton.Enabled = false; applyButton.Enabled = false; discardButton.Enabled = false; PopulateForm(); } else { editButton.Hide(); discardButton.Hide(); } }
private void addItemButton_Click(object sender, EventArgs e) { KlokanTestDBScan newScanItem = new KlokanTestDBScan(); TestItemForm testAddItemForm = new TestItemForm(newScanItem, false); testAddItemForm.StartPosition = FormStartPosition.CenterScreen; // the new scan item will either be set up and added into the database or not testAddItemForm.ShowDialog(); averageCorrectnessLabel.Hide(); averageCorrectnessValueLabel.Hide(); PopulateDataView(); }
/// <summary> /// Asynchronously stores test results into a database described by KlokanTestDBContext. /// Results that already exist in the database are rewritten. /// </summary> /// <param name="results">Any enumerable structure of evaluation test results.</param> /// <returns>A void task.</returns> async Task OutputTestResultsDB(IEnumerable <TestResult> testResults) { using (var testDB = new KlokanTestDBContext()) { foreach (var testResult in testResults) { if (testResult.Error == true) { failedSheets++; continue; } var scanQuery = from scan in testDB.Scans where scan.ScanId == testResult.ScanId select scan; var oldComputedAnswersQuery = from answer in testDB.ComputedValues where answer.ScanId == testResult.ScanId select answer; // delete old computed values foreach (var answer in oldComputedAnswersQuery) { testDB.ComputedValues.Remove(answer); } // assign new computed values KlokanTestDBScan correspondingScan = scanQuery.FirstOrDefault(); var computedValuesDbSet = new List <KlokanTestDBComputedAnswer>(); computedValuesDbSet.AddRange(TableArrayHandling.AnswersToDbSet <KlokanTestDBComputedAnswer>(testResult.StudentComputedValues, 0, true)); for (int i = 0; i < 3; i++) { computedValuesDbSet.AddRange(TableArrayHandling.AnswersToDbSet <KlokanTestDBComputedAnswer>(testResult.AnswerComputedValues, i, false)); } correspondingScan.ComputedValues = computedValuesDbSet; correspondingScan.Correctness = testResult.Correctness; await testDB.SaveChangesAsync(progressDialog.GetCancellationToken()); } } }
private void viewItemButton_Click(object sender, EventArgs e) { if (dataView.SelectedRows.Count == 0) { MessageBox.Show(Properties.Resources.ErrorTextNoRowSelected, Properties.Resources.ErrorCaptionGeneral, MessageBoxButtons.OK, MessageBoxIcon.Error); return; } // multiselect is set to false for this data view int scanItemId = (int)dataView.SelectedRows[0].Cells[0].Value; KlokanTestDBScan scanItemToView = null; using (var testDB = new KlokanTestDBContext()) { var scanItemQuery = from scan in testDB.Scans where scan.ScanId == scanItemId select scan; var scanItem = scanItemQuery.FirstOrDefault(); scanItemToView = new KlokanTestDBScan { ScanId = scanItem.ScanId, ComputedValues = scanItem.ComputedValues, ExpectedValues = scanItem.ExpectedValues, Image = scanItem.Image, Correctness = scanItem.Correctness }; } TestItemForm form = new TestItemForm(scanItemToView, true); form.StartPosition = FormStartPosition.CenterScreen; // all potential changes to the scan item will be saved into the database if the user chooses to do so form.ShowDialog(); PopulateDataView(); ShowAverageCorrectness(); }
private void updateButton_Click(object sender, EventArgs e) { var dialogResult = MessageBox.Show(Properties.Resources.PromptTextDatabaseUpdate, Properties.Resources.PromptCaptionDatabaseUpdate, MessageBoxButtons.YesNo, MessageBoxIcon.Question); if (dialogResult == DialogResult.No) { return; } updateButton.Enabled = false; // prepare the DbSet of chosen expected answers List <KlokanTestDBExpectedAnswer> expectedAnswers = new List <KlokanTestDBExpectedAnswer>(); expectedAnswers.AddRange(TableArrayHandling.AnswersToDbSet <KlokanTestDBExpectedAnswer>(expectedValuesStudentTable, 0, true)); for (int i = 0; i < 3; i++) { expectedAnswers.AddRange(TableArrayHandling.AnswersToDbSet <KlokanTestDBExpectedAnswer>(expectedValuesAnswerTable, i, false)); } if (addMode) { scanItem.Image = ImageHandling.GetImageBytes(scanFilePath, ImageFormat.Png); } scanItem.ExpectedValues = expectedAnswers; scanItem.Correctness = -1; // correctness will only have a valid value once the evaluation is run using (var testDB = new KlokanTestDBContext()) { // when editing an item we first have to delete the old one if (!addMode) { var oldScanItemQuery = from scan in testDB.Scans where scan.ScanId == scanItem.ScanId select scan; var oldExpectedAnswers = from answer in testDB.ExpectedValues where answer.ScanId == scanItem.ScanId select answer; // delete the old expected answers foreach (var answer in oldExpectedAnswers) { testDB.ExpectedValues.Remove(answer); } // assign new expected answers var oldScanItem = oldScanItemQuery.FirstOrDefault(); oldScanItem.ExpectedValues = scanItem.ExpectedValues; oldScanItem.Correctness = -1; } else { KlokanTestDBScan newScanItem = new KlokanTestDBScan { ExpectedValues = scanItem.ExpectedValues, ComputedValues = scanItem.ComputedValues, Image = scanItem.Image, Correctness = -1 }; testDB.Scans.Add(newScanItem); } try { testDB.SaveChanges(); MessageBox.Show(Properties.Resources.InfoTextDatabaseUpdated, Properties.Resources.InfoCaptionDatabaseUpdated, MessageBoxButtons.OK, MessageBoxIcon.Information); } catch (Exception ex) when(ex is DbUpdateException || ex is DbUpdateConcurrencyException) { MessageBox.Show(Properties.Resources.ErrorTextDatabase, Properties.Resources.ErrorCaptionGeneral, MessageBoxButtons.OK, MessageBoxIcon.Error); } } PopulateForm(); }