Exemple #1
0
        public static ExcelBindingDefinitionWithFormula CreateInstance(ExcelTemplateDefinition templateDefinition, BindingDefinitionDescription definition)
        {
            try
            {
                IBindingDefinition formulaBindingDefinition = null;
                IBindingDefinition targetBindingDefinition  = null;

                if (!string.IsNullOrEmpty(definition.Formula))
                {
                    BindingDefinitionDescription formulaBindingDefinitionDescription = BindingDefinitionDescription.CreateBindingDescription(templateDefinition, definition.Formula, definition.Formula);
                    formulaBindingDefinition = BindingDefinitionFactory.CreateInstances(templateDefinition, formulaBindingDefinitionDescription);
                }

                if (!string.IsNullOrEmpty(definition.BindingExpression))
                {
                    string bindingExpression = $"{{{definition.BindingExpression}}}";
                    BindingDefinitionDescription targetBindingDefinitionDescription = BindingDefinitionDescription.CreateBindingDescription(templateDefinition, bindingExpression, bindingExpression);
                    targetBindingDefinition = BindingDefinitionFactory.CreateInstances(templateDefinition, targetBindingDefinitionDescription);
                }

                ExcelBindingDefinitionWithFormula ret = new ExcelBindingDefinitionWithFormula(definition, targetBindingDefinition, formulaBindingDefinition);
                return(ret);
            }
            catch (Exception ex)
            {
                string message = $"Cannot create the 'ExcelBindingDefinitionWithFormula' from '{definition.BindingExpression ?? string.Empty}'. {ex.Message}";
                throw new EtkException(message);
            }
        }
 public ModelLeafProperty(IModelType parent, IBindingDefinition bindingDefinition)
 {
     Parent            = parent;
     BindingDefinition = bindingDefinition;
     Name        = BindingDefinition.Name;
     Description = BindingDefinition.Description;
 }
Exemple #3
0
        public ExcelContextItemButton(IBindingContextElement parent, IBindingDefinition bindingDefinition)
            : base(parent, bindingDefinition)
        {
            CanNotify = bindingDefinition?.CanNotify ?? false;
            excelBindingDefinitionButton = bindingDefinition as ExcelBindingDefinitionButton;

            if (CanNotify)
            {
                objectsToNotify = excelBindingDefinitionButton.GetObjectsToNotify(DataSource);
                if (objectsToNotify != null)
                {
                    foreach (INotifyPropertyChanged obj in objectsToNotify)
                    {
                        obj.PropertyChanged += OnPropertyChanged;
                    }
                }
            }

            if (excelBindingDefinitionButton.EnablePropertyInfo != null)
            {
                EnablePropertyGet = excelBindingDefinitionButton.EnablePropertyInfo.GetGetMethod();
                if (EnablePropertyGet != null)
                {
                    if (!EnablePropertyGet.IsStatic)
                    {
                        if (ParentElement.DataSource != null && ParentElement.DataSource is INotifyPropertyChanged)
                        {
                            EnableProperty = (INotifyPropertyChanged)ParentElement.DataSource;
                            EnableProperty.PropertyChanged += OnPropertyChanged;
                        }
                    }
                }
            }
        }
 public static ExcelBindingDefinitionNamedRange CreateInstance(ExcelTemplateDefinitionPart templateDefinition, ExcelNamedRangeDefinition definition, IBindingDefinition nestedBindingDefinition)
 {
     try
     {
         string             trimmedName           = definition.Name.Trim();
         IBindingDefinition nameBindingDefinition = null;
         string             rootName = null;
         int pos = trimmedName.IndexOf('{');
         if (pos != -1)
         {
             rootName = trimmedName.Remove(pos);
             string expression = trimmedName.Substring(pos);
             BindingDefinitionDescription bindingDefinitionDescription = BindingDefinitionDescription.CreateBindingDescription(templateDefinition.Parent, expression, expression);
             if (bindingDefinitionDescription != null && !string.IsNullOrEmpty(bindingDefinitionDescription.BindingExpression))
             {
                 if (bindingDefinitionDescription.BindingExpression.Contains(ALL_POS_KEYWORD) || bindingDefinitionDescription.BindingExpression.Contains(POS_KEYWORD))
                 {
                     throw new ArgumentException($"Cannot mixte the keywords '{POS_KEYWORD}' and '{ALL_POS_KEYWORD}' with binding dataAccessor");
                 }
                 nameBindingDefinition = BindingDefinitionFactory.CreateInstances(templateDefinition.Parent as ExcelTemplateDefinition, bindingDefinitionDescription);
             }
         }
         return(new ExcelBindingDefinitionNamedRange(definition, rootName, nestedBindingDefinition, nameBindingDefinition));
     }
     catch (Exception ex)
     {
         string message = $"Cannot create create the named caller binding dataAccessor '{definition.Name}'. {ex.Message}";
         throw new EtkException(message);
     }
 }
 public BindingContextItem(IBindingContextElement parent, IBindingDefinition bindingDefinition)
 {
     ParentElement     = parent;
     BindingDefinition = bindingDefinition;
     CanNotify         = false;
     Name = BindingDefinition == null ? string.Empty : BindingDefinition.Name;
 }
 public FilterOnConditions(ITemplateDefinition templateDefinition, IBindingDefinition definition, string condition, FilterDefinitionRelation relation, bool caseSensitive)
 {
     TemplateDefinition = templateDefinition;
     DefinitionToFilter = definition;
     Condition          = condition;
     Relation           = relation;
     CaseSensitive      = caseSensitive;
 }
Exemple #7
0
        public SortDefinition(ITemplateDefinition templateDefinition, IBindingDefinition bindingDefinition, bool descending, bool caseSensitive)
        {
            TemplateDefinition = templateDefinition;
            BindingDefinition  = bindingDefinition;
            Descending         = descending;
            CaseSensitive      = caseSensitive;

            SetExpression();
        }
Exemple #8
0
        private ExcelBindingDefinitionFormulaResult(BindingDefinitionDescription bindingDefinitionDescription, IBindingDefinition underlyingBindingDefinition, IBindingDefinition useFormulaBindingDefinition)
            : base(bindingDefinitionDescription)
        {
            NestedBindingDefinition     = underlyingBindingDefinition;
            UseFormulaBindingDefinition = useFormulaBindingDefinition;
            CanNotify = underlyingBindingDefinition.CanNotify;

            DefinitionDescription = new BindingDefinitionDescription();
        }
 protected void AddAfterRenderingAction(IBindingDefinition bindingDefinition, ExcelInterop.Range concernedRange)
 {
     if (bindingDefinition.OnAfterRendering?.Parameters != null)
     {
         foreach (SpecificEventCallbackParameter param in bindingDefinition.OnAfterRendering.Parameters.Where(p => p.IsSender))
         {
             param.ParameterValue = concernedRange;
         }
     }
     Parent.AddAfterRenderingAction(bindingDefinition.OnAfterRendering);
 }
Exemple #10
0
 public FilterOnValues(ITemplateDefinition templateDefinition, IBindingDefinition definition, IEnumerable <object> selectedValues, bool useOrEquals)
 {
     TemplateDefinition = templateDefinition;
     DefinitionToFilter = definition;
     SelectedValues     = selectedValues;
     UseOrEquals        = useOrEquals;
     if (selectedValues != null && selectedValues.Any())
     {
         SetFilterExpression();
     }
 }
Exemple #11
0
        private ExcelBindingDefinitionWithFormula(BindingDefinitionDescription bindingDefinitionDescription, IBindingDefinition targetBindingDefinition, IBindingDefinition formulaBindingDefinition)
            : base(bindingDefinitionDescription)
        {
            TargetBindingDefinition  = targetBindingDefinition;
            FormulaBindingDefinition = formulaBindingDefinition;
            if (TargetBindingDefinition != null)
            {
                CanNotify = TargetBindingDefinition.CanNotify;
            }

            DefinitionDescription = new BindingDefinitionDescription();
        }
Exemple #12
0
        public BindingContextItemCanNotify(IBindingContextElement parent, IBindingDefinition bindingDefinition)
            : base(parent, bindingDefinition)
        {
            CanNotify = true;

            objectsToNotify = bindingDefinition.GetObjectsToNotify(DataSource);
            if (objectsToNotify != null)
            {
                foreach (INotifyPropertyChanged obj in objectsToNotify)
                {
                    obj.PropertyChanged += OnPropertyChanged;
                }
            }
        }
        public override IBindingContextItem ContextItemFactory(IBindingContextElement parent)
        {
            BindingContextItem ret;

            if (parent.DataSource == null)
            {
                ret = new BindingContextItem(parent, this);
            }
            else
            {
                IBindingDefinition realBindingDefinition = CreateRealBindingDefinition(parent.DataSource.GetType());
                ret = realBindingDefinition.CanNotify ? new BindingContextItemCanNotify(parent, realBindingDefinition)
                                                        : new BindingContextItem(parent, realBindingDefinition);
            }
            ret.Init();
            return(ret);
        }
Exemple #14
0
        /// <summary> Create a list of binding definition for a given list of <see cref="BindingDefinitionDescription"/> </summary>
        internal static List <IBindingDefinition> CreateInstances(Type type, List <BindingDefinitionDescription> definitionDescriptions)
        {
            List <IBindingDefinition> bindingDefinitions = new List <IBindingDefinition>();

            if (definitionDescriptions != null)
            {
                foreach (BindingDefinitionDescription definitionDescription in definitionDescriptions)
                {
                    IBindingDefinition bindingDefinition = CreateInstance(type, definitionDescription);
                    if (bindingDefinition != null)
                    {
                        bindingDefinitions.Add(bindingDefinition);
                    }
                }
            }
            return(bindingDefinitions);
        }
Exemple #15
0
        public BindingDefinitionViewModel(TemplateViewModel parent, IBindingDefinition bindingDefinition, IEnumerable <IBindingContextItem> items)
        {
            this.parent       = parent;
            BindingDefinition = bindingDefinition;
            this.items        = items.ToList();

            if (items.Any())
            {
                ValueSelectionList = this.items.Select(i => i.ResolveBinding())
                                     .Distinct()
                                     .Select(v => new ValueSelection(v))
                                     .OrderBy(s => s.Value)
                                     .ToList();
            }

            SortOrFilterSelected += OnSortOrFilterSelected;
        }
        /// <summary>Create a binding definition from a cell value</summary>
        private IBindingDefinition CreateBindingDefinition(ExcelTemplateDefinitionPart templateDefinitionPart, string value, string trimmedValue)
        {
            ExcelTemplateDefinition excelTemplateDefinition = templateDefinitionPart.Parent as ExcelTemplateDefinition;

            IBindingDefinition ret = null;

            if (trimmedValue.StartsWith(ExcelBindingDefinitionButton.BUTTON_TEMPLATE_PREFIX))
            {
                ret = ExcelBindingDefinitionButton.CreateInstance(excelTemplateDefinition, trimmedValue);
            }
            else if (trimmedValue.StartsWith(ExcelBindingDefinitionCheckBox.CHECKBOX_TEMPLATE_PREFIX))
            {
                ret = ExcelBindingDefinitionCheckBox.CreateInstance(excelTemplateDefinition, trimmedValue);
            }
            else if (trimmedValue.StartsWith(ExcelBindingDefinitionFormulaResult.FORMULA_RESULT_PREFIX))
            {
                ret = ExcelBindingDefinitionFormulaResult.CreateInstance(excelTemplateDefinition, trimmedValue);
            }
            else if (trimmedValue.StartsWith(ExcelBindingDefinitionNamedRange.NAMEDRANGE_TEMPLATE_PREFIX))
            {
                ExcelNamedRangeDefinition excelNamedRangeDefinition = ExcelBindingDefinitionNamedRange.RetrieveNamedRangeDefinition(trimmedValue);
                if (excelNamedRangeDefinition != null)
                {
                    BindingDefinition nestedBindingDefinition = null;
                    if (!string.IsNullOrEmpty(excelNamedRangeDefinition.Value))
                    {
                        nestedBindingDefinition = CreateBindingDefinition(templateDefinitionPart, excelNamedRangeDefinition.Value, excelNamedRangeDefinition.Value.Trim()) as BindingDefinition;
                    }
                    ret = ExcelBindingDefinitionNamedRange.CreateInstance(templateDefinitionPart, excelNamedRangeDefinition, nestedBindingDefinition);
                }
            }
            else
            {
                BindingDefinitionDescription bindingDefinitionDescription = BindingDefinitionDescription.CreateBindingDescription(templateDefinitionPart.Parent, value, trimmedValue);
                if (bindingDefinitionDescription.Formula != null)
                {
                    ret = ExcelBindingDefinitionWithFormula.CreateInstance(excelTemplateDefinition, bindingDefinitionDescription);
                }
                else
                {
                    ret = BindingDefinitionFactory.CreateInstances(excelTemplateDefinition, bindingDefinitionDescription);
                }
            }
            return(ret);
        }
Exemple #17
0
        /// <summary> Create a binding definition for a given <see cref="BindingDefinitionDescription"/> owned by a given <see cref="FilterOwner"/> </summary>
        /// <param name="templateDefinition">The <see cref="FilterOwner"/> that owned the <see cref="BindingDefinitionDescription"/></param>
        /// <param name="bindingDefinitionDescription">the given <see cref="BindingDefinitionDescription"/></param>
        /// <returns>The newly created Binding definition or an exception is an error occurs</returns>
        public static IBindingDefinition CreateInstances(TemplateDefinition templateDefinition, BindingDefinitionDescription bindingDefinitionDescription)
        {
            IBindingDefinition ret = null;

            if (templateDefinition != null && bindingDefinitionDescription != null)
            {
                if (bindingDefinitionDescription.IsConst)
                {
                    ret = BindingDefinitionConstante.CreateInstance(bindingDefinitionDescription);
                }
                else
                {
                    Type type = templateDefinition.MainBindingDefinition?.BindingType;
                    ret = CreateInstance(type, bindingDefinitionDescription);
                }
            }
            return(ret);
        }
 private ExcelBindingDefinitionNamedRange(ExcelNamedRangeDefinition definition, string rootName, IBindingDefinition nestedBindingDefinition, IBindingDefinition nameBindingDefinition)
 {
     NestedBindingDefinition    = nestedBindingDefinition;
     this.definition            = definition;
     this.rootName              = rootName;
     this.nameBindingDefinition = nameBindingDefinition;
     if (nameBindingDefinition == null)
     {
         if (definition.Name.Contains(POS_KEYWORD))
         {
             usePos = true;
         }
         if (definition.Name.Contains(ALL_POS_KEYWORD))
         {
             useAllPos = true;
         }
     }
 }
Exemple #19
0
        public static ExcelBindingDefinitionFormulaResult CreateInstance(ExcelTemplateDefinition templateDefinition, string definition)
        {
            try
            {
                definition = definition.Replace(FORMULA_RESULT_PREFIX, string.Empty);
                definition = definition.TrimEnd('}');

                //UseFormulaBindingDefinition
                string[] parts = definition.Split(';');
                if (parts.Count() > 2)
                {
                    throw new ArgumentException($"dataAccessor '{definition}' is invalid.");
                }

                string useFormulaDefinition = null;
                string underlyingDefinition;
                if (parts.Count() == 1)
                {
                    underlyingDefinition = $"{{{parts[0].Trim()}}}";
                }
                else
                {
                    useFormulaDefinition = $"{{{parts[0].Trim()}}}";
                    underlyingDefinition = $"{{{parts[1].Trim()}}}";
                }

                BindingDefinitionDescription bindingDefinitionDescription = BindingDefinitionDescription.CreateBindingDescription(templateDefinition, underlyingDefinition, underlyingDefinition);
                IBindingDefinition           underlyingBindingDefinition  = BindingDefinitionFactory.CreateInstances(templateDefinition, bindingDefinitionDescription);

                IBindingDefinition useFormulaBindingDefinition = null;
                if (!string.IsNullOrEmpty(useFormulaDefinition))
                {
                    bindingDefinitionDescription = BindingDefinitionDescription.CreateBindingDescription(templateDefinition, useFormulaDefinition, useFormulaDefinition);
                    useFormulaBindingDefinition  = BindingDefinitionFactory.CreateInstances(templateDefinition, bindingDefinitionDescription);
                }
                ExcelBindingDefinitionFormulaResult ret = new ExcelBindingDefinitionFormulaResult(bindingDefinitionDescription, underlyingBindingDefinition, useFormulaBindingDefinition);
                return(ret);
            }
            catch (Exception ex)
            {
                string message = $"Cannot retrieve the formula result binding dataAccessor '{definition.EmptyIfNull()}'. {ex.Message}";
                throw new EtkException(message);
            }
        }
Exemple #20
0
        public ExcelContextItemFormulaResult(IBindingContextElement parent, IBindingDefinition bindingDefinition)
            : base(parent, bindingDefinition)
        {
            excelBindingDefinitionFormulaResult = bindingDefinition as ExcelBindingDefinitionFormulaResult;
            CanNotify = excelBindingDefinitionFormulaResult.CanNotify;
            //NestedContextItem = nestedContextItem;

            if (CanNotify)
            {
                objectsToNotify = bindingDefinition.GetObjectsToNotify(DataSource);
                if (objectsToNotify != null)
                {
                    foreach (INotifyPropertyChanged obj in objectsToNotify)
                    {
                        obj.PropertyChanged += OnPropertyChanged;
                    }
                }
            }
        }
Exemple #21
0
        private void CheckType(IBindingDefinition mainBindingDef, IBindingDefinition dataSourceType)
        {
            bool checkTypesOk = false;

            if (dataSourceType.IsACollection)
            {
                checkTypesOk = true;
            }
            //checkTypesOk = mainBindingDef.BindingType == dataSourceType.BindingType || mainBindingDef.BindingType.IsAssignableFrom(dataSourceType.BindingType);
            else
            {
                checkTypesOk = mainBindingDef.BindingType == dataSourceType.BindingType || mainBindingDef.BindingType.IsAssignableFrom(dataSourceType.BindingType);
            }

            if (!checkTypesOk)
            {
                Type expected = mainBindingDef.BindingType;
                Type got      = dataSourceType.BindingType;
                throw new BindingTemplateException($"DataSource has not got the right UnderlyingType. '{expected.Name}' (or a UnderlyingType derivated from) was expected, got '{got.Name}'");
            }
        }
Exemple #22
0
        public ExcelContextItemCheckBox(IBindingContextElement parent, IBindingDefinition bindingDefinition)
            : base(parent, bindingDefinition)
        {
            if (bindingDefinition != null)
            {
                CanNotify = bindingDefinition.CanNotify;
                excelBindingDefinition = bindingDefinition as ExcelBindingDefinitionCheckBox;

                if (excelBindingDefinition != null)
                {
                    objectsToNotify = excelBindingDefinition.GetObjectsToNotify(DataSource);
                    if (objectsToNotify != null)
                    {
                        foreach (INotifyPropertyChanged obj in objectsToNotify)
                        {
                            obj.PropertyChanged += OnPropertyChanged;
                        }
                    }
                }
            }
        }
Exemple #23
0
        /// <summary>
        /// Manage the contextual menus
        /// </summary>
        public IContextualMenu GetMenus(ExcelTemplateView view, Microsoft.Office.Interop.Excel.Range range, IBindingContextItem contextItem)
        {
            IBindingDefinition bindingDefinition = contextItem.BindingDefinition;

            if (bindingDefinition == null || !bindingDefinition.IsBoundWithData || bindingDefinition.BindingType == null)
            {
                return(null);
            }

            if (!((TemplateDefinition)contextItem.ParentElement.ParentPart.ParentContext.TemplateDefinition).CanSort)
            {
                return(null);
            }

            foreach (IContextualPart menuPart in sortSearchAndFilersMenu.Items)
            {
                ContextualMenuItem menuItem = menuPart as ContextualMenuItem;
                menuItem.SetAction(() => menuItem.MethodInfo.Invoke(null, new object[] { view, contextItem }));
            }
            return(sortSearchAndFilersMenu);
        }
        public ExcelContextItemWithFormula(IBindingContextElement parent, IBindingDefinition bindingDefinition)
            : base(parent, bindingDefinition)
        {
            excelBindingDefinitionWithFormula = bindingDefinition as ExcelBindingDefinitionWithFormula;
            CanNotify = excelBindingDefinitionWithFormula.CanNotify;

            if (excelBindingDefinitionWithFormula.FormulaBindingDefinition != null)
            {
                formulaBindingContext = excelBindingDefinitionWithFormula.FormulaBindingDefinition.ContextItemFactory(parent);
            }

            if (CanNotify)
            {
                objectsToNotify = excelBindingDefinitionWithFormula.GetObjectsToNotify(DataSource);
                if (objectsToNotify != null)
                {
                    foreach (INotifyPropertyChanged obj in objectsToNotify)
                    {
                        obj.PropertyChanged += OnPropertyChanged;
                    }
                }
            }
        }
Exemple #25
0
        public static IEnumerable <IModelProperty> CreateInstances(IModelType parent, Type type)
        {
            List <IModelProperty> ret = new List <IModelProperty>();

            if (type != null)
            {
                foreach (PropertyInfo pi in type.GetProperties())
                {
                    IBindingDefinition bindingDefinition = BindingDefinitionFactory.CreateInstance(pi);
                    if (bindingDefinition != null)
                    {
                        if (pi.PropertyType.Namespace.Equals("System"))
                        {
                            ret.Add(new ModelLeafProperty(parent, bindingDefinition));
                        }
                        else
                        {
                            ret.Add(new ModelProperty(parent, bindingDefinition));
                        }
                    }
                }
            }
            return(ret);
        }
        public static object TryConvert(IBindingDefinition bindingDefinition, object data)
        {
            if (data == null)
            {
                return(null);
            }

            if (bindingDefinition.BindingType == data.GetType() || bindingDefinition.BindingType == typeof(object))
            {
                return(data);
            }

            Type toConvertType = bindingDefinition.IsNullable ? bindingDefinition.BindingGenericType : bindingDefinition.BindingType;

            if (toConvertType == data.GetType())
            {
                return(data);
            }

            if (toConvertType == typeof(DateTime))
            {
                return(ToDateTime(data));
            }

            if (toConvertType == typeof(bool))
            {
                return(ToBoolean(data));
            }

            if (toConvertType.IsEnum)
            {
                return(ToEnum(toConvertType, data));
            }

            return(Convert.ChangeType(data, toConvertType));
        }
Exemple #27
0
 public ExcelContextItemNamedRange(IBindingContextElement parent, string name, IBindingDefinition bindingDefinition, IBindingContextItem nestedContextItem)
     : base(parent, bindingDefinition)
 {
     this.name = name;
     excelBindingDefinitionNamedRange = bindingDefinition as ExcelBindingDefinitionNamedRange;
     CanNotify         = excelBindingDefinitionNamedRange.CanNotify;
     NestedContextItem = nestedContextItem;
 }
 public void AddBindingDefinition(IBindingDefinition definition)
 {
     BindingParts.Add(definition);
     BindingDefinitions.Add(definition);
 }
        /// <summary>Analyze a cell of the template part</summary>
        private IDefinitionPart AnalyzeCell(ExcelTemplateDefinitionPart templateDefinitionPart, ExcelInterop.Range cell)
        {
            IDefinitionPart part = null;

            if (cell.Value2 != null)
            {
                string value = cell.Value2.ToString();
                if (!string.IsNullOrEmpty(value))
                {
                    string trimmedValue = value.Trim();
                    if (trimmedValue.StartsWith(LINKED_TEMPLATE_PREFIX))
                    {
                        try
                        {
                            XmlTemplateLink xmlTemplateLink = trimmedValue.Deserialize <XmlTemplateLink>();
                            TemplateLink    templateLink    = TemplateLink.CreateInstance(xmlTemplateLink);

                            ExcelTemplateDefinition  templateDefinition       = (ETKExcel.TemplateManager as ExcelTemplateManager).GetTemplateDefinitionFromLink(templateDefinitionPart, templateLink);
                            LinkedTemplateDefinition linkedTemplateDefinition = new LinkedTemplateDefinition(templateDefinitionPart.Parent, templateDefinition, templateLink);
                            templateDefinitionPart.AddLinkedTemplate(linkedTemplateDefinition);
                            part = linkedTemplateDefinition;
                        }
                        catch (Exception ex)
                        {
                            string message = $"Cannot create the linked template dataAccessor '{trimmedValue}'. {ex.Message}";
                            throw new EtkException(message, false);
                        }
                    }
                    else
                    {
                        if (trimmedValue.StartsWith(ExcelBindingFilterDefinition.Filter_PREFIX))
                        {
                            ExcelBindingFilterDefinition filterdefinition = ExcelBindingFilterDefinition.CreateInstance(templateDefinitionPart, trimmedValue);
                            templateDefinitionPart.AddFilterDefinition(filterdefinition);
                            part = filterdefinition;
                        }
                        else if (trimmedValue.StartsWith(ExcelBindingSearchDefinition.Search_PREFIX))
                        {
                            ExcelBindingSearchDefinition searchdefinition = ExcelBindingSearchDefinition.CreateInstance(trimmedValue);
                            templateDefinitionPart.AddSearchDefinition(searchdefinition);
                            part = searchdefinition;
                        }
                        else
                        {
                            try
                            {
                                IBindingDefinition bindingDefinition = CreateBindingDefinition(templateDefinitionPart, value, trimmedValue);
                                templateDefinitionPart.AddBindingDefinition(bindingDefinition);
                                part = bindingDefinition;
                            }
                            catch (Exception ex)
                            {
                                string message = $"Cannot create the binding definition for '{trimmedValue}'. {ex.Message}";
                                throw new EtkException(message, false);
                            }
                        }
                    }
                }
            }
            return(part);
        }
        public static ISorterDefinition CreateInstance(ITemplateDefinition templateDefinition, IBindingDefinition bindingDefinition, bool descending, bool caseSensitive)
        {
            if (templateDefinition == null || bindingDefinition == null)
            {
                return(null);
            }

            MethodInfo createLambdaExpression = typeof(SortDefinitionFactory).GetMethod("CreateInstance", BindingFlags.NonPublic | BindingFlags.Static).MakeGenericMethod(templateDefinition.BindingType.BindType, bindingDefinition.BindingType);

            return(createLambdaExpression.Invoke(null, new object[] { templateDefinition, bindingDefinition, descending, caseSensitive }) as ISorterDefinition);
        }