示例#1
0
        public MPBDataSet.PhrasebookRow GetPhraseRowByC2PRow(DataRow row)
        {
            MPBDataSet.Cat2PhraseRow c2pRow      = row as MPBDataSet.Cat2PhraseRow;
            MPBDataSet.PhrasebookRow questionRow = DBWrapper.Instance.GetPhraseRowByID(c2pRow._phraseID);

            return(questionRow);
        }
示例#2
0
        public void DeleteRowAt(MPBDataSet.PhrasebookRow dataRow)
        {
            DeleteRowFromCat2Phrase(dataRow);
            dataRow.Delete();

            this.phrasebookTableAdapter.Update(MyDataSet); CommitChanges();
        }
示例#3
0
            public RowWithCategoryInfo(MPBDataSet.PhrasebookRow row)
            {
                m_row = row;
                DataRow[] categories = DBWrapper.Instance.Cat2PhraseDataTable.Select(string.Format("_phraseID = {0}", row._id));

                foreach (MPBDataSet.Cat2PhraseRow c2pRow in categories)
                {
                    m_CatID2CheckboxMap[c2pRow._catID] = true;
                }
            }
示例#4
0
        public void DeleteRow(DataGridViewRow row)
        {
            // Get the data table row that is associated with this view's row
            MPBDataSet.PhrasebookRow dataRow = row.DataBoundItem as MPBDataSet.PhrasebookRow;

            // NOTE: If we don't set the data source to null right now, a reference to the soon-to-be-removed row
            // will remain inside the view, and after the row is deleted, this reference to the already-removed
            // row will cause an exception to be thrown.
            this.DataSource = null;

            DBWrapper.Instance.DeleteRowAt(dataRow);
        }
示例#5
0
        private void DeleteRowFromCat2Phrase(MPBDataSet.PhrasebookRow phrasebookRow)
        {
            // Clear prev. data
            DataRow[] c2pRows = MyDataSet.Cat2Phrase.Select(string.Format("_phraseID = {0}", phrasebookRow._id));
            if (c2pRows.Length > 0)
            {
                foreach (DataRow row in c2pRows)
                {
                    row.Delete();
                }

                this.cat2PhraseTableAdapter.Update(MyDataSet);
                CommitChanges();
            }
        }
示例#6
0
        public MPBDataSet.PhrasebookRow CreateNewDataRow()
        {
            MPBDataSet.PhrasebookRow row = PhrasebookDataTable.NewPhrasebookRow();

            // Set defaults
            foreach (DataColumn col in row.Table.Columns)
            {
                if (!col.AutoIncrement)
                {
                    row[col] = col.DefaultValue;
                }
            }

            return(row);
        }
示例#7
0
        private void OnAddWord()
        {
            MPBDataSet.PhrasebookRow row = DBWrapper.Instance.CreateNewDataRow();
            row._language = row._english = SearchTextBox.Text;
            DBWrapper.RowWithCategoryInfo rwci = new DBWrapper.RowWithCategoryInfo(row);
            EditForm form = new EditForm(rwci);

            if (form.ShowDialog() == DialogResult.OK)
            {
                bool bAdded = DBWrapper.Instance.InsertRow(rwci);
                if (bAdded)
                {
                    dataGridView.DataSource = null;
                    ReadDatabase();
                }
            }
        }
示例#8
0
 private void OnEditRow(object sender, EventArgs paramArgs)
 {
     if (dataGridView.SelectedRows.Count > 0)
     {
         DataGridViewRow               selectedDataRow = dataGridView.SelectedRows[0];
         MPBDataSet.PhrasebookRow      selectedRow     = selectedDataRow.DataBoundItem as MPBDataSet.PhrasebookRow;
         MPBDataSet.PhrasebookRow      editedRow       = selectedRow;
         DBWrapper.RowWithCategoryInfo rwci            = new DBWrapper.RowWithCategoryInfo(editedRow);
         EditForm form = new EditForm(rwci);
         if (form.ShowDialog() == DialogResult.OK)
         {
             selectedRow = rwci.Row;
             DBWrapper.Instance.UpdateRow(rwci);
             if (SearchTextBox.Text != string.Empty)
             {
                 UpdateDataGridView();
             }
         }
     }
 }
示例#9
0
        public EditForm(DBWrapper.RowWithCategoryInfo rwci)
        {
            InitializeComponent();

            // Save the original row
            m_originalRWCI = rwci;

            // Clone it to a new row
            MPBDataSet.PhrasebookRow newRow = DBWrapper.Instance.CreateNewDataRow();
            m_editedRWCI = new DBWrapper.RowWithCategoryInfo(newRow);
            m_editedRWCI.Row.ItemArray = m_originalRWCI.Row.ItemArray;


            // Set data source and binding
            phrasebookBindingSource.DataSource = m_editedRWCI.Row;
            textBoxFinnish1.TxtBox.DataBindings.Add(new Binding("Text", phrasebookBindingSource, "_language"));
            txtEnglish.DataBindings.Add(new Binding("Text", phrasebookBindingSource, "_english"));

            foreach (KeyValuePair <string, long> category in DBWrapper.Instance.CategoriesMap)
            {
                if (category.Key == "All")
                {
                    continue;
                }

                CheckBox cb = new CheckBox();
                cb.Text = category.Key;

                if (rwci.CatID2CheckboxMap.ContainsKey(category.Value))
                {
                    cb.Checked = true;
                }

                cb.AutoSize = true;
                flowLayoutPanel1.Controls.Add(cb);
            }
        }
示例#10
0
        private void DrawWords()
        {
            Random r = new Random();

            bool bFinnishQuestion;

            // Decide if to ask in Finnish or English
            if (m_QuestionLanguage == Language.Finnish)
            {
                bFinnishQuestion = true;
            }
            else if (m_QuestionLanguage == Language.English)
            {
                bFinnishQuestion = false;
            }
            else             // Both
            {
                bFinnishQuestion = (r.Next(2) == 0) ? false : true;
            }

            MPBDataSet.Cat2PhraseDataTable dt = DBWrapper.Instance.Cat2PhraseDataTable;
            DataRow[] quizRows = dt.Select(m_CategoryFilter);


            if (quizRows.Length < MIN_RECORDS_FOR_QUIZ)
            {
                MessageBox.Show(
                    string.Format("There are not enough db. records in the selected category!\nMinimum number of records is {0}",
                                  MIN_RECORDS_FOR_QUIZ)
                    );

                return;
            }

            if (m_AlreadyUsedQuestionRows.Count >= quizRows.Length)
            {
                // Reset the already used question rows in case no rows are left to choose from.
                m_AlreadyUsedQuestionRows.Clear();
            }

            // Find a question/answer row that was not yet used during
            // the lifetime of this form
            int nQuestionRowIdx;

            do
            {
                nQuestionRowIdx = r.Next(quizRows.Length);
            } while (m_AlreadyUsedQuestionRows.Contains(nQuestionRowIdx));

            // Add to the hash of already-used questions
            m_AlreadyUsedQuestionRows.Add(nQuestionRowIdx);

            // Read the question/answer pair
            MPBDataSet.PhrasebookRow questionRow = DBWrapper.Instance.GetPhraseRowByC2PRow(quizRows[nQuestionRowIdx]);

            m_TheQuestion      = bFinnishQuestion ? questionRow._language : questionRow._english;
            labelQuestion.Text = m_TheQuestion;
            m_TheAnswer        = bFinnishQuestion ? questionRow._english : questionRow._language;

            //////////////////////////////////////////////////////////////////////////
            // ANSWERS
            //////////////////////////////////////////////////////////////////////////
            // Create a hash for already used answer rows
            HashSet <int> alreadyUsedAnswerRows = new HashSet <int>();

            DataRow[] answerRows = quizRows;

            // Add the Q/A row to the list of already used rows
            alreadyUsedAnswerRows.Add(nQuestionRowIdx);

            // Create the answers array with (NUM_OPTIONS - 1) cells because one answer
            // will be TheAnswer the we already chose.
            int nAnswers = (NUM_OPTIONS - 1);

            string[] optionalAnswers           = new string[nAnswers];
            int      numOptionalAnswersInArray = 0;

            // Draw (NUM_OPTIONS - 1) random answers
            while (numOptionalAnswersInArray < nAnswers)
            {
                // Find a row that was not already used
                int nRowIdx;
                do
                {
                    nRowIdx = r.Next(answerRows.Length);
                } while (alreadyUsedAnswerRows.Contains(nRowIdx));

                // Add the idx to the list of already used ones
                alreadyUsedAnswerRows.Add(nRowIdx);

                MPBDataSet.PhrasebookRow optAnsRow = DBWrapper.Instance.GetPhraseRowByC2PRow(answerRows[nRowIdx]);

                // First, get the optional row's question
                string sOptionalQuestion = bFinnishQuestion ? optAnsRow._language : optAnsRow._english;
                if (sOptionalQuestion == m_TheQuestion)                  // Same as THE question?
                {
                    // Skip this row because it probably is a different answer for THE SAME question
                    continue;
                }

                // Get the optional answer
                string sOptionalAnswer = bFinnishQuestion ? optAnsRow._english : optAnsRow._language;

                // Check if this is a new answer, or if it matches any of the
                // already-selected answers.
                // We test this because several different words may have the same meaning.
                bool bNewAnswer = true;
                foreach (string s in optionalAnswers)
                {
                    if (sOptionalAnswer == s)
                    {
                        bNewAnswer = false;
                        break;
                    }
                }

                if (bNewAnswer == false)                        // Not a new answer?
                {
                    continue;                                   // Continue searching.
                }

                optionalAnswers[numOptionalAnswersInArray++] = sOptionalAnswer;
            }


            // Select the random location of the correct answer
            int nCorrectAnswerIdx = r.Next(NUM_OPTIONS);

            // Fill the answers
            int nOptionalAnswersIdx = 0;                // We need to keep count of which answer we are using next

            for (int i = 0; i < NUM_OPTIONS; i++)
            {
                string sAnswer;
                if (i == nCorrectAnswerIdx)
                {
                    sAnswer = m_TheAnswer;
                }
                else
                {
                    sAnswer = optionalAnswers[nOptionalAnswersIdx++];
                }

                m_AnswerButtons[i].Text = string.Empty;                         // Clean the button's text
                m_TheOptionalAnswers[i] = sAnswer;                              // Save the answer's text for later (see timer1_Tick)
            }

            questionsCountLabel.Text = string.Format("{0} / {1}", m_AlreadyUsedQuestionRows.Count, quizRows.Length);
        }