Beispiel #1
0
        /// <summary>
        /// 根据操作符枚举变量得到实际的操作符
        /// </summary>
        /// <param name="filterOperator">操作符枚举变量</param>
        /// <returns>实际的操作符</returns>
        public static string GetOperatorSign(CompareOperator filterOperator)
        {
            switch (filterOperator)
            {
            case CompareOperator.Equal:
                return("=");

            case CompareOperator.In:
                return("IN");

            case CompareOperator.Less:
                return("<");

            case CompareOperator.Like:
                return("LIKE");

            case CompareOperator.More:
                return(">");

            case CompareOperator.NotEqual:
                return("<>");

            case CompareOperator.NotLess:
                return(">=");

            case CompareOperator.NotMore:
                return("<=");

            default:
                throw new ArgumentOutOfRangeException(MessageStringManager.GetString("OperatorSignNotDefined"));
            }
        }
Beispiel #2
0
        /// <summary>
        /// 创建过滤参数
        /// </summary>
        /// <param name="fieldName">参数对应的数据集字段名</param>
        /// <param name="name">参数的名称</param>
        /// <param name="isString">标记参数是否是字符型</param>
        /// <param name="description">参数的描述</param>
        /// <param name="allowUserEdit">允许普通用户编辑参数值</param>
        /// <param name="sign">运算符</param>
        public FilterParameter(string fieldName, string name, bool isString
                               , string description, bool allowUserEdit, CompareOperator sign)
        {
            if (String.IsNullOrEmpty(fieldName))
            {
                throw new ArgumentNullException(MessageStringManager.GetString("NullFieldName"));
            }
            if (String.IsNullOrEmpty(name))
            {
                throw new ArgumentNullException(MessageStringManager.GetString("NullParameterName"));
            }
            if ((!isString) && (sign == CompareOperator.Like))
            {
                throw new ArgumentException(MessageStringManager.GetString("UseLikeOperatprOnDigitalParameter"));
            }

            _fieldName     = fieldName;
            _caption       = name;
            _isString      = isString;
            _description   = description;
            _allowUserEdit = allowUserEdit;
            _operator      = sign;
            _dataCatalog   = -1;

            //_enable = false;
        }
Beispiel #3
0
        /// <summary>
        /// 对传入的条件表达式字符串中的特殊字符进行转义。
        /// 在生成DataView或DataColumn的Expression时需要进行此处理
        /// </summary>
        /// <param name="condition">Expression 中的条件表达式</param>
        /// <param name="operaName">操作符</param>
        /// <returns></returns>
        public static string TransferCondition(string condition, CompareOperator operaName)
        {
            if (condition == null)
            {
                throw new ArgumentNullException(MessageStringManager.GetString("NullParameter"));
            }
            // 现在只处理Like的表达式
            switch (operaName)
            {
            case CompareOperator.Like:
                if (condition.Contains("["))
                {
                    condition = condition.Replace("[", "[[]");
                }
                if (condition.Contains("*"))
                {
                    condition = condition.Replace("*", "[*]");
                }
                if (condition.Contains("%"))
                {
                    condition = condition.Replace("%", "[%]");
                }
                if (condition.Contains("_"))
                {
                    condition = condition.Replace("_", "[_]");
                }
                break;

            default:
                break;
            }

            return(condition);
        }
Beispiel #4
0
 /// <summary>
 /// 检查传入的参数值是否符合参数类型的要求
 /// (主要是防止将字符型数据赋给数值型参数)
 /// </summary>
 /// <param name="paraValue"></param>
 private void CheckValueType(string paraValue)
 {
     if ((!IsString) &&
         (CommonOperation.GetStringType(paraValue) != StringType.Numeric) &&
         (CommonOperation.GetStringType(paraValue) != StringType.Empty))
     {
         throw new ArithmeticException(MessageStringManager.GetString("CouldNotSetStringToDigital"));
     }
 }
Beispiel #5
0
        private void SetParameter(string fieldName, GridColumnStyle value)
        {
            //this.OnChange();
            int num1 = this.IndexOf(fieldName);

            if (num1 < 0)
            {
                throw new ArgumentOutOfRangeException(MessageStringManager.GetString("ParameterOutOfRange"));
            }
            this.Replace(num1, value);
        }
Beispiel #6
0
        private void SetParameter(string parameterName, FilterParameter value)
        {
            //this.OnChange();
            int num1 = this.IndexOf(parameterName);

            if (num1 < 0)
            {
                throw new ArgumentOutOfRangeException(MessageStringManager.GetString("ParameterOutOfRange"));
            }
            this.Replace(num1, value);
        }
Beispiel #7
0
        /// <summary>
        /// 对传入的条件表达式字符串中的特殊字符进行转义。
        /// 在生成DataView或DataColumn的Expression时需要进行此处理
        /// </summary>
        /// <param name="condition">Expression 中的条件表达式</param>
        /// <param name="operaName">操作符</param>
        /// <param name="handleQuote">是否处理单引号</param>
        /// <returns></returns>
        public static string TransferCondition(string condition, CompareOperator operaName, bool handleQuote)
        {
            if (condition == null)
            {
                throw new ArgumentNullException(MessageStringManager.GetString("NullParameter"));
            }
            // 单引号替换成两个单引号
            if (handleQuote)
            {
                condition = condition.Replace("'", "''");
            }

            return(TransferCondition(condition, operaName));
        }
        /// <summary>
        /// 在给定 Object 的一组属性值的情况下重新创建该对象
        /// </summary>
        /// <param name="context"></param>
        /// <param name="propertyValues"></param>
        /// <returns></returns>
        public override object CreateInstance(ITypeDescriptorContext context, IDictionary propertyValues)
        {
            if (propertyValues == null)
            {
                throw new ArgumentNullException(MessageStringManager.GetString("NullParameter"));
            }
            BaseWordbook wordbook = WordbookStaticHandle.GetWordbook((string)propertyValues["WordbookName"]);

            wordbook.ExtraCondition     = propertyValues["ExtraCondition"].ToString();
            wordbook.SelectedStyleIndex = (int)propertyValues["SelectedStyleIndex"];
            wordbook.MatchFieldComb     = propertyValues["MatchFieldComb"].ToString();
            wordbook.ParameterValueComb = propertyValues["ParameterValue"].ToString();
            wordbook.CacheTime          = (int)propertyValues["SelectedStyleIndex"];
            return(wordbook);
        }
Beispiel #9
0
        /// <summary>
        /// 通过字典名称获取对应的字典类实例
        /// </summary>
        /// <param name="name">字典类的中文(全称或分类名+字典名)</param>
        /// <returns>类名正确,返回相应实例,否则报异常</returns>
        public static BaseWordbook GetWordbookByName(string name)
        {
            if (String.IsNullOrEmpty(name))
            {
                throw new ArgumentNullException(MessageStringManager.GetString("NullParameterName"));
            }


            var wordbooks = WordbookList.Where(wd => wd.Name.Equals(name));

            try
            {
                WordbookInfo info = wordbooks.First();
                return(GetWordbook(info.TypeName));
            }
            catch
            {
                return(null);
            }
        }
Beispiel #10
0
        /// <summary>
        /// 通过字典名称获取对应的字典类实例
        /// </summary>
        /// <param name="name">字典类的类名(全称或分类名+字典名)</param>
        /// <returns>类名正确,返回相应实例,否则报异常</returns>
        public static BaseWordbook GetWordbook(string name)
        {
            if (String.IsNullOrEmpty(name))
            {
                throw new ArgumentNullException(MessageStringManager.GetString("NullParameterName"));
            }
            // 用Assembly.LoadFrom()需要解决不同应用程序域的问题,
            // 现在用此方式得到字典类的程序集,并进行反射处理。
            // 目前还不清楚这样做对性能有何影响,如果不行的话,只能还采用硬编码的方式
            Type bookType = null;

            if (m_WordbookAssembly == null)
            {
                Assembly[] assemlys = AppDomain.CurrentDomain.GetAssemblies();
                foreach (Assembly assembly in assemlys)
                {
                    //MessageBox.Show(assembly.GetName().Name);
                    // 通过比较Assembly的名称得到字典类的程序集
                    if (assembly.GetName().Name == "DrectSoft.Basic.Wordbook")
                    {
                        m_WordbookAssembly = assembly;
                        break;
                    }
                }
            }

            bookType = m_WordbookAssembly.GetType(ConvertBookNameToFullName(name));

            if (bookType == null)
            {
                //MessageBox.Show("Could not found the wordbook");
                return(null);
            }
            else
            {
                BaseWordbook result = (BaseWordbook)System.Activator.CreateInstance(bookType);;
                result.CacheTime = 0;
                return(result);
            }
        }
Beispiel #11
0
        /// <summary>
        /// 检查输入值是否合法
        /// </summary>
        /// <returns></returns>
        private void CheckValue()
        {
            if (tBoxName.Text.Trim().Length == 0)
            {
                throw new ArgumentNullException(MessageStringManager.GetString("SqlWordbookNeedName"));
            }

            if (tBoxQuery.Text.Trim().Length == 0)
            {
                throw new ArgumentNullException(MessageStringManager.GetString("SqlWordbookNeedQurySentence"));
            }

            if (tBoxCodeField.Text.Trim().Length == 0)
            {
                throw new ArgumentNullException(MessageStringManager.GetString("SqlWordbookNeedCodeFieldName"));
            }

            if (tBoxNameField.Text.Trim().Length == 0)
            {
                throw new ArgumentNullException(MessageStringManager.GetString("SqlWordbookNeedNameFieldName"));
            }
        }
Beispiel #12
0
        /// <summary>
        /// 检查传入的参数值是否正确
        /// </summary>
        /// <param name="paraValue"></param>
        private void CheckValue(object paraValue)
        {
            string temp = paraValue.ToString();

            // 先用','作为分隔符,拆分出独立的条件
            string[] separator1 = new string[] { "," };
            string[] separator2 = new string[] { "~" };
            string[] values     = temp.Split(separator1, StringSplitOptions.None);
            string[] rangs;
            if ((values.Length > 1) && (Operator != CompareOperator.In))
            {
                throw new ArgumentException(MessageStringManager.GetString("CoulNotSetParameterRange"));
            }

            foreach (string condition in values)
            {
                // 检查范围设置是否正确
                if (condition.Contains("~"))
                {
                    rangs = condition.Split(separator2, StringSplitOptions.None);
                    if (rangs.Length != 2)
                    {
                        throw new ArgumentException(MessageStringManager.GetString("WrongParameterRange"));
                    }
                    if (condition.Contains("%"))
                    {
                        throw new ArgumentException(MessageStringManager.GetString("CouldNotUseWildcardInRange"));
                    }
                    CheckValueType(rangs[0]);
                    CheckValueType(rangs[1]);
                }
                else // 检查单个的条件是否满足要求
                {
                    CheckValueType(condition);
                }
            }
        }