Combo Box Selection Example

This is a small section of a database front end application written in C#. The database was designed to handle account data for an MMORPG. This form stores information for in game purchases but uses 3 different comboboxes which take data from other entities. The information displayed in each combobox can change depending on the chosen selection.

using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using System.Windows.Forms;

namespace MySQL_Interface
{
    public partial class ingamepurchase_form : Form
    {
        Form1 firstformRef;         //reference to main form
        bool insertFlag = false;    //are we in update mode?
        string updateId = "";       //record update ID if required

        //db object
        DBConnection mySqlSrc = new DBConnection();

        public ingamepurchase_form(ref Form1 form1Handle, bool isInsert, string upId)
        {
            //set vars from constructor locals
            updateId = upId;
            insertFlag = isInsert;
            firstformRef = form1Handle;
            InitializeComponent();

            //Bind comboBox to dictionary
            //This allows us a key - value pair

            //*********-------------CHARACTER COMBOBOX----------------*****
            Dictionary<string, string> igpCharIDItem = new Dictionary<string, string>();

            //Get a new list for results of CHARACTER table
            List<string>[] results = new List<string>[7];
            results = mySqlSrc.SelectCharacter();

            //count the rows
            int rows = results[0].Count;
            for (int i = 0; i < rows; ++i)
            {
                //[column][row]
                //add to the dictionary object the ID
                igpCharIDItem.Add(results[0][i], results[4][i]);
            }

            //bind the dictionary object and set Key -> Value
            //as id _> name
            igp_charID_cb.DataSource = new BindingSource(igpCharIDItem, null);
            igp_charID_cb.DisplayMember = "Value";
            igp_charID_cb.ValueMember = "Key";

            //*********-------------CATAGORY COMBOBOX----------------*****
            Dictionary<string, string> igpcatItem = new Dictionary<string, string>();
            igpcatItem.Add("1", "Item");
            igpcatItem.Add("2", "Weapon");
            igpcatItem.Add("3", "Armour");
            int c_rows = igpcatItem.Count;

            //bind the dictionary object and set Key -> Value
            //as id _> name
            igp_cat_cb.DataSource = new BindingSource(igpcatItem, null);
            igp_cat_cb.DisplayMember = "Value";
            igp_cat_cb.ValueMember = "Key";


            //*********-------------ITEM COMBOBOX----------------*****
            igp_cat_cb.SelectedIndexChanged += new EventHandler(igp_item_cb_SelectedIndexChanged);

            igp_item_cb.SelectedIndexChanged += new EventHandler(igp_price_txt_TextChanged);

            //get item results
            List<string>[] iresults = new List<string>[6];
            iresults = mySqlSrc.SelectItem();

            //get weapon results
            List<string>[] wresults = new List<string>[6];
            wresults = mySqlSrc.SelectWeapon();

            //get armour results
            List<string>[] aresults = new List<string>[6];
            aresults = mySqlSrc.SelectArmour();

            //count the rows
            int arows = aresults[0].Count;
            int wrows = wresults[0].Count;
            int irows = iresults[0].Count;

            //------------------------------if not insert mode (update mode)
            if (!insertFlag)
            {
                //create new results list
                List<string>[] upResults = new List<string>[5];

                //send ID to get results
                upResults = mySqlSrc.SelectInGamePurchaseRow(updateId);

                //update combo box
                //get CHARACTER ID from the selected record
                string temp_charID = upResults[1][0].ToString();
                //get TYPE ID from the selected record
                string temp_typeID = upResults[2][0].ToString();
                //get TYPE ID from the selected record
                string temp_name = upResults[3][0].ToString();

                //loop through rows of full CHARACTER results
                //(to loop through combo box)
                for (int i = 0; i < rows; ++i)
                {
                    //get the account_id of the current combo box index
                    string value = ((KeyValuePair<string, string>)igp_charID_cb.Items[i]).Key;

                    //if the value matches the current character_id
                    //set the SelectedIndex to this interation
                    //To display correct character
                    if (value == temp_charID)
                        igp_charID_cb.SelectedIndex = i;
                }

                //loop through rows of full CATAGORY results
                //(to loop through combo box)
                for (int i = 0; i < c_rows; ++i)
                {
                    //get the account_id of the current combo box index
                    string value = ((KeyValuePair<string, string>)igp_cat_cb.Items[i]).Key;

                    //if the value matches the current CAT ID
                    //set the SelectedIndex to this interation
                    //To display correct character
                    if (value == temp_typeID)
                        igp_cat_cb.SelectedIndex = i;
                }



                //loop through rows of full ITEM TYPE results
                //(to loop through combo box)
                if(((KeyValuePair<string, string>)igp_cat_cb.SelectedItem).Value.ToString() == "Item")
                {
                    for (int i = 0; i < irows; ++i)
                    {
                        //get the id of the current combo box index
                        string value = ((KeyValuePair<string, string>)igp_item_cb.Items[i]).Value;

                        //if the value matches the current ITEM ID
                        //set the SelectedIndex to this interation
                        //To display correct character
                        if (value == temp_name)
                            igp_item_cb.SelectedIndex = i;
                    }
                }
                if (((KeyValuePair<string, string>)igp_cat_cb.SelectedItem).Value.ToString() == "Armour")
                {
                    for (int i = 0; i < arows; ++i)
                    {
                        //get the id of the current combo box index
                        string value = ((KeyValuePair<string, string>)igp_item_cb.Items[i]).Value;

                        //if the value matches the current ITEM ID
                        //set the SelectedIndex to this interation
                        //To display correct character
                        if (value == temp_name)
                            igp_item_cb.SelectedIndex = i;
                    }
                }
                if (((KeyValuePair<string, string>)igp_cat_cb.SelectedItem).Value.ToString() == "Weapon")
                {
                    for (int i = 0; i < wrows; ++i)
                    {
                        //get the id of the current combo box index
                        string value = ((KeyValuePair<string, string>)igp_item_cb.Items[i]).Value ;

                        //if the value matches the current ITEM ID
                        //set the SelectedIndex to this interation
                        //To display correct character
                        if (value == temp_name)
                            igp_item_cb.SelectedIndex = i;
                    }
                }


                //update text box
                igp_price_txt.Text = upResults[4][0].ToString();
            }
        }

        private bool ValidateFields()
        {
            //valid flag and messagte
            bool validFlag = true;
            string validMsg = "";

            if (igp_charID_cb.Text.ToString() == "")
            {
                //if not update message and flag
                validMsg += "You need to select a character!";
                validFlag = false;
            }

            if (igp_cat_cb.Text.ToString() == "")
            {
                //if not update message and flag
                validMsg += "You need to select a catagory!";
                validFlag = false;
            }

            if (igp_item_cb.Text.ToString() == "")
            {
                //if not update message and flag
                validMsg += "You need to select an Item!";
                validFlag = false;
            }

            if (igp_price_txt.Text.ToString() == "")
            {
                //if not update message and flag
                validMsg += "Price has not been updated!";
                validFlag = false;
            }
                //if invalid show message
                if (!validFlag)
                MessageBox.Show(validMsg);

            //return result
            return validFlag;

        }

        private void ins_igp_btn_Click(object sender, EventArgs e)
        {
            //check if insert or update mode; send relevant data
            //to relevant methods to run queries following
            //validation checks
            if (insertFlag)
            {

                if (ValidateFields())
                {
                    mySqlSrc.InsertInGamePurchase(((KeyValuePair<string, string>)igp_charID_cb.SelectedItem).Key.ToString(),        //send character ID
                                                  ((KeyValuePair<string, string>)igp_cat_cb.SelectedItem).Key.ToString(),          //send itemtype ID
                                                  ((KeyValuePair<string, string>)igp_item_cb.SelectedItem).Value.ToString(),        //send item name
                                                  igp_price_txt.Text.ToString());                                                        //send item price
                    this.Close();
                }
            }
            else
            {
                if (ValidateFields())
                {
                    mySqlSrc.UpdateInGamePurchase(updateId, ((KeyValuePair<string, string>)igp_charID_cb.SelectedItem).Key.ToString(),        //send character ID
                                                            ((KeyValuePair<string, string>)igp_cat_cb.SelectedItem).Key.ToString(),          //send itemtype ID
                                                            ((KeyValuePair<string, string>)igp_item_cb.SelectedItem).Value.ToString(),        //send item name
                                                            igp_price_txt.Text.ToString());                                                   //send item price
                    this.Close();
                }
            }
        }

        //form closing event
        private void ingamepurchase_form_FormClosing(object sender, FormClosingEventArgs e)
        {
            firstformRef.ingamepurchaseFormIsOpen = false;
            firstformRef.SelectInGamePurchaseResults();
        }

        private void igp_cat_cb_SelectedIndexChanged(object sender, EventArgs e)
        {
            Dictionary<string, string> igpitemItem = new Dictionary<string, string>();

            if (((KeyValuePair<string, string>)igp_cat_cb.SelectedItem).Value.ToString() == "Item")
            {
                //Get a new list for results of ITEM table
                List<string>[] iresults = new List<string>[6];
                iresults = mySqlSrc.SelectItem();

                //count the rows
                int irows = iresults[0].Count;
                for (int i = 0; i < irows; ++i)
                {
                    //[column][row]
                    igpitemItem.Add(iresults[0][i], iresults[1][i]);
                }
            }

            if (((KeyValuePair<string, string>)igp_cat_cb.SelectedItem).Value.ToString() == "Weapon")
            {
                //Get a new list for results of WEAPON table
                List<string>[] wresults = new List<string>[6];
                wresults = mySqlSrc.SelectWeapon();

                //count the rows
                int wrows = wresults[0].Count;
                for (int i = 0; i < wrows; ++i)
                {
                    //[column][row]
                    //add to the dictionary object the ID
                    igpitemItem.Add(wresults[0][i], wresults[1][i]);
                }
            }

            if (((KeyValuePair<string, string>)igp_cat_cb.SelectedItem).Value.ToString() == "Armour")
            {
                //Get a new list for results of ARMOUR table
                List<string>[] aresults = new List<string>[6];
                aresults = mySqlSrc.SelectArmour();

                //count the rows
                int arows = aresults[0].Count;
                for (int i = 0; i < arows; ++i)
                {
                    //[column][row]
                    //add to the dictionary object the ID
                    igpitemItem.Add(aresults[0][i], aresults[1][i]);
                }
            }

            //bind the dictionary object and set Key -> Value
            //as id _> name
            igp_item_cb.DataSource = new BindingSource(igpitemItem, null);
            igp_item_cb.DisplayMember = "Value";
            igp_item_cb.ValueMember = "Key";
        }

        private void igp_item_cb_SelectedIndexChanged(object sender, EventArgs e)
        {
            //------------------------Get a new list for results of ITEM table
            List<string>[] iresults = new List<string>[6];
            iresults = mySqlSrc.SelectItem();

            List<string>[] wresults = new List<string>[6];
            wresults = mySqlSrc.SelectWeapon();

            List<string>[] aresults = new List<string>[6];
            aresults = mySqlSrc.SelectArmour();

            //count the rows
            int arows = aresults[0].Count;
            int wrows = wresults[0].Count;
            int irows = iresults[0].Count;

            if (((KeyValuePair<string, string>)igp_cat_cb.SelectedItem).Value.ToString() == "Armour")
            {
                for (int i = 0; i < arows; ++i)
                {
                    //[column][row]
                    //add to the dictionary object the ID
                    if (((KeyValuePair<string, string>)igp_item_cb.SelectedItem).Key.ToString() == aresults[0][i])
                        igp_price_txt.Text = aresults[5][i];
                }
            }

            if (((KeyValuePair<string, string>)igp_cat_cb.SelectedItem).Value.ToString() == "Weapon")
            {
                for (int i = 0; i < wrows; ++i)
                {
                    //[column][row]
                    if (((KeyValuePair<string, string>)igp_item_cb.SelectedItem).Key.ToString() == wresults[0][i])
                        igp_price_txt.Text = wresults[5][i];
                }
            }

            if (((KeyValuePair<string, string>)igp_cat_cb.SelectedItem).Value.ToString() == "Item")
            {
                for (int i = 0; i < irows; ++i)
                {
                    //[column][row]
                    if (((KeyValuePair<string, string>)igp_item_cb.SelectedItem).Key.ToString() == iresults[0][i])
                        igp_price_txt.Text = iresults[5][i];
                }
            }
        }

        private void igp_price_txt_TextChanged(object sender, EventArgs e)
        {
        }
    }
}