GetQueryController(
            System.Windows.Controls.DataGrid dataGrid,
            FilterData filterData, IEnumerable itemsSource)
        {
            QueryController query;

            query = DataGridExtensions.GetDataGridFilterQueryController(dataGrid);

            if (query == null)
            {
                //clear the filter if exisits begin
                System.ComponentModel.ICollectionView view
                    = System.Windows.Data.CollectionViewSource.GetDefaultView(dataGrid.ItemsSource);
                if (view != null) view.Filter = null;
                //clear the filter if exisits end

                query = new QueryController();
                DataGridExtensions.SetDataGridFilterQueryController(dataGrid, query);
            }

            query.ColumnFilterData        = filterData;
            query.ItemsSource             = itemsSource;
            query.CallingThreadDispatcher = dataGrid.Dispatcher;
            query.UseBackgroundWorker     = DataGridExtensions.GetUseBackgroundWorkerForFiltering(dataGrid);

            return query;
        }
 internal StringFilterExpressionCreator(
     ParameterCounter paramCounter, FilterData filterData, List<object> paramseters)
 {
     this.paramCounter = paramCounter;
     this.filterData = filterData;
     this.paramseters = paramseters;
 }
示例#3
0
 public virtual void OnFilter(DataGridFilterLibrary.Support.FilterData data)
 {
     if (FilterChanged != null)
     {
         FilterChanged();
     }
 }
        private StringBuilder createSingleFilter(FilterData filterData)
        {
            StringBuilder filter = new StringBuilder();

            if (
                (filterData.Type == FilterType.NumericBetween || filterData.Type == FilterType.DateTimeBetween)
                &&
                (filterData.QueryString != String.Empty || filterData.QueryStringTo != String.Empty)
                )
            {
                if (filterData.QueryString != String.Empty)
                {
                    createFilterExpression(
                        filterData, 
                        filterData.QueryString,
                        filter,
                        getOperatorString(FilterOperator.GreaterThanOrEqual));
                }
                if (filterData.QueryStringTo != String.Empty)
                {
                    if (filter.Length > 0) filter.Append(" AND ");

                    createFilterExpression(
                        filterData, 
                        filterData.QueryStringTo, 
                        filter, 
                        getOperatorString(FilterOperator.LessThanOrEqual));
                }
            }
            else if (filterData.QueryString != String.Empty
                &&
                filterData.Operator != FilterOperator.Undefined)
            {
                if (filterData.Type == FilterType.Text)
                {
                    createStringFilterExpression(filterData, filter);
                }
                else
                {
                    createFilterExpression(
                        filterData, filterData.QueryString, filter, getOperatorString(filterData.Operator));
                }
            }

            return filter;
        }
示例#5
0
        public static Dictionary <string, FilterData> CloneDictionaryHelper(Dictionary <string, FilterData> dict)
        {
            var dictNew = new Dictionary <string, FilterData>();

            foreach (KeyValuePair <string, FilterData> kvp in dict)
            {
                var data = new FilterData(
                    kvp.Value.Operator, kvp.Value.Type,
                    kvp.Value.ValuePropertyBindingPath, kvp.Value.ValuePropertyType,
                    kvp.Value.QueryString, kvp.Value.QueryStringTo,
                    kvp.Value.IsTypeInitialized, kvp.Value.IsCaseSensitiveSearch);

                dictNew.Add(kvp.Key, data);
            }

            return(dictNew);
        }
示例#6
0
        private void initFilterData()
        {
            if (FilterCurrentData == null || !FilterCurrentData.IsTypeInitialized)
            {
                string valuePropertyBindingPath = getValuePropertyBindingPath(AssignedDataGridColumn);

                bool typeInitialized;

                Type valuePropertyType = getValuePropertyType(
                    valuePropertyBindingPath, getItemSourceElementType(out typeInitialized));

                FilterType filterType = getFilterType(
                    valuePropertyType, 
                    isComboDataGridColumn(),
                    isBetweenType());

                FilterOperator filterOperator = FilterOperator.Undefined;

                string queryString   = String.Empty;
                string queryStringTo = String.Empty;

                FilterCurrentData = new FilterData(
                    filterOperator, 
                    filterType, 
                    valuePropertyBindingPath, 
                    valuePropertyType, 
                    queryString, 
                    queryStringTo,
                    typeInitialized,
                    DataGridColumnExtensions.GetIsCaseSensitiveSearch(AssignedDataGridColumn));
            }
        }
        private void createStringFilterExpression(
            FilterData filterData, StringBuilder filter)
        {
            StringFilterExpressionCreator
                creator = new StringFilterExpressionCreator(
                    paramCounter, filterData, Parameters);

            string filterExpression = creator.Create();

            filter.Append(filterExpression);
        }
        private void createFilterExpression(
            FilterData filterData, string queryString, StringBuilder filter, string operatorString)
        {
            filter.Append(filterData.ValuePropertyBindingPath);

            object parameterValue = null;

            if (trySetParameterValue(out parameterValue, queryString, filterData.ValuePropertyType))
            {
                Parameters.Add(parameterValue);

                paramCounter.Increment();

                filter.Append(" " + operatorString + " @" + paramCounter.ParameterNumber);
            }
            else
            {
                filter = new StringBuilder();//do not use filter
            }
        }
示例#9
0
 public void AddOrUpdateData(FilterData data)
 {
     Datas.Add(data);
 }