private void deleteBtn_Click(object sender, EventArgs e)
        {
            KevinTB learner;
            int     deletingId = int.Parse(learnerIDTb.Text);

            //Get learner for the given learnerId
            using (var dbContext = new KevinDBEntities())
            {
                learner = dbContext.KevinTBs
                          .Where(l => l.learnerID == deletingId)
                          .FirstOrDefault <KevinTB>();
            }


            // Create new context for disconnected scenario
            using (var dbContext = new KevinDBEntities())
            {
                dbContext.Entry(learner).State = EntityState.Deleted;

                // Save changes to database
                dbContext.SaveChanges();
            }
            MessageBox.Show($"{learner.learnerName} has been deleted");
            this.loadUnfilteredResults();
            this.resetFormControls();
        }
        private void addBtn_Click(object sender, EventArgs e)
        {
            using (var dbContext = new KevinDBEntities())
            {
                try
                {
                    //create an instance of the Entity object
                    KevinTB learner = new KevinTB
                    {
                        learnerID         = int.Parse(learnerIDTb.Text),
                        learnerName       = learnerNameTb.Text,
                        enrolledProgram   = enrolledProgramTb.Text,
                        favoriteSubject   = favSubTb.Text,
                        numberOfLanguages = int.Parse(numLangTb.Text),
                        strongestSkill    = strongSkillTb.Text
                    };

                    //adds the given entity to the context underlying the set
                    dbContext.KevinTBs.Add(learner);
                    dbContext.Entry(learner).State = EntityState.Added;

                    //save dbContext - also save data to the db
                    dbContext.SaveChanges();
                    MessageBox.Show($"Added new learner to the directory: {learner.learnerName}");
                    this.loadUnfilteredResults();
                    this.resetFormControls();
                }
                catch (Exception)
                {
                    MessageBox.Show($"LearnerID and Number of Languages must be positive integer numbers!");
                }
            }
        }
        /// <summary>
        /// Fills the kevinTBBindingSource with all rows, ordered by learnerID
        /// </summary>
        private void loadUnfilteredResults()
        {
            using (var dbContext = new KevinDBEntities())
            {
                //load kevintb table ordered by learnerid
                dbContext.KevinTBs
                .OrderBy(learner => learner.learnerID)
                .Load();

                //specify DataSource for kevinTBBindingSource
                kevinTBBindingSource.DataSource = dbContext.KevinTBs.Local;
                kevinTBBindingSource.MoveFirst(); // go to first result
            }
        }
        private void searchBtn_Click(object sender, EventArgs e)
        {
            using (var dbContext = new KevinDBEntities())
            {
                var filteredResults = from learner in dbContext.KevinTBs
                                      where learner.enrolledProgram.Equals(searchTb.Text)
                                      select new
                {
                    learner.learnerID,
                    learner.learnerName,
                    learner.enrolledProgram
                };

                kevinTBBindingSource.DataSource = filteredResults.ToList();
                kevinTBBindingSource.MoveFirst();
                this.resetFormControls();
            }
        }
        private void updateBtn_Click(object sender, EventArgs e)
        {
            KevinTB learner;
            int     updatingId = int.Parse(learnerIDTb.Text);

            //Get learner for the given learnerId
            using (var dbContext = new KevinDBEntities())
            {
                learner = dbContext.KevinTBs
                          .Where(l => l.learnerID == updatingId)
                          .FirstOrDefault <KevinTB>();
            }

            // Update learner info in disconnected mode (out of dbContext scope)
            try
            {
                learner.learnerID         = int.Parse(learnerIDTb.Text);
                learner.learnerName       = learnerNameTb.Text;
                learner.enrolledProgram   = enrolledProgramTb.Text;
                learner.favoriteSubject   = favSubTb.Text;
                learner.numberOfLanguages = int.Parse(numLangTb.Text);
                learner.strongestSkill    = strongSkillTb.Text;
            }
            catch (Exception)
            {
                MessageBox.Show($"LearnerID and Number of Languages must be positive integer numbers!");
            }

            // Save modified entity using new Context
            using (var dbContext = new KevinDBEntities())
            {
                // Mark entity as modified
                dbContext.Entry(learner).State = EntityState.Modified;

                // Save changes to database
                dbContext.SaveChanges();
            }
            MessageBox.Show($"{learner.learnerName} has been updated");
            this.loadUnfilteredResults();
            this.resetFormControls();
        }
        private void kevinTBDataGridView_CellClick(object sender, DataGridViewCellEventArgs e)
        {
            KevinTB learner;
            int     selectedId = int.Parse(kevinTBDataGridView.SelectedRows[0].Cells[0].Value.ToString());

            //Get learner for the given learnerId
            using (var dbContext = new KevinDBEntities())
            {
                learner = dbContext.KevinTBs
                          .Where(l => l.learnerID == selectedId)
                          .FirstOrDefault <KevinTB>();
            }

            learnerIDTb.Text       = learner.learnerID.ToString();
            learnerNameTb.Text     = learner.learnerName;
            enrolledProgramTb.Text = learner.enrolledProgram;
            favSubTb.Text          = learner.favoriteSubject;
            numLangTb.Text         = learner.numberOfLanguages.ToString();
            strongSkillTb.Text     = learner.strongestSkill.ToString();

            currentlyEditing    = true;
            learnerIDTb.Enabled = false;
            addBtn.Enabled      = false;
        }
        /// <summary>
        /// Fills the kevinTBBindingSource with all rows, ordered by learnerID
        /// </summary>
        private void _refreshContacts()
        {
            //dispose of old dbContext, if any
            if (dbContext != null)
            {
                dbContext.Dispose();
            }

            // create new DbContext so we can reorder records based on edits
            dbContext = new KevinDBEntities();

            //enables the save button
            kevinTBBindingNavigatorSaveItem.Enabled = true;

            //load KevinTB table ordered by learnerID
            dbContext.KevinTBs
            .OrderBy(learner => learner.learnerID)
            .Load();

            //specify DataSource for kevinTBBindingSource
            kevinTBBindingSource.DataSource = dbContext.KevinTBs.Local;
            kevinTBBindingSource.MoveFirst(); // go to first result
            searchTextBox.Clear();
        }