public MPBDataSet.PhrasebookRow GetPhraseRowByC2PRow(DataRow row) { MPBDataSet.Cat2PhraseRow c2pRow = row as MPBDataSet.Cat2PhraseRow; MPBDataSet.PhrasebookRow questionRow = DBWrapper.Instance.GetPhraseRowByID(c2pRow._phraseID); return(questionRow); }
public void DeleteRowAt(MPBDataSet.PhrasebookRow dataRow) { DeleteRowFromCat2Phrase(dataRow); dataRow.Delete(); this.phrasebookTableAdapter.Update(MyDataSet); CommitChanges(); }
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; } }
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); }
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(); } }
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); }
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(); } } }
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(); } } } }
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); } }
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); }