/// <summary>
        /// IGenForm GetForm(int index)
        /// Get the form specified by the index
        /// </summary>
        /// <returns></returns>
        public IGenForm GetForm(int index)
        {
            IGenForm _form = new IGenForm();

            try
            {
                if (index >= 0 && index < forms.Count)
                {
                    _form = forms[index];
                }
            }
            catch (Exception ex)
            {
                CommonRoutines.DisplayErrorMessage("$E:" + moduleName + ".GetForm(i) > " + ex.Message);
            }

            return _form;
        }
        /// <summary>
        /// IGenForm GetForm(string formName)
        /// Get the form specified by the form name
        /// </summary>
        /// <returns></returns>
        public IGenForm GetForm(string formName)
        {
            IGenForm _form = new IGenForm();

            try
            {
                for (int n = 0; n < forms.Count; n++)
                {
                    if (formName.ToUpper() == forms[n].name.ToUpper())
                    {
                        _form = forms[n];
                        break;
                    }
                }
            }
            catch (Exception ex)
            {
                CommonRoutines.DisplayErrorMessage("$E:" + moduleName + ".GetForm(s) > " + ex.Message);
            }

            return _form;
        }
        public int CompileFormValues(string useSchema)
        {
            int _numFields = 0;
            bool _fieldReferencesResolved = true;
            int _startIndex = 0;
            int _endIndex = 0;
            string _sql = "";
            string _tableName = "";
            string _schema = "";
            IGenForm _form = new IGenForm();
            IGenField _field = new IGenField();
            string _useSchema = useSchema.Trim();

            try
            {
                compileErrors = false;
                compileErrorsMessages.Clear();

                if (_useSchema.ToUpper() == "<DEFAULT>" || _useSchema == "")
                {
                    _useSchema = "dbo";
                }

                CommonRoutines.compileErrors.Items.Clear();

                DisplayProgress(0, 0);
                int _totalFieldsToCompile = 0;
                int _fieldToCompile = 0;

                CommonRoutines.compileErrors.Items.Add("Compiling...");

                sql = "";

                #region [Resolve Datasets]

                DisplayStatus("Resolving datasets...");

                foreach (IGenDataset _ds in datasets)
                {
                    if (_ds.sql != "")
                    {
                        // is this a WSTF table reference or a vw_WSTF view reference?
                        string _overrideSchema = ConfigRoutines.GetSetting("OverrideSchema").ToUpper();
                        if (_overrideSchema.IndexOf('T') == 0)
                        {
                            _sql = _ds.sql;
                            // get the table/view specified
                            int _fromOffset = _sql.ToUpper().IndexOf(" FROM ");
                            if (_fromOffset > 0)
                            {
                                // is there a where clause?
                                int _whereOffset = _sql.ToUpper().IndexOf(" WHERE ", _fromOffset);
                                if (_whereOffset > 0)
                                {
                                    _tableName = _sql.Substring(_fromOffset, _whereOffset - _fromOffset).Trim();
                                    // set a marker
                                    _sql = _sql.Substring(0, _fromOffset + 6) + "^" + _sql.Substring(_whereOffset);
                                }
                                else
                                {
                                    _tableName = _sql.Substring(_fromOffset);
                                    _sql = _sql.Substring(0, _fromOffset + 6) + "^";
                                }

                                _tableName = _tableName.Substring(5).Trim();
                                // is there a prefix on it?
                                int _lastPeriod = _tableName.LastIndexOf('.');
                                if (_lastPeriod > 0)
                                {
                                    _schema = _tableName.Substring(0, _lastPeriod);
                                    if (_schema.ToUpper() == "DBO")
                                    {
                                        _tableName = _tableName.Substring(_lastPeriod + 1);
                                        _schema = _useSchema;
                                    }
                                    else
                                    {
                                        _schema = "";
                                    }
                                }
                                else
                                {
                                    if (_tableName.ToUpper().IndexOf("WSTF") >= 0)
                                    {
                                        _schema = _useSchema;
                                    }
                                }

                                if (_schema != "")
                                {
                                    if (_tableName.ToUpper().IndexOf("WSTF") >= 0)
                                    {
                                        _tableName = "[" + _useSchema + "]." + _tableName;
                                    }
                                }

                                // replace the table
                                _sql = _sql.Replace("^", _tableName).Replace("..", ".");

                                _ds.sql = _sql;
                            }
                        }

                        // get the fields from the sql
                        string[] _fieldNames = DatabaseRoutines.GetSQLFields(_ds.sql);
                        _ds.fieldNames = _fieldNames;

                        // get a count of the rows this will find
                        _ds.numRows = _ds.GetRowCount();
                    }
                }

                #endregion

                #region [Compiling forms]

                DisplayStatus("Compiling forms...");

                // reset the forms with the original values
                for (int n = 0; n < forms.Count; n++)
                {
                    _form = forms[n];
                    _totalFieldsToCompile = _totalFieldsToCompile + _form.formFields.fields.Count;
                    _form.datasets.Clear();

                    // for each of the datasetordinals, create a dataset entry
                    for (int m = 0; m < _form.datasetOrdinals.Count; m++)
                    {
                        int _dsOrdinal = _form.datasetOrdinals[m];

                        if (_dsOrdinal < 0)
                        {
                            break;
                        }

                        if (m == 0)
                        {
                            _form.datasetOrdinal = _dsOrdinal;
                            _form.dataset = datasets[_dsOrdinal];
                        }

                        // clone a dataset
                        IGenDataset _formDataset = datasets[_dsOrdinal].Clone();
                        _formDataset.referenceDatasetOrdinal = _dsOrdinal;
                        _form.datasets.Add(_formDataset);
                    }

                    // set the page collection
                    if (_form.datasetOrdinal >= 0)
                    {
                        _form.DeterminePages();
                    }

                    for (int m = 0; m < _form.formFields.fields.Count; m++)
                    {
                        // put here to fix the first textbox not retaining entered values
                        _field = _form.formFields.fields[m];

                        switch (_field.type.ToUpper())
                        {
                            case "TEXTBOX":
                            case "COMBOBOX":
                            case "CHECKBOX":
                                break;

                            default:
                                _field.compiledValue = _field.originalValue;
                                _field.value = _field.originalValue;
                                _field.text = "";
                                _form.formFields.fields[m] = _field;
                                break;

                        }
                    }
                }

                #endregion

                bool _needsResolving = true;

                while (_needsResolving)
                {
                    _fieldReferencesResolved = true;
                    _needsResolving = false;

                    for (int n = 0; n < forms.Count; n++)
                    {
                        _form = forms[n];

                        // for each field, resolve any [field] references to their {formnumber:fieldnumber}
                        for (int m = 0; m < _form.formFields.fields.Count; m++)
                        {
                            // get the value
                            _field = _form.formFields.fields[m];

                            _fieldToCompile = _fieldToCompile + 1;
                            DisplayProgress(_fieldToCompile, _totalFieldsToCompile);

                            string _value = _field.compiledValue;
                            string _compiledValue = _value;
                            string _fieldName = _field.name;

                            if (_value.Trim() != "" && _field.type.ToUpper() != "TEXTBOX")
                            {
                                // now loop until no more fields references are found
                                _needsResolving = true;

                                DisplayStatus("Resolving field " + _field.name + ", value=" + _value);

                                while (_needsResolving)
                                {
                                    _needsResolving = false;
                                    bool _keepChecking = true;

                                    #region [Functions]
                                    // check for functions that need expanding
                                    if (_value.ToUpper().IndexOf("=SUM(") >= 0 || _value.IndexOf("=ADD(") >= 0 ||
                                                _value.ToUpper().IndexOf("=SUBTRACT(") >= 0 || _value.IndexOf("=SUB(") >= 0 ||
                                                _value.ToUpper().IndexOf("=MULTIPLY(") >= 0 || _value.IndexOf("=MULT(") >= 0 ||
                                                _value.ToUpper().IndexOf("=DIVIDE(") >= 0 || _value.IndexOf("=DIV(") >= 0)
                                    {
                                        _needsResolving = true;

                                        // get the start...
                                        int _index = _value.IndexOf('=');

                                        // sum the fields given
                                        _startIndex = _value.IndexOf('(');
                                        _endIndex = _value.IndexOf(')');
                                        string _fields = "";
                                        if (_endIndex <= _startIndex)
                                        {
                                            _needsResolving = false;
                                            compileErrors = true;
                                            compileErrorsMessages.Add(_fieldName + " has missing ending paren: " + _compiledValue);
                                        }

                                        if (_endIndex > _startIndex)
                                        {
                                            _fields = _value.Substring(_startIndex + 1, _endIndex - _startIndex - 1);
                                            if (_fields != "")
                                            {
                                                if (_fields.IndexOf('*') >= 0)
                                                {
                                                    // get the list, exclude the field on if it is part of the pattern
                                                    _fields = GetFieldNames(forms[n].name, _fieldName, _fields);
                                                    // not parse it out and create [field] + [field] + [field] + ...
                                                    string[] _parts = _fields.Split('~');
                                                    _fields = "";
                                                    for (int k = 0; k < _parts.Length; k++)
                                                    {
                                                        if (_parts[k].Trim() != "")
                                                        {
                                                            //_fields = _fields + "[" + _parts[k].Trim() + "] + ";
                                                            // now determine the operator
                                                            if (_value.ToUpper().IndexOf("=SUM(") >= 0 || _value.IndexOf("=ADD(") >= 0)
                                                            {
                                                                _fields = _fields + "[" + _parts[k].Trim() + "] + ";
                                                            }
                                                            else
                                                            {
                                                                if (_value.ToUpper().IndexOf("=SUBTRACT(") >= 0 || _value.IndexOf("=SUB(") >= 0)
                                                                {
                                                                    _fields = _fields + "[" + _parts[k].Trim() + "] - ";
                                                                }
                                                                else
                                                                {
                                                                    if (_value.ToUpper().IndexOf("=MULTIPLY(") >= 0 || _value.IndexOf("=MULT(") >= 0)
                                                                    {
                                                                        _fields = _fields + "[" + _parts[k].Trim() + "] / ";
                                                                    }
                                                                    else
                                                                    {
                                                                        if (_value.ToUpper().IndexOf("=DIVIDE(") >= 0 || _value.IndexOf("=DIV(") >= 0)
                                                                        {
                                                                            _fields = _fields + "[" + _parts[k].Trim() + "] * ";
                                                                        }
                                                                    }
                                                                }

                                                            }
                                                        }
                                                    }

                                                    // get rid of the last +
                                                    if (_fields.Length > 0)
                                                    {
                                                        _fields = _fields.Substring(0, _fields.Length - 2);
                                                    }
                                                }
                                                else
                                                {
                                                    char _listChar = ' ';
                                                    // is there a list (separated by comma)
                                                    if (_fields.IndexOf(',') > 0)
                                                    {
                                                        _listChar = ',';
                                                    }
                                                    else
                                                    {
                                                        if (_fields.IndexOf('+') > 0)
                                                        {
                                                            _listChar = '+';
                                                        }
                                                    }
                                                    if (_listChar != ' ')
                                                    {
                                                        string[] _fieldList = _fields.Split(_listChar);
                                                        if (_fieldList.Length > 1)
                                                        {
                                                            _fields = "";
                                                            for (int j = 0; j < _fieldList.Length; j++)
                                                            {
                                                                if (_fieldList[j].Trim() != "")
                                                                {
                                                                    _fields = _fields + "[" + _fieldList[j] + "] + ";
                                                                }
                                                            }
                                                            // get rid of the last +
                                                            _fields = _fields.Substring(0, _fields.Length - 2);
                                                        }
                                                    }
                                                    else
                                                    {
                                                        _fields = "[" + _fields + "]";
                                                    }
                                                }

                                                // now replace the functional part
                                                if (_index == 0)
                                                {
                                                    _value = _fields + _value.Substring(_endIndex + 1);
                                                }
                                                else
                                                {
                                                    _value = _value.Substring(0, _index) + _fields + _value.Substring(_endIndex + 1);
                                                }
                                                if (_value.Length > 0)
                                                {
                                                    _value = "=" + _value;
                                                }
                                            }
                                            else
                                            {
                                                _value = "";
                                            }

                                            // replace the compiled value
                                            _field = _form.formFields.fields[m];
                                            _field.compiledValue = _value;
                                            _field.text = "";
                                            _form.formFields.fields[m] = _field;

                                        }
                                    }

                                    #endregion

                                    // check for fields
                                    if (_value.IndexOf('[') >= 0)
                                    {
                                        IGenField _tempField = _form.formFields.fields[m];
                                        // resolve the value to it's compiled format
                                        string _tempValue = ResolveFields(_tempField);
                                        _value = _tempValue;
                                        _fieldReferencesResolved = false;
                                        _numFields = _numFields + 1;
                                        _needsResolving = true;
                                    }

                                    #region [Check for GDS(]

                                    // check for GDS columns
                                    if (_value.ToUpper().IndexOf("GDS(") >= 0)
                                    {
                                        if (datasetName != "")
                                        {
                                            // replace the compiled value
                                            _field = _form.formFields.fields[m];
                                            _value = _field.value;
                                            // datasetname here is the default one specified for the form group
                                            _value = ResolveDS(datasetName, _field, _value, "GDS(");
                                        }
                                        else
                                        {
                                            _value = "";
                                        }
                                        _field.compiledValue = _value;
                                        _field.text = "";
                                        _form.formFields.fields[m] = _field;
                                        _keepChecking = false;
                                    }

                                    #endregion [Check for GDS(]

                                    #region [Check for DS(]

                                    if (_value.ToUpper().IndexOf("DS(") >= 0)
                                    {
                                        // replace the compiled value
                                        _field = _form.formFields.fields[m];
                                        //_value = _field.value;
                                        _value = ResolveDS(_form.datasetName, _field, _value, "DS(");
                                        _field.compiledValue = _value;
                                        _field.text = "";
                                        _form.formFields.fields[m] = _field;
                                        _keepChecking = false;
                                    }
                                    #endregion [Check for DS(]

                                    #region [Check for DSLOOKUP(]

                                    if (_value.ToUpper().IndexOf("DSLOOKUP(") >= 0)
                                    {
                                        // syntax:  DSLOOKUP(<dsname|dsordinal!>columnname, filter>
                                        // replace the compiled value
                                        _field = _form.formFields.fields[m];
                                        //_value = _field.value;
                                        _value = ResolveDS(_form.datasetName, _field, _value, "DSLOOKUP(");
                                        _field.compiledValue = _value;
                                        _field.text = "";
                                        _form.formFields.fields[m] = _field;
                                        _keepChecking = false;
                                    }
                                    #endregion [Check for DSLOOKUP(]

                                    #region [Check for PAGEBREAK(]

                                    if (_value.ToUpper().IndexOf("PAGEBREAK(") >= 0)
                                    {
                                        // syntax:  PAGEBREAK(dsname|dsordinal!, true stmt, false stmt>
                                        // replace the compiled value
                                        _field = _form.formFields.fields[m];
                                        //_value = _field.value;
                                        _value = ResolveDS(_form.datasetName, _field, _value, "PAGEBREAK(");
                                        _field.compiledValue = _value;
                                        _field.text = "";
                                        _form.formFields.fields[m] = _field;
                                        _keepChecking = false;
                                    }
                                    #endregion [Check for PAGEBREAK(]

                                    if (_keepChecking)
                                    {
                                        // regular
                                        #region [No functions found]
                                        // replace the compiled value
                                        _field = _form.formFields.fields[m];
                                        _field.compiledValue = _value;
                                        _field.text = "";
                                        _form.formFields.fields[m] = _field;
                                        #endregion
                                    }
                                }
                            }

                        }
                    }
                }

                DisplayStatus("Done!");

                DisplayProgress(0, 0);

                // were there any errors?
                if (compileErrors)
                {
                    DisplayStatus("Compiled with errors.");
                    CommonRoutines.compileErrors.Items.Add("Compiled with errors");

                    if (CommonRoutines.compileErrors == null)
                    {
                        CommonRoutines.compileErrors = new ListBox();
                    }
                    // output the errors
                    if (compileErrorsMessages.Count > 0)
                    {
                        // write out the compile errors.
                        CommonRoutines.WriteFile(".\\compile_errors.txt", compileErrorsMessages);

                        for (int n = 0; n < compileErrorsMessages.Count; n++)
                        {
                            CommonRoutines.compileErrors.Items.Add(compileErrorsMessages[n]);
                        }

                    }

                }

                CommonRoutines.compileErrors.Items.Add("Done.");

            }
            catch (Exception ex)
            {
                CommonRoutines.DisplayErrorMessage("$E:" + moduleName + ".CompileFormValues > " + ex.Message);
            }

            // output the fields for debugging
            OutputFormInfo("CompiledFields.txt");

            return _numFields;
        }
        /// <summary>
        /// string LoadFormGroup(string formFile)
        /// Load the form group
        /// </summary>
        /// <returns></returns>
        public int CreateForms(List<string> xmlRecords)
        {
            int _numForms = 0;
            string _tagName = "";
            string _tagValue = "";
            bool _formFlag = false;
            bool _fieldFlag = false;
            bool _ruleFlag = false;
            bool _datasetFlag = false;
            IGenForm _form = null;
            IGenField _field = null;
            IGenDataset _dataset = null;
            string _formGroupPath = "";
            bool _variableFlag = false;
            string _variableName = "";
            string _variableValue = "";

            try
            {
                // clear the forms collection
                forms.Clear();

                // clear the datasets
                datasets.Clear();

                // walk the XML and create the entities
                for (int _recNo=0;_recNo < xmlRecords.Count;_recNo++)
                //foreach (string _xmlRecord in xmlRecords)
                {
                    string _xmlRecord = xmlRecords[_recNo];

                    // parse the string
                    int _offset = _xmlRecord.IndexOf('=');
                    if (_offset > 0)
                    {
                        _tagName = _xmlRecord.Substring(0, _offset);
                        _tagValue = _xmlRecord.Substring(_offset + 1);
                    }
                    else
                    {
                        _tagName = _xmlRecord;
                        _tagValue = "";
                    }

                    _tagName = _tagName.Trim().ToUpper();
                    _tagValue = _tagValue.Trim();

                    if (_tagName != "")
                    {
                        // process the tag
                        switch (_tagName)
                        {

                            case "FORMGROUPPATH":
                                _formGroupPath = _tagValue;
                                break;

                            case "FORMS":
                                _formFlag = false;
                                _fieldFlag = false;
                                _ruleFlag = false;
                                _form = null;
                                break;

                            case "FORM":
                                _formFlag = true;
                                _fieldFlag = false;
                                _ruleFlag = false;
                                // create a form object
                                _form = new IGenForm();
                                _form.formGroupPath = _formGroupPath;
                                forms.Add(_form);
                                break;

                            case "FIELDS":
                                _formFlag = false;
                                _fieldFlag = false;
                                _ruleFlag = false;
                                _field = null;
                                break;

                            case "FIELD":
                                _formFlag = false;
                                _fieldFlag = true;
                                _ruleFlag = false;
                                _field = new IGenField();
                                _field.parentFormName = _form.name;
                                // add it
                                _form.AddField(_field);
                                break;

                            case "FONT":
                                break;

                            case "/FONT":
                                break;

                            case "PROPERTIES":
                                break;

                            case "/PROPERTIES":
                                break;

                            case "RULES":
                                break;

                            case "/RULES":
                                break;

                            case "RULE":
                                break;

                            case "/RULE":
                                break;

                            case "VARIABLES":
                                _variableFlag = true;
                                break;

                            case "/VARIABLES":
                                _variableFlag = false;
                                break;

                            case "VARIABLE":
                                break;

                            case "/VARIABLE":
                                // write the variable to the csa properties
                                if (_variableName != "")
                                {
                                    formVariables.Add(new string[] { _variableName, _variableValue });
                                }
                                break;

                            case "/FIELD":
                                _formFlag = false;
                                _fieldFlag = false;
                                _ruleFlag = false;
                                break;

                            case "/FORM":
                                _formFlag = false;
                                _fieldFlag = false;
                                _ruleFlag = false;
                                break;

                            case "/FORMS":
                                break;

                            // not the attribute tags
                            case "GROUP":
                                formGroupName = _tagValue;
                                break;

                            case "VERSION":
                                formGroupVersion = _tagValue;
                                break;

                            case "DATASOURCE":
                                // see if this datasource is valid by checking the connection pool.
                                originalDataSource = _tagValue;
                                dataSource = "";
                                for (int n = 0; n < DatabaseRoutines.connectionObjects.Count; n++)
                                {
                                    if (DatabaseRoutines.connectionObjects[n].connectionString.ToUpper() == _tagValue.ToUpper())
                                    {
                                        dataSource = _tagValue;
                                        break;
                                    }
                                }
                                // if datasource is blank, default to main connection
                                if (dataSource == "")
                                {
                                    dataSource = DatabaseRoutines.MainConnection;
                                }
                                break;

                            case "GROUPDATASET":
                                datasetName = "";
                                if (_tagValue != "")
                                {
                                    _dataset = new IGenDataset();
                                    _dataset.cursorName = formGroupName;
                                    datasetName = formGroupName;
                                    _dataset.sql = _tagValue;
                                    datasets.Add(_dataset);
                                    _dataset = new IGenDataset();
                                }
                                break;

                            case "FORMDATASET":
                                if (_formFlag)
                                {
                                    _form.datasetName = "";
                                    if (_tagValue != "")
                                    {
                                        _dataset = new IGenDataset();
                                        _dataset.cursorName = _form.name;
                                        _form.datasetName = _form.name;
                                        _dataset.sql = _tagValue;
                                        datasets.Add(_dataset);
                                        _dataset = new IGenDataset();
                                    }
                                }
                                break;

                            case "DATASET":
                                _datasetFlag = true;
                                _dataset = new IGenDataset();
                                break;

                            case "/DATASET":
                                _datasetFlag = false;
                                // add to the dataset collection
                                datasets.Add(_dataset);
                                _dataset = new IGenDataset();
                                break;

                            case "SQL":
                                if (_datasetFlag)
                                {
                                    _dataset.sql = _tagValue;
                                }
                                break;

                            case "DATASETNAME":
                                string _datasetName = _tagValue;
                                int _datasetOrdinal = -1;
                                // find it in the group datasets collection
                                for (int n = 0; n < datasets.Count; n++)
                                {
                                    if (datasets[n].cursorName.ToUpper() == _datasetName.ToUpper())
                                    {
                                        _datasetOrdinal = n;
                                        break;
                                    }
                                }
                                if (_formFlag)
                                {
                                    // add it to the datasetname list for the form
                                    _form.datasetOrdinals.Add(_datasetOrdinal);
                                    _form.datasetNames.Add(_datasetName);
                                    if (_form.datasetName == "")
                                    {
                                        // default name is the first one in the xml list
                                        _form.datasetName = _datasetName;
                                        _form.datasetOrdinal = _datasetOrdinal;
                                    }
                                }
                                else
                                {
                                    datasetName = _datasetName;        // for the GDS function
                                    datasetOrdinal = _datasetOrdinal;
                                }
                                break;

                            case "ROWSPERPAGE":
                                if (_formFlag)
                                {
                                    int _rowsPerPage = CommonRoutines.ConvertToInt(_tagValue);
                                    // check to see if this is a multipage form
                                    if (_form.multiPageForm.ToUpper() == "TRUE")
                                    {
                                        if (_rowsPerPage < 1)
                                        {
                                            // give an error!
                                            CommonRoutines.DisplayErrorMessage(_form.name + " - Rows per page must be greater than 0 if a multipage form");
                                        }
                                        else
                                        {
                                            _form.rowsPerPages.Add(_rowsPerPage);
                                            if (_form.rowsPerPage < 0)
                                            {
                                                _form.rowsPerPage = _rowsPerPage;
                                            }
                                        }
                                    }
                                }
                                break;

                            case "/SQL":
                                break;

                            case "IMAGE":
                                if (_formFlag)
                                {
                                    _form.imageName = _tagValue;
                                }
                                else
                                {
                                    if (_fieldFlag)
                                    {
                                        _field.imageName = _tagValue;
                                    }
                                    else
                                    {

                                    }
                                }
                                break;

                            case "COMMENTS":
                                if (_formFlag)
                                {
                                    _form.comments = _tagValue;
                                }
                                else
                                {
                                    if (_fieldFlag)
                                    {
                                        _field.comments = _tagValue;
                                    }
                                    else
                                    {
                                        comments = _tagValue;
                                    }
                                }
                                break;

                            case "NAME":
                                if (_formFlag)
                                {
                                    _form.name = _tagValue;
                                }
                                else
                                {
                                    if (_fieldFlag)
                                    {
                                        _field.name = _tagValue;
                                    }
                                    else
                                    {
                                        if (_datasetFlag)
                                        {
                                            _dataset.cursorName = _tagValue;
                                        }
                                        else
                                        {
                                            if (_variableFlag)
                                            {
                                                _variableName = _tagValue;
                                            }
                                        }
                                    }
                                }
                                break;

                            case "CREATESYMBOLICS":
                                if (_datasetFlag)
                                {
                                    _dataset.createSymbolics = CommonRoutines.ConvertToBool(_tagValue);
                                }
                                break;

                            case "FORMATMASK":
                                if (_formFlag)
                                {
                                }
                                else
                                {
                                    if (_fieldFlag)
                                    {
                                        _field.formatMask = _tagValue;
                                    }
                                }
                                break;

                            case "VISIBLE":
                                if (_formFlag)
                                {
                                    _form.visible = (_tagValue.ToUpper() == "TRUE") ? true : false;
                                }
                                else
                                {
                                    if (_fieldFlag)
                                    {
                                        _field.visible = (_tagValue.ToUpper() == "TRUE") ? true : false;
                                    }
                                    else
                                    {

                                    }
                                }
                                break;

                            case "FORMTYPE":
                                if (_formFlag)
                                {
                                    _form.formType = _tagValue;
                                }
                                break;

                            case "TITLE":
                                if (_formFlag)
                                {
                                    _form.title = _tagValue;
                                }
                                break;

                            case "MULTIPAGEFORM":
                                if (_formFlag)
                                {
                                    _form.multiPageForm = (_tagValue.ToUpper() == "TRUE") ? "True" : "False";
                                }
                                break;

                            case "PAGEBREAKS":
                                if (_formFlag)
                                {
                                    _form.pageBreaks = _tagValue;
                                }
                                break;

                            case "PROCESSINGORDER":
                                if (_formFlag)
                                {
                                    _form.processingOrder = CommonRoutines.ConvertToInt(_tagValue);
                                    if (_form.processingOrder == 0)
                                    {
                                        _form.processingOrder = 999;
                                    }
                                }
                                break;

                            case "TYPE":
                                if (_fieldFlag)
                                {
                                    _field.type = _tagValue;
                                }
                                else
                                {

                                }
                                break;

                            case "DATATYPE":
                                if (_fieldFlag)
                                {
                                    _field.dataType = _tagValue;
                                }
                                else
                                {

                                }
                                break;

                            case "ALIGNMENT":
                                if (_fieldFlag)
                                {
                                    _field.alignment = _tagValue;
                                }
                                else
                                {

                                }
                                break;

                            case "TOP":
                                if (_fieldFlag)
                                {
                                    _field.top = CommonRoutines.ConvertToInt(_tagValue);
                                }
                                else
                                {

                                }
                                break;

                            case "LEFT":
                                if (_fieldFlag)
                                {
                                    _field.left = CommonRoutines.ConvertToInt(_tagValue);
                                }
                                else
                                {

                                }
                                break;

                            case "WIDTH":
                                if (_fieldFlag)
                                {
                                    _field.width = CommonRoutines.ConvertToInt(_tagValue);
                                }
                                else
                                {

                                }
                                break;

                            case "HEIGHT":
                                if (_fieldFlag)
                                {
                                    _field.height = CommonRoutines.ConvertToInt(_tagValue);
                                }
                                else
                                {

                                }
                                break;

                            case "TAG":
                                if (_fieldFlag)
                                {
                                    _field.tag = _tagValue;
                                }
                                else
                                {

                                }
                                break;

                            case "FONTNAME":
                                if (_fieldFlag)
                                {
                                    _field.fontName = _tagValue;
                                }
                                else
                                {

                                }
                                break;

                            case "FONTSIZE":
                                if (_fieldFlag)
                                {
                                    _field.fontSize = CommonRoutines.ConvertToFloat(_tagValue);
                                }
                                else
                                {

                                }
                                break;

                            case "FONTBOLD":
                                if (_fieldFlag)
                                {
                                    _field.fontBold = (_tagValue.ToUpper() == "TRUE") ? true : false; ;
                                }
                                else
                                {

                                }
                                break;

                            case "FONTITALIC":
                                if (_fieldFlag)
                                {
                                    _field.fontItalic = (_tagValue.ToUpper() == "TRUE") ? true : false; ;
                                }
                                else
                                {

                                }
                                break;

                            case "FONTUNDERLINE":
                                if (_fieldFlag)
                                {
                                    _field.fontUnderline = (_tagValue.ToUpper() == "TRUE") ? true : false; ;
                                }
                                else
                                {

                                }
                                break;

                            case "TABINDEX":
                                if (_fieldFlag)
                                {
                                    _field.tabIndex = CommonRoutines.ConvertToInt(_tagValue);
                                }
                                else
                                {

                                }
                                break;

                            case "LIST":
                                if (_fieldFlag)
                                {
                                    _field.list = _tagValue;
                                }
                                else
                                {

                                }
                                break;

                            case "VALUE":
                                if (_fieldFlag)
                                {
                                    // if it is not an expression
                                    if (_tagValue.IndexOf('=') < 0)
                                    {
                                        if (_field.type.ToUpper().IndexOf("CHECKBOX") >= 0)
                                        {
                                            bool _checkValue = CommonRoutines.ConvertToBool(_tagValue);
                                            _field.value = _checkValue.ToString();
                                            _field.checkedFlag = _checkValue;
                                        }
                                    }
                                    else
                                    {
                                        _field.value = _tagValue;
                                    }
                                    _field.originalValue = _field.value;
                                    _field.compiledValue = _field.value;
                                }
                                else
                                {
                                    if (_variableFlag)
                                    {
                                        _variableValue = _tagValue;
                                    }
                                }
                                break;

                            case "TEXT":
                                if (_fieldFlag)
                                {
                                    _field.text = _tagValue;
                                }
                                else
                                {

                                }
                                break;

                            case "CAPTION":
                                if (_fieldFlag)
                                {
                                    _field.caption = _tagValue;
                                }
                                else
                                {

                                }
                                break;

                            case "INSTRUCTIONS":
                                if (_formFlag)
                                {
                                    _form.instructions = _tagValue;
                                }
                                else
                                {
                                    if (_fieldFlag)
                                    {
                                        _field.instructions = _tagValue;
                                    }
                                    else
                                    {

                                    }
                                }
                                break;

                            case "PRINTORIENTATION":
                                if (_formFlag)
                                {
                                    _form.printOrientation = _tagValue;
                                }
                                else
                                {
                                    if (_fieldFlag)
                                    {
                                    }
                                    else
                                    {

                                    }
                                }
                                break;

                            case "LAYER":
                                if (_fieldFlag)
                                {
                                    _field.layer = CommonRoutines.ConvertToInt(_tagValue);
                                }
                                else
                                {

                                }
                                break;

                            case "EDIFLAG":
                                if (_fieldFlag)
                                {
                                    _field.ediFlag = (_tagValue + "N").Substring(0, 1);
                                }
                                else
                                {

                                }
                                break;

                            case "EDINAME":
                                if (_fieldFlag)
                                {
                                    _field.ediName = _tagValue.ToUpper();
                                }
                                else
                                {

                                }
                                break;

                            default:
                                // all other tags
                                if (_fieldFlag)
                                {
                                    _field.AddProperty(_tagName, _tagValue);
                                }
                                else
                                {

                                }
                                break;

                        }
                    }
                }

            }
            catch (Exception ex)
            {
                CommonRoutines.DisplayErrorMessage("$E:" + moduleName + ".CreateForms > " + ex.Message);
            }

            _numForms = forms.Count;

            return _numForms;
        }
        private void GotoPage(IGenForm form, int pageNo)
        {
            int _pageNo = pageNo;
            // set the cursor
            Cursor _saveCursor = this.Cursor;

            try
            {

                this.Cursor = Cursors.WaitCursor;

                IGenForm _form = form;

                DisplayStatus("Paging form " + _form.name);

                // page each of the dataset ordinals
                for (int n = 0; n < _form.datasets.Count; n++)
                {
                    int _dsOrdinal = _form.datasets[n].referenceDatasetOrdinal;

                    // get the dataset defined
                    if (_dsOrdinal >= 0)
                    {
                        _pageNo = pageNo;

                        // set the pages
                        _form.datasetOrdinal = _dsOrdinal;
                        _form.dataset = _form.datasets[n];  // displayIGenForms.datasets[_dsOrdinal];
                        _form.pages = _form.dataset.pages;
                        _form.dataset.currentPosition = _pageNo;
                        _form.rowsPerPage = _form.rowsPerPages[n];

                        // see if the page number sent is valid for the number of pages determined
                        if (_form.pages.Count > 0)
                        {
                            //if (_pageNo < 1)
                            //{
                            //    _pageNo = 1;
                            //}
                            //else
                            //{
                            //    if (_pageNo > _form.pages.Count)
                            //    {
                            //        _pageNo = _form.pages.Count;
                            //    }
                            //}

                            _form.currentPage = _pageNo;

                            // offset the row
                            _pageNo = _pageNo - 1;

                            // set the referenced dataset
                            IGenDataset _ds = displayIGenForms.datasets[_dsOrdinal];

                            if (_pageNo < _form.pages.Count)
                            {
                                // get the starting and ending values
                                int _startingRow = _form.pages[_pageNo].startingRow;
                                int _endingRow = _form.pages[_pageNo].endingRow;
                                int _numRows = _endingRow - _startingRow + 1;

                                tbrMainPageNo.Text = _form.currentPage.ToString();
                                tbrMainTotalPages.Text = _form.totalPages.ToString();
                                Application.DoEvents();

                                // see if there are any rows...
                                if (_ds.numRows > 0)
                                {
                                    _ds.currentPosition = _startingRow - 1;

                                    // get the rows for this page
                                    List<string[]> _results = _ds.GetRows(_startingRow, _numRows);

                                    _ds.results = _results;

                                    _form.dataset.results = _results;

                                    if (_results != null && _results.Count > 0)
                                    {
                                        _form.currentRow = _startingRow;
                                        tbrMainPageNo.Text = _form.currentPage.ToString();
                                        tbrMainTotalPages.Text = _form.totalPages.ToString();
                                        Application.DoEvents();

                                    }
                                }

                                //DisplayStatus("S=" + _startingRow + ", E=" + _endingRow + ", N=" + _numRows);
                            }
                            else
                            {
                                // clear out the result set of this dataset
                                _ds.results.Clear();
                                _form.dataset.results.Clear();
                            }
                        }
                    }
                }

                // refresh the page
                if (tabForms.SelectedTab != null)
                {
                    string _formName = _form.name;
                    PictureBox _pallet = (PictureBox)tabForms.SelectedTab.Controls[0];
                    displayIGenForms.RedisplaySelectedForm(_pallet, _formName);
                }

            }
            catch (Exception ex)
            {
                CommonRoutines.DisplayErrorMessage("$E:" + moduleName + ".GotoPage > " + ex.Message);
            }

            this.Cursor = _saveCursor;

            DisplayStatus("Ready");

            return;
        }