Beispiel #1
0
        /// <summary>
        /// Returns Expression func for corresponding Dataoperation and Property Name.
        /// </summary>
        /// <param name="propertyName">propertyName</param>
        /// <param name="operation">Data operation</param>
        /// <param name="reflectionMode">Reflection Mode</param>
        /// <returns>ExpressionFunc</returns>
        public override System.Linq.Expressions.Expression <Func <string, object, object> > GetExpressionFunc(string propertyName, DataOperation operation = DataOperation.Default, DataReflectionMode reflectionMode = DataReflectionMode.Default)
        {
            var column = this.dataGrid.Columns.FirstOrDefault(col => col.MappingName == propertyName);

            if (column == null)
            {
                return(null);
            }

            DataReflectionMode mode = operation == DataOperation.Grouping ? column.GroupMode : reflectionMode;

            if (this.propertyAccessProvider != null)
            {
                this.propertyAccessProvider.OnBeginReflect();
            }
            return(this.GetValueExpressionFunc(column, operation, mode, column.useBindingValue));
        }
        /// <summary>
        /// Return ValueFunc for based on corresponding  column and DataOperationMode
        /// </summary>
        /// <param name="view">CollectionViewAdv</param>
        /// <param name="column">GridColumn</param>
        /// <param name="operation">DataOperation</param>
        /// <param name="mode">DataReflectionMode</param>
        /// <param name="useBindingValue">useBindingValue</param>
        /// <returns>Func<string, object, object></returns>
        public static Func <string, object, object> GetValueFunc(this CollectionViewAdv view, GridColumn column, DataOperation operation, DataReflectionMode mode, bool useBindingValue)
        {
            if (operation == DataOperation.Grouping)
            {
                var pgd = view.GroupDescriptions.OfType <ColumnGroupDescription>().FirstOrDefault(g => g.PropertyName == column.mappingName);
                if (pgd != null && pgd.Converter != null)
                {
                    Func <string, object, object> groupConverterFunc = (columnName, record) =>
                    {
                        //The ColumnName and the PropertyReflector helps to get the value to Group the Column with the Intervals.
                        if (pgd.Converter is IColumnAccessProvider)
                        {
                            (pgd.Converter as IColumnAccessProvider).ColumnName        = columnName;
                            (pgd.Converter as IColumnAccessProvider).PropertyReflector = view.GetPropertyAccessProvider();
                        }
                        return(pgd.Converter.Convert(record, record.GetType(), column, CultureInfo.CurrentCulture.GetCulture()));
                    };
                    return(groupConverterFunc);
                }
            }

            if (column != null && column.IsUnbound)
            {
                var unboundcolumn = column as GridUnBoundColumn;
                var dataGrid      = view.GetDataGrid() as SfDataGrid;
                return(view.GetUnboundFunc(dataGrid, unboundcolumn));
            }

            else if (mode == DataReflectionMode.Default)
            {
                if (column != null && column.ValueBinding != null && column.UseBindingValue)
                {
                    return(view.GetBindingFunc());
                }
#if WPF
                if (view.IsITypedListSource())
                {
                    var func = view.GetITypedListFunc(column.MappingName);
                    if (func != null)
                    {
                        return(func);
                    }
                }
#endif
                if (view.IsDynamicBound)
                {
                    return(view.GetDynamicFunc());
                }

                if (view.IsXElementBound)
                {
                    return(view.GetXElementFunc());
                }
            }
            else if (mode == DataReflectionMode.Display)
            {
                return((propname, record) => view.GetPropertyAccessProvider().GetDisplayValue(record, propname, useBindingValue));
            }
            else if (mode == DataReflectionMode.Value)
            {
                return((propName, record) => view.GetPropertyAccessProvider().GetValue(record, propName, useBindingValue));
            }
            return(null);
        }
        public override Expression <Func <string, object, object> > GetExpressionFunc(string propertyName, DataOperation operation = DataOperation.Default, DataReflectionMode reflectionMode = DataReflectionMode.Default)
        {
            Expression <Func <string, object, object> > exp = base.GetExpressionFunc(propertyName, operation, reflectionMode);

            if (exp == null)
            {
                Func <string, object, object> func;
                func = (propertyname, record) =>
                {
                    var provider = this.GetPropertyAccessProvider();
                    return(provider.GetValue(record, propertyName));
                };
                exp = (propertyname, record) => func(propertyName, record);
            }
            return(exp);
        }
        /// <summary>
        /// Returns ValueExpressionFunc for corresponding column and data operation
        /// </summary>
        /// <param name="view">CollectionViewAdv</param>
        /// <param name="column">Column</param>
        /// <param name="operation">DataOperation</param>
        /// <param name="mode">DataReflectionMode</param>
        /// <param name="useBindingValue">useBindingvalue</param>
        /// <returns>Expression<Func<string, object, object>></returns>
        public static System.Linq.Expressions.Expression <Func <string, object, object> > GetValueExpressionFunc(this CollectionViewAdv view, GridColumn column, DataOperation operation, DataReflectionMode mode, bool useBindingValue)
        {
            if (column != null && column.IsUnbound)
            {
                var unboundcolumn = column as GridUnBoundColumn;
                var dataGrid      = view.GetDataGrid() as SfDataGrid;
                view.GetUnboundFunc(dataGrid, unboundcolumn);
                if (unboundcolumn.UnBoundFunc != null)
                {
                    return((columnName, record) => unboundcolumn.UnBoundFunc(columnName, record));
                }
                return(null);
            }
            else if (mode == DataReflectionMode.Default)
            {
                if (column != null && column.ValueBinding != null && column.UseBindingValue)
                {
                    return(view.GetBindingExpressionFunc());
                }
#if WPF
                if (view.IsITypedListSource())
                {
                    var func = view.GetITypedListExpressionFunc(column.MappingName);
                    if (func != null)
                    {
                        return(func);
                    }
                }
#endif
                if (view.IsDynamicBound)
                {
                    return(view.GetDynamicExpressionFunc());
                }
                else if (view.IsXElementBound)
                {
                    return(view.GetXElementAttributeFunc());
                }
            }
            else if (mode == DataReflectionMode.Display)
            {
                return((propname, record) => view.GetPropertyAccessProvider().GetDisplayValue(record, propname, useBindingValue));
            }
            else if (mode == DataReflectionMode.Value)
            {
                return((propName, record) => view.GetPropertyAccessProvider().GetValue(record, propName, useBindingValue));
            }
            return(null);
        }