/// <summary>
        /// This describes how to launch the form etc.
        /// </summary>
        /// <param name="context"></param>
        /// <param name="provider"></param>
        /// <param name="value"></param>
        /// <returns></returns>
        public override object EditValue(System.ComponentModel.ITypeDescriptorContext context, IServiceProvider provider, object value)
        {
            _context = context;   
          

            IWindowsFormsEditorService dialogProvider = (IWindowsFormsEditorService)provider.GetService(typeof(IWindowsFormsEditorService));
            SQLExpressionDialog dlgExpression = new SQLExpressionDialog();
            string original = (string)value;
            dlgExpression.Expression = (string)value;

            // Try to find the Table
            IFeatureCategory category = context.Instance as IFeatureCategory;
            if (category != null)
            {
                IFeatureScheme scheme = category.GetParentItem() as IFeatureScheme;
                if (scheme != null)
                {
                    IFeatureLayer layer = scheme.GetParentItem() as IFeatureLayer;
                    if (layer != null)
                    {
                        dlgExpression.Table = layer.DataSet.DataTable;
                    }
                }
                else
                {
                    IFeatureLayer layer = category.GetParentItem() as IFeatureLayer;
                    if (layer != null)
                    {
                        dlgExpression.Table = layer.DataSet.DataTable;
                    }
                }
            }

            dlgExpression.ChangesApplied += dlgExpression_ChangesApplied;
            if (dialogProvider.ShowDialog(dlgExpression) != System.Windows.Forms.DialogResult.OK)
            {
                return original;
            }
            else
            {
                return dlgExpression.Expression;
            }
            
        }
        //User Click the Select Button
        private void BtnSelectClick(object sender, EventArgs e)
        {
            if (_enableUpdate)
            {
                if (((IndexParam) base.Param).Fs == null || ((IndexParam) base.Param).Fs.DataTable == null) return;

                if (((IndexParam) base.Param).Fs.DataTable.Rows.Count < 1) return;
                
                SQLExpressionDialog dlgExpression = new SQLExpressionDialog();
                dlgExpression.Table = ((IndexParam) base.Param).Fs.DataTable;
                dlgExpression.ShowDialog();
                
                if (dlgExpression.DialogResult == DialogResult.OK)
                {
                    _expression = dlgExpression.Expression;
                    textBox1.Text = _expression;
                    base.Status = ToolStatus.Ok;
                    _click = true;
                    LightTipText = MessageStrings.FeaturesSelected;
                }

                
            }
        }