private void addKeyToolStripMenuItem_Click(object sender, EventArgs e)
        {
            AddConfigValue input = new AddConfigValue();
            input.ShowDialog();
            string pKey = input.getPKey();
            string pValue = input.getPValue();

            PKeyValuePair newKeyValuePair = new PKeyValuePair { PKey = pKey, PValue = pValue };
            upsertPKeyValuePair(newKeyValuePair, true);
        }
 private int upsertPKeyValuePair(string pKey, string pValue, bool appendAtEnd)
 {
     PKeyValuePair newPair = new PKeyValuePair { PKey = pKey, PValue = pValue };
     return upsertPKeyValuePair(newPair, appendAtEnd);
 }
        private int loadConfigurationFile(string filePath)
        {
            bool currentConfigCleared = false;
            int keyCount = 0;

            System.IO.StreamReader file;
            string fileCurrentLine;

            if (!File.Exists(filePath))
                return -1;

            file = new System.IO.StreamReader(filePath);

            while ((fileCurrentLine = file.ReadLine()) != null)
            {
                string fileCurrentLineTrimmed = fileCurrentLine.Trim();
                if (String.IsNullOrEmpty(fileCurrentLineTrimmed) || fileCurrentLineTrimmed[0] == '#') // ignore config/template blank lines and comment lines
                    continue;
                else if (fileCurrentLineTrimmed[0] == 'P')
                {
                    string pKey;
                    string pValue;
                    char[] delimeter = { '=' };
                    string[] fileCurrentLineSplit = fileCurrentLineTrimmed.Split(delimeter, 2);

                    pKey = fileCurrentLineSplit[0].Trim();

                    if (fileCurrentLineSplit.Length < 2 || String.IsNullOrEmpty(fileCurrentLineSplit[1]))
                        pValue = String.Empty;
                    else
                        pValue = fileCurrentLineSplit[1].Trim();

                    PKeyValuePair newPair = new PKeyValuePair { PValue = pValue, PKey = pKey };

                    if (!currentConfigCleared)
                    {
                        currentConfig.Clear();
                        currentConfigCleared = true;
                    }

                    currentConfig.Add(newPair);
                    keyCount++;
                }
            }
            file.Close();

            return keyCount;
        }
        private int upsertPKeyValuePair(PKeyValuePair newPair, bool appendAtEnd)
        {
            string pKey = newPair.PKey;
            string pValue = newPair.PValue;

            if (pKey.CompareTo(String.Empty) == 0)
                return -2; // no point adding an invalid/blank key

            // Before adding, we need to see if the new pair is a duplicate of one already existing in our currentConfig list.

            foreach (PKeyValuePair pair in currentConfig)
            {
                if (pair.PKey.CompareTo(pKey) == 0) // if a duplicate is detected, only update the value.
                {
                    pair.PValue = pValue;
                    configDataView.UpdateCellValue(1, currentConfig.IndexOf(pair)); // update field if it was a duplicate
                    return currentConfig.IndexOf(pair); // exit here and return where we updated
                }
            }

            // Next we add our pair object and insert it before the current index.
            if (!appendAtEnd)
                currentConfig.Insert(contextRow.RowIndex, newPair);
            else
                currentConfig.Add(newPair);

            return -1;
        }
        private void insertNewToolStripMenuItem_Click(object sender, EventArgs e)
        {
            AddConfigValue input = new AddConfigValue();
            input.ShowDialog();
            string pKey = input.getPKey();
            string pValue = input.getPValue();

            // Next we create our pair object and insert it before the current index.*/
            PKeyValuePair newKeyValuePair = new PKeyValuePair { PKey = pKey, PValue = pValue };
            upsertPKeyValuePair(newKeyValuePair, false);
        }