Пример #1
0
        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();
            }
        }
Пример #2
0
        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();
        }
Пример #3
0
        /// <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());
                }
            }
        }
Пример #4
0
        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();
        }
Пример #5
0
        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();
        }