Beispiel #1
0
        private static string BuildFilterDataSetContent(FilterItemBase filterBase)
        {
            StringBuilder result = new StringBuilder();

            switch (filterBase.FilterType)
            {
            case EFilterType.Standard:
                var    standard  = filterBase as FilterStandard;
                string staResult = BuildFilterStringItem(EFilterType.Standard, standard.Name, standard.Connection, standard.Function, standard.Operator, standard.ValueType.ToString().ToLower(), standard.Value, "", "", "", "");
                result.Append(staResult);
                break;

            case EFilterType.MultiValue:
                var    multiValue = filterBase as FilterMultiValue;
                string mulResult  = BuildFilterStringItem(EFilterType.MultiValue, multiValue.Name, multiValue.Connection, multiValue.Function, multiValue.Operator, "", "", multiValue.Value1Type.ToString().ToLower(), multiValue.Value1, multiValue.Value2Type.ToString().ToLower(), multiValue.Value2);
                result.Append(mulResult);
                break;

            case EFilterType.Group:
                var filter = filterBase as FilterGroup;
                foreach (var child in filter.Filters)
                {
                    string grpResult = BuildFilterDataSetContent(child);
                    result.Append(grpResult);
                }
                break;
            }
            return(result.ToString());
        }
 public string GetFilterName(object filtersCollection, FilterItemBase filter)
 {
     if (filter != null)
     {
         var count = CollectionViewModel.GetCount(filter.FilterCriteria);
         if (count > 0)
         {
             return(filter.Name + " (" + count + ")");
         }
         else
         {
             return(filter.Name);
         }
     }
     else
     {
         if (object.Equals(filtersCollection, StaticFilters))
         {
             return(StaticFiltersName);
         }
         if (object.Equals(filtersCollection, CustomFilters))
         {
             return(CustomFiltersName);
         }
         if (object.Equals(filtersCollection, Groups))
         {
             return(GroupFiltersName);
         }
     }
     return(null);
 }
Beispiel #3
0
        private static void BuildFilterDataSet(ref StringBuilder result, FilterItemBase filterItemBase, FilterItemBase preItemBase)
        {
            var tempResult   = new StringBuilder();
            var curFilterStr = BuildFilterDataSetContent(filterItemBase);

            if (preItemBase != null)
            {
                var     preFilterStr = result.ToString();
                dynamic filterObj    = filterItemBase as FilterStandard;
                if (filterItemBase.FilterType == EFilterType.Standard)
                {
                    filterObj = filterItemBase as FilterStandard;
                }
                else if (filterItemBase.FilterType == EFilterType.MultiValue)
                {
                    filterObj = filterItemBase as FilterMultiValue;
                }
                else if (filterItemBase.FilterType == EFilterType.Group)
                {
                    filterObj = filterItemBase as FilterGroup;
                }
                tempResult.Append("{");
                tempResult.Append($"{filterObj.Connection.ToString().ToLower()}: [{curFilterStr},{preFilterStr}]");
                tempResult.Append("}");
            }
            else
            {
                tempResult.Append(curFilterStr);
            }
            result = tempResult;
        }
        protected virtual T CreateCustomFilterViewModel <T>(FilterItemBase filterItem) where T : FilterViewModelBase, new()
        {
            T viewModel = ViewModelSource.Create <T>();

            ViewModelHelper.EnsureViewModel(viewModel, CollectionViewModel, filterItem);
            return(viewModel);
        }
        void UpdateSelectedItemByFilter(FilterItemBase item)
        {
            var result = OfficeNavigationBar.Items.FirstOrDefault(navItem => object.Equals(navItem.Tag, item));

            if (result != null)
            {
                OfficeNavigationBar.SelectedItem = result;
            }
        }
        void RegisterFilterItem(OfficeNavigationBar navigationBar, FilterItemBase item)
        {
            NavigationBarItem navItem = new NavigationBarItem();

            navItem.Tag  = item;
            navItem.Text = ViewModel.GetFilterName(ViewModel.StaticFilters, item);
            navItem.Name = "filterItem" + item.Name.Replace(" ", string.Empty);
            navigationBar.Items.Add(navItem);
            navItem.BindCommand((f) => ViewModel.Select(f), ViewModel, () => (item as FilterTreeViewModel <TEntity, TID, TUnitOfWork> .FilterItem));
        }
 void ApplyFilter(FilterItemBase filterItem)
 {
     if ((filterItem != null) && !object.ReferenceEquals(filterItem.FilterCriteria, null))
     {
         var converter = new CriteriaOperatorToExpressionConverter <TEntity>();
         CollectionViewModel.FilterExpression = converter.Convert(filterItem.FilterCriteria);
     }
     else
     {
         CollectionViewModel.FilterExpression = null;
     }
 }
        void NewGroupCore(FilterItemBase newFilterItem)
        {
            GroupFilterViewModel viewModel = CreateCustomFilterViewModel <GroupFilterViewModel>(newFilterItem);

            if (ShowFilterDialog(viewModel, "Group Filter"))
            {
                if (viewModel.Save)
                {
                    AddNewGroupFilter(newFilterItem);
                    RaiseFilterTreeChanged();
                }
                SelectedItem = newFilterItem;
            }
        }
Beispiel #9
0
        private void WriteFilter(StringWriter w, FilterItemBase filter, string parent, ref int varindex)
        {
            List <string> parameters = new List <string>();

            switch (filter.FilterType)
            {
            case EFilterType.Custom:
            {
                w.Write(parent + ".AddExpression(item => ");
                FilterCustom custom = (FilterCustom)filter;
                var          result = CodeParameterPattern.Matches(custom.Code);
                foreach (Match item in result)
                {
                    var name = item.Groups[1].Value;
                    if (!parameters.Contains(name))
                    {
                        parameters.Add(name);
                    }
                }
                if (parameters.Count == 0)
                {
                    w.Write(custom.Code);
                }
                else
                {
                    w.Write(CodeParameterPattern.Replace(custom.Code, m => m.Groups[1].Value));
                }
            }
            break;

            case EFilterType.MultiValue:
            {
                FilterMultiValue stan = (FilterMultiValue)filter;
                string           expression;
                EDataBaseType    expressionDataType;
                ProcessExpression(stan.Name, stan.Function, stan.FunctionParemeter, out expression, out expressionDataType);
                switch (stan.Operator)
                {
                case EOperator.Between:
                case EOperator.NotBetween:
                    string        value1     = QueryMetadata.GetRightExpression(expressionDataType, stan.Value1Type, stan.Value1, parameters, false);
                    List <string> valueNames = new List <string>();
                    if (stan.Value1Type != EValueType.Property)
                    {
                        value1 = ProcessVariable(w, value1, ref varindex);
                        if (stan.Value1Type == EValueType.Const && stan.Value1.StartsWith("@"))
                        {
                            valueNames.Add(value1);
                        }
                    }
                    string value2 = QueryMetadata.GetRightExpression(expressionDataType, stan.Value2Type, stan.Value2, parameters, false);
                    if (stan.Value2Type != EValueType.Property)
                    {
                        value2 = ProcessVariable(w, value2, ref varindex);
                        if (stan.Value2Type == EValueType.Const && stan.Value2.StartsWith("@"))
                        {
                            valueNames.Add(value2);
                        }
                    }
                    if (valueNames.Count > 0)
                    {
                        w.WriteLine($"if({string.Join(" && ", valueNames.Select(a => a + " != null").ToArray())})");
                    }
                    w.Write(parent + ".AddExpression(item => ");
                    w.Write(QueryMetadata.Operators[stan.Operator], expression, value1, value2);
                    break;
                }
            }
            break;

            case EFilterType.Standard:
            {
                FilterStandard stan = (FilterStandard)filter;
                string         expression;
                EDataBaseType  expressionDataType;
                ProcessExpression(stan.Name, stan.Function, stan.FunctionParemeter, out expression, out expressionDataType);

                switch (stan.Operator)
                {
                case EOperator.IsNull:
                case EOperator.NotIsNull:
                    w.Write(parent + ".AddExpression(item => ");
                    w.Write(QueryMetadata.Operators[stan.Operator], expression);
                    break;

                default:
                    bool   isArray = stan.Operator == EOperator.IN;
                    string value   = QueryMetadata.GetRightExpression(expressionDataType, stan.ValueType, stan.Value, parameters, isArray);
                    if (stan.ValueType != EValueType.Property)
                    {
                        value = ProcessVariable(w, value, ref varindex);
                        if (stan.ValueType == EValueType.Const && stan.Value.StartsWith("@"))
                        {
                            w.WriteLine($"if({value}!=null)");
                        }
                    }
                    w.Write(parent + ".AddExpression(item => ");
                    w.Write(QueryMetadata.Operators[stan.Operator], expression, value);
                    break;
                }
            }
            break;
            }
            w.Write(",EExpressionConnect." + filter.Connection.ToString());
            if (parameters.Count > 0)
            {
                w.Write(",new string[] { " + string.Join(",", parameters.Distinct().Select(a => "\"" + a + "\"").ToArray()) + " }");
            }
            w.WriteLine(");");
        }
Beispiel #10
0
        private static string GetFilterContent(MemberBase memberBase)
        {
            StringBuilder result = new StringBuilder();

            switch (memberBase.MemberType)
            {
            case EMemberType.DataSet:
                DataSet dats = memberBase as DataSet;
                if (dats.IsCollection)
                {
                    #region 集合
                    FilterItemBase parentItemBase = null;
                    for (var i = 0; i < dats.Filters.Count; i++)
                    {
                        var item = dats.Filters[i];
                        if (i == 0)
                        {
                            BuildFilterDataSet(ref result, item, null);
                        }
                        else
                        {
                            BuildFilterDataSet(ref result, item, parentItemBase);
                        }
                        parentItemBase = item;
                    }
                    #endregion
                }
                else
                {
                    #region 对象
                    var QueryParametersObj = (from t in dats.Children.OfType <QueryParameters>() select t).FirstOrDefault();
                    if (QueryParametersObj != null)
                    {
                        result.Append(GetFilterObjectItem(QueryParametersObj));
                    }
                    #endregion
                }
                break;

            case EMemberType.Objects:
                Objects objs = memberBase as Objects;
                if (objs.IsCollection)
                {
                    #region 集合
                    FilterItemBase parentItemBase = null;
                    for (var i = 0; i < objs.Filters.Count; i++)
                    {
                        var item = objs.Filters[i];
                        if (i == 0)
                        {
                            BuildFilterDataSet(ref result, item, null);
                        }
                        else
                        {
                            BuildFilterDataSet(ref result, item, parentItemBase);
                        }
                        parentItemBase = item;
                    }
                    #endregion
                }
                else
                {
                    #region 对象
                    var QueryParametersObj = (from t in objs.Children.OfType <QueryParameters>() select t).FirstOrDefault();
                    if (QueryParametersObj != null)
                    {
                        result.Append(GetFilterObjectItem(QueryParametersObj));
                    }
                    #endregion
                }
                break;
            }
            return(result.ToString());
        }
Beispiel #11
0
 public QueryFilterCriteriaEventArgs(FilterItemBase item)
 {
     this.item = item;
 }