<?xml version="1.0" encoding="UTF-8"?>
<feed xml:lang="en-US" xmlns="http://www.w3.org/2005/Atom">
  <id>tag:www.refactormycode.com,2007:users1786</id>
  <link type="application/atom+xml" href="http://www.refactormycode.com/users/1786" rel="self"/>
  <title>etherealmonkey.myopenid.com</title>
  <updated>Mon Nov 02 01:05:10 -0800 2009</updated>
  <entry>
    <id>tag:www.refactormycode.com,2007:Refactor352386</id>
    <published>2009-11-02T01:05:10-08:00</published>
    <title>[C#] On FlashCard Program Using SQLite</title>
    <content type="html">&lt;p&gt;Thank you for the review!  I haven't got time to digest the changes fully at this moment, but I will definitely take another look at the SQL parameter suggestion and follow up.&lt;/p&gt;

&lt;pre&gt;&lt;/pre&gt;</content>
    <author>
      <name>etherealmonkey.myopenid.com</name>
      <email></email>
    </author>
    <link type="text/html" href="http://www.refactormycode.com/codes/1084-flashcard-program-using-sqlite/refactors/352386" rel="alternate"/>
  </entry>
  <entry>
    <id>tag:www.refactormycode.com,2007:Code1084</id>
    <published>2009-10-31T18:47:23-07:00</published>
    <updated>2009-11-02T01:05:26-08:00</updated>
    <title>[C#] FlashCard Program Using SQLite</title>
    <content type="html">&lt;p&gt;I'm a newb, so please be nice?&lt;/p&gt;

&lt;p&gt;Comments regarding what I am doing very wrong would be most appreciated.&lt;/p&gt;

&lt;p&gt;This program works (mostly) the way I think it should.  One part not working is the insert of a new set requires restarting the app to see the additions.&lt;/p&gt;

&lt;p&gt;TIA&lt;/p&gt;

&lt;pre&gt;//
// frmMain
//
using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Text;
using System.Windows.Forms;
using Owf.Controls; // Custom header panel from openwinforms.com
using System.Data.SQLite;

namespace FlashCards
{
    public partial class frmMain : Form
    {
        // Current directory - Used to find the database.
        private string _currentDirectory = Environment.CurrentDirectory;
        // Place to store the currentDatabase info once frmMain is initialized.
        private string _currentDatabase;
        // Place to store the connectionString info.
        private string _connectionString;

        private SQLiteConnection _sqLiteConnection;
        private SQLiteCommand _sqLiteCommand;
        private SQLiteDataAdapter _sqLiteDataAdapter;
        private DataSet _dataSet = new DataSet();
        private DataTable _dataTable = new DataTable();

        private Image _answerOff;
        private Image _answerOn;

        private bool _answerEnabled = false;
        private bool _btnPrevEnabled = false;
        private bool _btnNextEnabled = false;

        private int _answerIndexStart = 0;
        private int _answerIndexEnd = 0;
        private int _answerIndexCurrent;

        public int AnswerIndexEnd
        {
            get
            {
                return _answerIndexEnd;
            }
        }

        public frmMain()
        {
            InitializeComponent();
            _answerOff = new Bitmap(typeof(frmMain), &amp;quot;off.png&amp;quot;);
            _answerOn = new Bitmap(typeof(frmMain), &amp;quot;on.png&amp;quot;);
            _currentDatabase = _currentDirectory + @&amp;quot;\FlashCards.db&amp;quot;;
            _connectionString = @&amp;quot;Data Source=&amp;quot; + _currentDatabase + &amp;quot;;New=True;UTF8Encoding=True;Version=3&amp;quot;;
            _answerIndexCurrent = _answerIndexStart;
            GetRecordCount();
            LoadData();
            SetRtfText();
            StatusLabelUpdate();
            btnNextGetStatus();
            
        }

        private void newToolStripMenuItem_Click(object sender, EventArgs e)
        {
            frmNewSet _frmNewSet = new frmNewSet(this);
            _frmNewSet.Show();
        }

        public void LoadData()
        {
            string sqlCommandText = &amp;quot;SELECT * FROM  Cards&amp;quot;;

            SetConnection();
            _sqLiteConnection.Open();
            _sqLiteDataAdapter = new SQLiteDataAdapter(sqlCommandText, _sqLiteConnection);
            _dataSet.Reset();
            _sqLiteDataAdapter.Fill(_dataSet);
            _dataTable.Reset();
            _dataTable = _dataSet.Tables[0];
            _sqLiteConnection.Close();
        }

        private void SetConnection()
        {
            _sqLiteConnection = new SQLiteConnection(_connectionString);
        }

        public void ExecuteQuery(string qryText)
        {
            SetConnection();
            _sqLiteConnection.Open();

            _sqLiteCommand = _sqLiteConnection.CreateCommand();
            _sqLiteCommand.CommandText = qryText;

            _sqLiteCommand.ExecuteNonQuery();
            _sqLiteConnection.Close();
        }

        private void AnswerButtonChangeImage()
        {
            switch (_answerEnabled)
            {
                case true:
                    _answerEnabled = false;
                    this.btnAnswerShow.Image = _answerOff;
                    this.rtfBoxAnswer.Visible = false;
                    break;

                case false:
                    _answerEnabled = true;
                    this.btnAnswerShow.Image = _answerOn;
                    this.rtfBoxAnswer.Visible = true;
                    break;

                default:
                    _answerEnabled = false;
                    this.btnAnswerShow.Image = _answerOff;
                    this.rtfBoxAnswer.Visible = false;
                    break;
            }
        }

        private void btnAnswerShow_Click(object sender, EventArgs e)
        {
            AnswerButtonChangeImage();
        }

        public void GetRecordCount()
        {
            string sqlCommandText = &amp;quot;SELECT COUNT(*) AS Total FROM Cards;&amp;quot;;

            SetConnection();
            _sqLiteConnection.Open();
            _sqLiteDataAdapter = new SQLiteDataAdapter(sqlCommandText, _sqLiteConnection);
            _dataSet.Reset();
            _dataTable.Reset();
            _sqLiteDataAdapter.Fill(_dataSet);
            _dataTable = _dataSet.Tables[0];
            _sqLiteConnection.Close();
            _answerIndexEnd = Convert.ToInt32(_dataTable.Rows[_answerIndexStart][&amp;quot;Total&amp;quot;]);
        }

        private void SetRtfText()
        {
            if ((_answerIndexCurrent &amp;lt; _answerIndexEnd) &amp;amp;&amp;amp; (_answerIndexCurrent &amp;gt;= _answerIndexStart))
            {
                this.rtfBoxQuestion.Text = _dataTable.Rows[_answerIndexCurrent][&amp;quot;card_question&amp;quot;].ToString();
                this.rtfBoxAnswer.Text = _dataTable.Rows[_answerIndexCurrent][&amp;quot;card_answer&amp;quot;].ToString();
            }
        }

        private void btnNextGetStatus()
        {            
            switch (_answerIndexCurrent &amp;lt; (_answerIndexEnd - 1))
            {
                case true:
                    this.btnNext.Enabled = true;
                    break;

                case false:
                    this.btnNext.Enabled = false;
                    break;

                default:
                    this.btnNext.Enabled = false;
                    break;
            }
        }

        private void btnPrevGetStatus()
        {
            switch (_answerIndexCurrent &amp;gt; _answerIndexStart)
            {
                case true:
                    this.btnPrev.Enabled = true;
                    break;

                case false:
                    this.btnPrev.Enabled = false;
                    break;

                default:
                    this.btnPrev.Enabled = false;
                    break;
            }
        }

        private void btnPrev_Click(object sender, EventArgs e)
        {
            _answerIndexCurrent = _answerIndexCurrent - 1;
            _answerEnabled = true;
            AnswerButtonChangeImage();
            SetRtfText();
            btnPrevGetStatus();
            btnNextGetStatus();
            StatusLabelUpdate();
        }

        private void btnNext_Click(object sender, EventArgs e)
        {
            _answerIndexCurrent = _answerIndexCurrent + 1;
            _answerEnabled = true;
            AnswerButtonChangeImage();
            SetRtfText();
            btnNextGetStatus();
            btnPrevGetStatus();
            StatusLabelUpdate();
        }

        public void StatusLabelUpdate()
        {
            this.tStripLabel1.Text = @&amp;quot;Record # &amp;quot; + (_answerIndexCurrent + 1).ToString();
        }
    }
}

//
// frmAddNew
//
using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Text;
using System.Windows.Forms;
using System.Data.SQLite;

namespace FlashCards
{
    public partial class frmNewSet : Form
    {
        private frmMain _frmMain;
        private int _answerIndexNext;
        private RichTextBox _rtfCurrent;

        public frmNewSet(frmMain mainFrm)
        {
            InitializeComponent();
            _frmMain = mainFrm;
            _rtfCurrent = new RichTextBox();
            _answerIndexNext = _frmMain.AnswerIndexEnd + 1;
        }

        private void btnCancel_Click(object sender, EventArgs e)
        {
            this.Close();
        }

        private void btnSave_Click(object sender, EventArgs e)
        {
            Add();

            rtfNewQuestion.Text = string.Empty;
            rtfNewAnswer.Text = string.Empty;

            _frmMain.LoadData();
            this.Close();
        }

        private void Add()
        {
            string txtSQLQuery = &amp;quot;INSERT INTO Cards VALUES (&amp;quot; + _answerIndexNext + &amp;quot;,'&amp;quot; + rtfNewQuestion.Text + &amp;quot;','&amp;quot; + rtfNewAnswer.Text + &amp;quot;')&amp;quot;;
            _frmMain.ExecuteQuery(txtSQLQuery);
        }

        private void rtfNewQuestion_Enter(object sender, EventArgs e)
        {
            _rtfCurrent = this.rtfNewQuestion;
        }

        private void rtfNewAnswer_Enter(object sender, EventArgs e)
        {
            _rtfCurrent = this.rtfNewAnswer;
        }
        
        //
        // This method sends special keys like &#195;&#161;&#195;&#169;&#195;&#173;&#195;&#179;&#195;&#186;&#195;&#177;&#194;&#191; to the richtextbox  when entering new card data
        //
        private void btnSpaKey_Click(object sender, EventArgs e)
        {
            string _btnSpaKeyPressed = (sender as Button).Text;
            _rtfCurrent.Focus();
            SendKeys.Send(_btnSpaKeyPressed);

        }
    }
}

&lt;/pre&gt;</content>
    <author>
      <name>etherealmonkey.myopenid.com</name>
      <email>no-email@refactormycode.com</email>
    </author>
    <link type="text/html" href="http://www.refactormycode.com/codes/1084-flashcard-program-using-sqlite" rel="alternate"/>
  </entry>
</feed>

