private static TriggerBase CreateTrigger(EntityFieldInfo fieldInfo, IDataService dataService, GenericDataListState state, Nullable<Boolean> isLocked, FrameworkElement element)
        {
            TriggerBase trigger = null;
            if (isLocked.HasValue)
            {
                MultiDataTrigger multiDataTrigger = new MultiDataTrigger();
                Condition conditionState = new Condition();
                conditionState.Binding = CreateBindingState(element);
                conditionState.Value = state;
                multiDataTrigger.Conditions.Add(conditionState);
                Condition conditionIsLocked = new Condition();
                conditionIsLocked.Binding = CreateBindingIsLocked(element);
                conditionIsLocked.Value = isLocked.Value;
                multiDataTrigger.Conditions.Add(conditionIsLocked);
                multiDataTrigger.Setters.Add(DataControlTemplateBuilder.CreateSetter(fieldInfo, dataService, state, isLocked, element));
                trigger = multiDataTrigger;
            }
            else
            {
                DataTrigger dataTrigger = new DataTrigger();
                dataTrigger.Binding = DataControlTemplateBuilder.CreateBindingState(element);
                dataTrigger.Value = state;
                dataTrigger.Setters.Add(DataControlTemplateBuilder.CreateSetter(fieldInfo, dataService, state, isLocked, element));
                trigger = dataTrigger;
            }

            return trigger;
        }
        internal static System.Windows.DataTemplate CreateCellTemplate(EntityFieldInfo entityFieldInfo,DataGrid dataGrid)
        {
            DataTemplate dataTemplate = new DataTemplate();
            FrameworkElementFactory contentControl = new FrameworkElementFactory(typeof(ContentControl));
            contentControl.SetBinding(ContentControl.ContentProperty, new Binding());
            Style contentControlStyle = new Style();
            contentControl.SetValue(ContentControl.StyleProperty, contentControlStyle);

            DataTemplate tpl = new DataTemplate();
            if (entityFieldInfo.ControlType == Infrastructure.Attributes.ControlType.Color)
            {
                FrameworkElementFactory grid = new FrameworkElementFactory(typeof(Grid));
                Binding binding = CreateBindingOneWay(entityFieldInfo.Path);
                binding.Converter = new StringToBrushConverter();
                grid.SetBinding(Grid.BackgroundProperty, binding);
                tpl.VisualTree = grid;
                contentControlStyle.Setters.Add(new Setter(ContentControl.ContentTemplateProperty, tpl));
                dataTemplate.VisualTree = contentControl;
            }
            else
            {
                FrameworkElementFactory textBox = new FrameworkElementFactory(typeof(TextBlock));
                if (entityFieldInfo.ControlType == Infrastructure.Attributes.ControlType.Pr)
                { textBox.SetValue(TextBlock.TextAlignmentProperty, TextAlignment.Right); }
                textBox.SetBinding(TextBlock.TextProperty, CreateBindingOneWay(entityFieldInfo.Path));
                tpl.VisualTree = textBox;
                contentControlStyle.Setters.Add(new Setter(ContentControl.ContentTemplateProperty, tpl));
                dataTemplate.VisualTree = contentControl;
            }

            return dataTemplate;
        }
 private static SetterBase CreateSetter(EntityFieldInfo fieldInfo, IDataService dataService, GenericDataListState state, bool? isLocked, FrameworkElement element)
 {
     Setter setter = new Setter();
     setter.Property = ContentControl.ContentTemplateProperty;
     setter.Value = DataControlTemplateBuilder.CreateTemplate(fieldInfo, dataService,  state, isLocked,element);
     return setter;
 }
 public GenericDataGridTemplateColumn(EntityFieldInfo fieldInfo,DataGrid dataGrid)
 {
     this.FieldInfo = fieldInfo;
     this.Header = this.FieldInfo.DisplayName;
     this.CellTemplate = DataGridTemplateBuilder.CreateCellTemplate(this.FieldInfo, dataGrid);
     this.CellEditingTemplate = DataGridTemplateBuilder.CreateCellEditingTemplate(this.FieldInfo, dataGrid);
 }
        internal static Style CreateStyle(EntityFieldInfo fieldInfo,IDataService dataService,FrameworkElement element)
        {
            Style style = new Style();
            style.Triggers.Add(DataControlTemplateBuilder.CreateTrigger(fieldInfo, dataService, GenericDataListState.Search, null, element));
            style.Triggers.Add(DataControlTemplateBuilder.CreateTrigger(fieldInfo, dataService, GenericDataListState.Display, true, element));
            style.Triggers.Add(DataControlTemplateBuilder.CreateTrigger(fieldInfo, dataService, GenericDataListState.Display, false, element));

            style.Triggers.Add(DataControlTemplateBuilder.CreateTrigger(fieldInfo, dataService, GenericDataListState.InsertingDisplay, false, element));
            style.Triggers.Add(DataControlTemplateBuilder.CreateTrigger(fieldInfo, dataService, GenericDataListState.InsertingEmpty, false, element));
            return style;
        }
 public override bool ValidateString(EntityFieldInfo fieldInfo, string valueString, out string message, out object result)
 {
     if (String.IsNullOrEmpty (valueString ))
     {
         message = "valeur vide non autorisé";
         result = null;
         return false ;
     }
     else
     {
         message =null;
         result = valueString;
         return true;
     }
 }
 internal static System.Windows.DataTemplate CreateCellEditingTemplate(EntityFieldInfo entityFieldInfo,DataGrid dataGrid)
 {
     DataTemplate dataTemplate = new DataTemplate();
     FrameworkElementFactory contentControl = new FrameworkElementFactory(typeof(ContentControl));
     contentControl.SetBinding(ContentControl.ContentProperty, new Binding());
     Style contentControlStyle = new Style();
     contentControlStyle.Triggers.Add(CreateTrigger(entityFieldInfo, GenericDataListState.Search, dataGrid));
     contentControlStyle.Triggers.Add(CreateTrigger(entityFieldInfo, GenericDataListState.Display, dataGrid));
     contentControlStyle.Triggers.Add(CreateTrigger(entityFieldInfo, GenericDataListState.InsertingEmpty, dataGrid));
     contentControlStyle.Triggers.Add(CreateTrigger(entityFieldInfo, GenericDataListState.Updating, dataGrid));
     contentControlStyle.Triggers.Add(CreateTrigger(entityFieldInfo, GenericDataListState.InsertingDisplay, dataGrid));
     contentControl.SetValue(ContentControl.StyleProperty, contentControlStyle);
     contentControl.AddHandler(ContentControl.GotFocusEvent, new RoutedEventHandler(OnContentControlGotFocus));
     dataTemplate.VisualTree = contentControl;
     return dataTemplate;
 }
        public override bool ValidateString(EntityFieldInfo fieldInfo, string valueString, out string message, out object result)
        {
            if (fieldInfo.ParentColumnInfo == null)
            {
                if (fieldInfo.ControlType == Attributes.ControlType.Pr)
                {
                    if (Validator.ValidateDataType(valueString, typeof (String), out message, out result))
                    {
                        return true;
                    }
                    else
                    {
                        return false;
                    }
                }
                else
                {
                    if (fieldInfo.ControlType == Attributes.ControlType.Pr)
                    {
                        if (Validator.ValidateDataType(valueString, typeof(String), out message, out result))
                        {
                            return true;
                        }
                        else
                        {
                            return false;
                        }
                    }
                    else
                    {
                        if (Validator.ValidateDataType(valueString, fieldInfo.ColumnInfo.PropertyType, out message, out result))
                        {
                            return true;
                        }
                        else
                        {
                            return false;
                        }
                    }

                }

            }
            else
            {
                if (fieldInfo.ControlType == Attributes.ControlType.Pr)
                {
                    if (Validator.ValidateDataType(valueString, typeof(string), out message, out result))
                    {
                        return true;
                    }
                    else
                    {
                        return false;
                    }
                }
                else
                {
                    if (Validator.ValidateDataType(valueString, fieldInfo.ParentColumnInfo.PropertyType, out message, out result))
                    {
                        return true;
                    }
                    else
                    {
                        return false;
                    }
                }

            }
        }
 private static FrameworkElementFactory CreateTemplateText(EntityFieldInfo entityFieldInfo, GenericDataListState state, DataGrid dataGrid)
 {
     FrameworkElementFactory textBox = new FrameworkElementFactory(typeof(TextBox));
       textBox.SetBinding(TextBox.TextProperty, CreateBindingTwoWay(entityFieldInfo.Path));
       return  textBox;
 }
        private static DataTrigger CreateTrigger(EntityFieldInfo entityFieldInfo, GenericDataListState state, DataGrid dataGrid)
        {
            DataTrigger dataTrigger = new DataTrigger();
              dataTrigger.Binding = CreateBindingState(state, dataGrid);
              dataTrigger.Value = state;
              dataTrigger.Setters.Add(CreateSetter(entityFieldInfo, state, dataGrid));

              return dataTrigger;
        }
 private static FrameworkElementFactory CreateTemplateCombo(EntityFieldInfo entityFieldInfo, GenericDataListState state, DataGrid dataGrid)
 {
     String[]  items = entityFieldInfo.Path.Split(".".ToCharArray(), StringSplitOptions.RemoveEmptyEntries);
       FrameworkElementFactory comboBox = new FrameworkElementFactory(typeof(ComboBox));
       if (state == GenericDataListState.Search)
       { comboBox.SetValue(ComboBox.IsEditableProperty, true); }
       String comboListPath = "ComboItemsSource[" + items[items.Length - 2] + "." + items[items.Length - 1] + "]";
       Binding bindingList = new Binding(comboListPath);
       bindingList.Mode = BindingMode.OneWay;
       bindingList.UpdateSourceTrigger = UpdateSourceTrigger.PropertyChanged;
       comboBox.SetBinding(ComboBox.ItemsSourceProperty, bindingList);
       Binding  binding = new Binding();
       binding.Path = new PropertyPath("[" + entityFieldInfo.Path + "]");
       binding.Mode = BindingMode.TwoWay;
       binding.UpdateSourceTrigger = UpdateSourceTrigger.PropertyChanged;
       binding.ValidatesOnDataErrors = true;
       comboBox.SetBinding(ComboBox.SelectedItemProperty, binding);
       return  comboBox;
 }
        private static FrameworkElementFactory CreateTemplateDate(EntityFieldInfo entityFieldInfo, GenericDataListState state, DataGrid dataGrid)
        {
            FrameworkElementFactory grid = new FrameworkElementFactory(typeof(Grid));

              var column1 = new FrameworkElementFactory(typeof(ColumnDefinition));
              column1.SetValue(ColumnDefinition.WidthProperty, new GridLength(1, GridUnitType.Star));
              var column2 = new FrameworkElementFactory(typeof(ColumnDefinition));
              column2.SetValue(ColumnDefinition.WidthProperty, new GridLength(1, GridUnitType.Auto));

              grid.AppendChild(column1);
              grid.AppendChild(column2);

              FrameworkElementFactory textBox = new FrameworkElementFactory(typeof(TextBox));
              textBox.SetBinding(TextBox.TextProperty, CreateBindingTwoWay(entityFieldInfo.Path));
              textBox.SetValue(Grid.ColumnProperty, 0);
              grid.AppendChild(textBox);

              FrameworkElementFactory datePicker = new FrameworkElementFactory(typeof(DatePicker));
              datePicker.SetValue(DatePicker.WidthProperty, 28D);
              datePicker.SetValue(Grid.ColumnProperty, 1);
              grid.AppendChild(datePicker);

              Binding bindingSelectedDate = new Binding("[" + entityFieldInfo.Path + "]");
              bindingSelectedDate.Mode = BindingMode.TwoWay;
              bindingSelectedDate.UpdateSourceTrigger = UpdateSourceTrigger.PropertyChanged;
              bindingSelectedDate.Converter = new StringToDateConverter();
              datePicker.SetBinding(DatePicker.SelectedDateProperty, bindingSelectedDate);
              return  grid;
        }
 private static FrameworkElementFactory CreateTemplateCheck(EntityFieldInfo entityFieldInfo, GenericDataListState state, DataGrid dataGrid)
 {
     FrameworkElementFactory comboBox = new FrameworkElementFactory(typeof(ComboBox));
       if (state == GenericDataListState.Search)
       { comboBox.SetValue(ComboBox.IsEditableProperty, true); }
       List<String> items = new List<string>();
       items.Add(CultureConfiguration.BooleanNullString);
       items.Add(CultureConfiguration.BooleanTrueString);
       items.Add(CultureConfiguration.BooleanFalseString);
       comboBox.SetValue(ComboBox.ItemsSourceProperty, items);
       Binding binding = new Binding();
       binding.Path = new PropertyPath("[" +entityFieldInfo.Path +"]");
       binding.Mode = BindingMode.TwoWay;
       binding.UpdateSourceTrigger = UpdateSourceTrigger.PropertyChanged;
       binding.ValidatesOnDataErrors = true;
       comboBox.SetBinding(ComboBox.SelectedItemProperty, binding);
       return  comboBox;
 }
 private static FrameworkElementFactory CreateTemplateColor(EntityFieldInfo entityFieldInfo, GenericDataListState state, DataGrid dataGrid)
 {
     FrameworkElementFactory colorPicker = new FrameworkElementFactory(typeof(ColorPicker));
       Binding binding = CreateBindingTwoWay(entityFieldInfo.Path);
       binding.Converter = new StringToColorConverter();
       colorPicker.SetBinding(ColorPicker.SelectedColorProperty, binding);
       return colorPicker;
 }
 private static Setter CreateSetter(EntityFieldInfo entityFieldInfo, GenericDataListState state, DataGrid dataGrid)
 {
     Setter setter = new Setter();
       setter.Property = ContentControl.ContentTemplateProperty;
       setter.Value = CreateTemplate(entityFieldInfo, state, dataGrid);
       return setter;
 }
        private static DataTemplate CreateTemplate(EntityFieldInfo entityFieldInfo, GenericDataListState state, DataGrid dataGrid)
        {
            DataTemplate dataTemplate = new DataTemplate();

              if (entityFieldInfo.IsNeeded == false && entityFieldInfo.IsMainTableField == false && state != GenericDataListState.Search)
              {
              return CreateCellTemplate(entityFieldInfo, dataGrid);
              }
              else
              {
              switch (entityFieldInfo .ControlType )
              {
                  case Infrastructure.Attributes.ControlType.Check :
                      dataTemplate.VisualTree = CreateTemplateCheck(entityFieldInfo, state, dataGrid);
                      break;
                      case Infrastructure.Attributes.ControlType.Color :
                      dataTemplate.VisualTree = CreateTemplateColor(entityFieldInfo, state, dataGrid);
                      break;
                      case Infrastructure.Attributes.ControlType.Date :
                      dataTemplate.VisualTree = CreateTemplateDate(entityFieldInfo, state, dataGrid);
                      break;
                      case Infrastructure.Attributes.ControlType.Decimal :
                      dataTemplate.VisualTree = CreateTemplateDecimal(entityFieldInfo, state, dataGrid);
                      break;
                      case Infrastructure.Attributes.ControlType.Integer :
                      dataTemplate.VisualTree = CreateTemplateInteger(entityFieldInfo, state, dataGrid);
                      break;
                      case Infrastructure.Attributes.ControlType.Pr :
                      dataTemplate.VisualTree = CreateTemplatePr(entityFieldInfo, state, dataGrid);
                      break;
                      case Infrastructure.Attributes.ControlType.Text :
                      dataTemplate.VisualTree = CreateTemplateText(entityFieldInfo, state, dataGrid);
                      break;
                      case Infrastructure.Attributes.ControlType.Combo:
                      dataTemplate.VisualTree = CreateTemplateCombo(entityFieldInfo, state, dataGrid);
                      break;

              }

              }

              return dataTemplate;
        }
        private static DataTemplate CreateTemplateSearch(EntityFieldInfo fieldInfo, IDataService dataService, FrameworkElement element)
        {
            Type propertyType = null;
            DataTemplate dataTemplate = new DataTemplate();
            if ( fieldInfo.ColumnInfo != null)
            { propertyType = fieldInfo.ColumnInfo.PropertyType;}

            if (fieldInfo.ParentColumnInfo != null)
            { propertyType = fieldInfo.ParentColumnInfo.PropertyType; }
            if (fieldInfo.ControlType == ControlType.Combo)
            {
                String[] items = fieldInfo.Path.Split(".".ToCharArray(), StringSplitOptions.RemoveEmptyEntries);
                FrameworkElementFactory comboBox = new FrameworkElementFactory(typeof(ComboBox));
                comboBox.SetValue(ComboBox.HeightProperty, 22D);
                String comboListPath = "ItemsView.CurrentItem.ComboItemsSource[" + items[items.Length - 2] + "." + items[items.Length - 1] + "]";
                Binding bindingList = new Binding(comboListPath);
                bindingList.Mode = BindingMode.OneWay;
                bindingList.UpdateSourceTrigger = UpdateSourceTrigger.PropertyChanged;
                comboBox.SetBinding(ComboBox.ItemsSourceProperty, bindingList);
                comboBox.SetValue(ComboBox.IsEditableProperty, true);
                Binding binding = new Binding();
                binding.Path = new PropertyPath("ItemsView.CurrentItem[" + fieldInfo.Path + "]");
                binding.Mode = BindingMode.TwoWay;
                binding.UpdateSourceTrigger = UpdateSourceTrigger.PropertyChanged;
                binding.ValidatesOnDataErrors = true;
                comboBox.SetBinding(ComboBox.SelectedItemProperty, binding);
                dataTemplate.VisualTree = comboBox;
            }

            else if (fieldInfo.ControlType == Infrastructure.Attributes.ControlType.Color)
                {
                    FrameworkElementFactory colorPicker = new FrameworkElementFactory(typeof(ColorPicker));
                    Binding binding = CreateBindingTwoWay(fieldInfo.Path);
                    colorPicker.SetValue(ColorPicker.MinHeightProperty, 22D);
                    binding.Converter = new StringToColorConverter();
                    colorPicker.SetBinding(ColorPicker.SelectedColorProperty, binding);
                    dataTemplate.VisualTree = colorPicker;
                }
            else if (fieldInfo.ControlType == Infrastructure.Attributes.ControlType.Check)
                {
                    FrameworkElementFactory comboBox = new FrameworkElementFactory(typeof(ComboBox));
                    comboBox.SetValue(ComboBox.IsEditableProperty, true);
                    List<String> items = new List<string>();
                    items.Add(CultureConfiguration.BooleanNullString);
                    items.Add(CultureConfiguration.BooleanTrueString);
                    items.Add(CultureConfiguration.BooleanFalseString);
                    comboBox.SetValue(ComboBox.ItemsSourceProperty, items);
                    Binding binding = new Binding();
                    binding.Path = new PropertyPath("ItemsView.CurrentItem[" + fieldInfo.Path + "]");
                    binding.Mode = BindingMode.TwoWay;
                    binding.UpdateSourceTrigger = UpdateSourceTrigger.PropertyChanged;
                    binding.ValidatesOnDataErrors = true;
                    comboBox.SetBinding(ComboBox.SelectedItemProperty, binding);
                    dataTemplate.VisualTree = comboBox;
                }
            else if (propertyType.Equals(typeof(DateTime)) || propertyType.Equals(typeof(Nullable<DateTime>)))
                {
                    FrameworkElementFactory grid = new FrameworkElementFactory(typeof(Grid));
                    grid.SetValue(Grid.HeightProperty, 22D);
                    var column1 = new FrameworkElementFactory(typeof(ColumnDefinition));
                    column1.SetValue(ColumnDefinition.WidthProperty, new GridLength(1, GridUnitType.Star));
                    var column2 = new FrameworkElementFactory(typeof(ColumnDefinition));
                    column2.SetValue(ColumnDefinition.WidthProperty, new GridLength(1, GridUnitType.Auto));

                    grid.AppendChild(column1);
                    grid.AppendChild(column2);

                    FrameworkElementFactory textBox = new FrameworkElementFactory(typeof(TextBox));
                    textBox.SetBinding(TextBox.TextProperty, CreateBindingTwoWay(fieldInfo.Path));
                    textBox.SetValue(Grid.ColumnProperty, 0);
                    grid.AppendChild(textBox);

                    FrameworkElementFactory datePicker = new FrameworkElementFactory(typeof(DatePicker));
                    datePicker.SetValue(DatePicker.WidthProperty, 28D);
                    datePicker.SetValue(Grid.ColumnProperty, 1);
                    grid.AppendChild(datePicker);

                    Binding bindingSelectedDate = new Binding("ItemsView.CurrentItem[" + fieldInfo.Path + "]");
                    bindingSelectedDate.Mode = BindingMode.TwoWay;
                    bindingSelectedDate.UpdateSourceTrigger = UpdateSourceTrigger.PropertyChanged;
                    bindingSelectedDate.Converter = new StringToDateConverter();
                    datePicker.SetBinding(DatePicker.SelectedDateProperty, bindingSelectedDate);
                    dataTemplate.VisualTree = grid;

                }
            else if (propertyType.Equals(typeof(String)) || propertyType.Equals(typeof(Int64)) || propertyType.Equals(typeof(Nullable<Int64>)) || propertyType.Equals(typeof(Double)) || propertyType.Equals(typeof(Nullable<Double>)))
                {
                    FrameworkElementFactory textBox = new FrameworkElementFactory(typeof(TextBox));
                    textBox.SetValue(TextBox.MinHeightProperty, 22D);
                    textBox.SetBinding(TextBox.TextProperty, CreateBindingTwoWay(fieldInfo.Path));
                    dataTemplate.VisualTree = textBox;
                }

            return dataTemplate;
        }
        private static object CreateTemplate(EntityFieldInfo fieldInfo, IDataService dataService, GenericDataListState state, bool? isLocked, FrameworkElement element)
        {
            if (isLocked.HasValue)
            {
                if (isLocked.Value == true)
                {
                    if (state == GenericDataListState.Deleting)
                    {
                        return DataControlTemplateBuilder.CreateTemplateDisplay(fieldInfo, dataService,element);
                    }
                    else if (state == GenericDataListState.Display)
                    {
                        return DataControlTemplateBuilder.CreateTemplateDisplay(fieldInfo, dataService, element);
                    }
                    else if (state == GenericDataListState.InsertingDisplay)
                    {
                        if (fieldInfo.IsNeeded == false && fieldInfo.IsMainTableField == false)
                        { return DataControlTemplateBuilder.CreateTemplateDisplay(fieldInfo, dataService, element); }
                        else
                        { return DataControlTemplateBuilder.CreateTemplateEdit(fieldInfo, dataService, element); }

                    }
                    else if (state == GenericDataListState.InsertingEmpty)
                    {
                        if (fieldInfo.IsNeeded == false && fieldInfo.IsMainTableField == false)
                        { return DataControlTemplateBuilder.CreateTemplateDisplay(fieldInfo, dataService, element); }
                        else
                        { return DataControlTemplateBuilder.CreateTemplateEdit(fieldInfo, dataService, element); }
                    }
                    else if (state == GenericDataListState.Search)
                    {
                        return DataControlTemplateBuilder.CreateTemplateSearch(fieldInfo, dataService, element);
                    }
                    else if (state == GenericDataListState.Updating)
                    {
                        if (fieldInfo.IsNeeded == false && fieldInfo.IsMainTableField == false)
                        { return DataControlTemplateBuilder.CreateTemplateDisplay(fieldInfo, dataService, element); }
                        else
                        { return DataControlTemplateBuilder.CreateTemplateEdit(fieldInfo, dataService, element); }
                    }
                }
                else
                {
                    if (state == GenericDataListState.Deleting)
                    {
                        return DataControlTemplateBuilder.CreateTemplateDisplay(fieldInfo, dataService, element);
                    }
                    else if (state == GenericDataListState.Display)
                    {
                        if (fieldInfo.IsNeeded == false && fieldInfo.IsMainTableField == false)
                        { return DataControlTemplateBuilder.CreateTemplateDisplay(fieldInfo, dataService, element); }
                        else
                        { return DataControlTemplateBuilder.CreateTemplateEdit(fieldInfo, dataService, element); }
                    }
                    else if (state == GenericDataListState.InsertingDisplay)
                    {
                        if (fieldInfo.IsNeeded == false && fieldInfo.IsMainTableField == false)
                        { return DataControlTemplateBuilder.CreateTemplateDisplay(fieldInfo, dataService, element); }
                        else
                        { return DataControlTemplateBuilder.CreateTemplateEdit(fieldInfo, dataService, element); }
                    }
                    else if (state == GenericDataListState.InsertingEmpty)
                    {
                        if (fieldInfo.IsNeeded == false && fieldInfo.IsMainTableField == false)
                        { return DataControlTemplateBuilder.CreateTemplateDisplay(fieldInfo, dataService, element); }
                        else
                        { return DataControlTemplateBuilder.CreateTemplateEdit(fieldInfo, dataService, element); }
                    }
                    else if (state == GenericDataListState.Search)
                    {
                        return CreateTemplateSearch(fieldInfo, dataService, element);
                    }
                    else if (state == GenericDataListState.Updating)
                    {
                        if (fieldInfo.IsNeeded == false && fieldInfo.IsMainTableField == false)
                        { return DataControlTemplateBuilder.CreateTemplateDisplay(fieldInfo, dataService, element); }
                        else
                        { return DataControlTemplateBuilder.CreateTemplateEdit(fieldInfo, dataService, element); }
                    }
                }
            }
            else
            {
                if (state == GenericDataListState.Deleting)
                {
                    return DataControlTemplateBuilder.CreateTemplateDisplay(fieldInfo, dataService, element);
                }
                else if (state == GenericDataListState.Display)
                {
                    return DataControlTemplateBuilder.CreateTemplateDisplay(fieldInfo, dataService, element);
                }
                else if (state == GenericDataListState.InsertingDisplay)
                {
                    if (fieldInfo.IsNeeded == false && fieldInfo.IsMainTableField == false)
                    { return DataControlTemplateBuilder.CreateTemplateDisplay(fieldInfo, dataService, element); }
                    else
                    { return DataControlTemplateBuilder.CreateTemplateEdit(fieldInfo, dataService, element); }
                }
                else if (state == GenericDataListState.InsertingEmpty)
                {
                    if (fieldInfo.IsNeeded == false && fieldInfo.IsMainTableField == false)
                    { return DataControlTemplateBuilder.CreateTemplateDisplay(fieldInfo, dataService, element); }
                    else
                    { return DataControlTemplateBuilder.CreateTemplateEdit(fieldInfo, dataService, element); }
                }
                else if (state == GenericDataListState.Search)
                {
                    return DataControlTemplateBuilder.CreateTemplateSearch(fieldInfo, dataService, element);
                }
                else if (state == GenericDataListState.Updating)
                {
                    if (fieldInfo.IsNeeded == false && fieldInfo.IsMainTableField == false)
                    { return DataControlTemplateBuilder.CreateTemplateDisplay(fieldInfo, dataService, element); }
                    else
                    { return DataControlTemplateBuilder.CreateTemplateEdit(fieldInfo, dataService, element); }
                }
            }

            return null;
        }
Esempio n. 19
0
        public void CreateTableFields()
        {
            IDataService dataService = ServiceLocator.Current.GetInstance<IDataService>();

            foreach (EntityTableInfo tableInfo in this.TableInfos)
            {

                foreach (EntityColumnInfo columnInfo in tableInfo.ColumnInfos)
                {
                    if (columnInfo.ControlType != Attributes.ControlType.None)
                    {
                        if (columnInfo.ForeignKeyNames != null && columnInfo.ForeignKeyNames.Count > 0 && columnInfo.PrimaryKeyName == null)
                        {
                            List<EntityFieldInfo> compositeFields = new List<EntityFieldInfo>();
                            List<EntityColumnInfo> parentColumnInfos = dataService.GetAllParentUniqueKeyColumnInfos(columnInfo);
                            foreach (EntityColumnInfo parentColumnInfo in parentColumnInfos)
                            {
                                EntityFieldInfo fieldInfo = new EntityFieldInfo();
                                fieldInfo.ColumnInfo = columnInfo;
                                fieldInfo.ParentColumnInfo = parentColumnInfo;
                                fieldInfo.TableInfo = tableInfo;
                                compositeFields.Add(fieldInfo);
                                fieldInfo.IsMainTableField = false;
                                fieldInfo.ControlType = Attributes.ControlType.Combo;
                                if (columnInfo.AllowNull)
                                { fieldInfo.IsNeeded = false; }
                                else
                                { fieldInfo.IsNeeded = true; }

                                List<EntityTableInfo> tableTree = dataService.TraverseEntityInfoTree(parentColumnInfo.TableInfo, tableInfo);
                                List<String> paths = new List<string>();
                                foreach (EntityTableInfo parentTable in tableTree)
                                { paths.Add(parentTable.EntityType.Name); }
                                paths.Add(parentColumnInfo.PropertyName);
                                fieldInfo.Path = String.Join(".", paths);

                            }
                            compositeFields.Reverse();
                            foreach (EntityFieldInfo fieldInfo in compositeFields)
                            {
                                tableInfo.FieldInfos.Add(fieldInfo);
                                columnInfo.FieldInfos.Add(fieldInfo);
                            }

                        }
                        else
                        {
                            EntityFieldInfo fieldInfo = new EntityFieldInfo();
                            fieldInfo.ColumnInfo = columnInfo;
                            fieldInfo.TableInfo = tableInfo;
                            fieldInfo.IsMainTableField = true;
                            fieldInfo.IsNeeded = !columnInfo.AllowNull;
                            fieldInfo.ControlType = columnInfo.ControlType;
                            tableInfo.FieldInfos.Add(fieldInfo);
                            columnInfo.FieldInfos.Add(fieldInfo);
                            fieldInfo.Path = columnInfo.PropertyName;
                            if (String.IsNullOrEmpty(fieldInfo.Path)) throw new Exception("Field Path Empty");
                        }
                    }

                }
                List<EntityTableInfo> parentTables = dataService.GetAllParentTableInfos(tableInfo);
                foreach (EntityTableInfo parentTable in parentTables)
                {
                    foreach (EntityColumnInfo parentTableColumnInfo in parentTable.ColumnInfos)
                    {
                        if (parentTableColumnInfo.ControlType != Attributes.ControlType.None)
                        {
                            if (!(from c in tableInfo.FieldInfos
                                 where c.ParentColumnInfo != null && c.ParentColumnInfo.Equals (parentTableColumnInfo)

                                 select c).Any())
                            {
                                EntityFieldInfo fieldInfo = new EntityFieldInfo();
                                fieldInfo.ParentColumnInfo = parentTableColumnInfo;
                                fieldInfo.TableInfo = tableInfo;
                                fieldInfo.IsMainTableField = false;
                                fieldInfo.IsNeeded = false;
                                fieldInfo.ControlType = parentTableColumnInfo.ControlType;
                                List<EntityTableInfo> tableTree = dataService.TraverseEntityInfoTree(parentTableColumnInfo.TableInfo, tableInfo);
                                List<String> paths = new List<string>();
                                foreach (EntityTableInfo parentTableInTree in tableTree)
                                { paths.Add(parentTableInTree.EntityType.Name); }
                                paths.Add(parentTableColumnInfo.PropertyName);
                                fieldInfo.Path = String.Join(".", paths);
                                tableInfo.FieldInfos.Add(fieldInfo);
                            }
                        }
                    }
                }
            }

            foreach (EntityTableInfo tableInfo in this.TableInfos)
            {
                tableInfo.CreateValidationRules();
              //  Console.WriteLine("Table " + tableInfo.DisplayName);
                foreach (EntityFieldInfo fieldInfo in tableInfo.FieldInfos)
                {
                    //Console.WriteLine("\t Champ " + fieldInfo.Path);
                    fieldInfo.CreateValidationRules();
                }

            }
        }
        public override bool ValidateString(EntityFieldInfo fieldInfo, string valueString, out string message, out object value)
        {
            Int64 valueInt32 = 0;
            Double valueDouble = 0;
            DateTime valueDateTime = DateTime.Now;

            if (fieldInfo.ColumnInfo != null && fieldInfo.ParentColumnInfo == null)
            {
                EntityColumnInfo columnInfo = fieldInfo.ColumnInfo;

                    if (columnInfo.ControlType == ControlType.Check)
                    {
                        if (valueString == null || valueString.Equals(CultureConfiguration.BooleanNullString) || String.IsNullOrEmpty(valueString))
                        {
                            if (columnInfo.AllowNull)
                            {
                                value = null;
                                message = null;
                                return true;
                            }
                            else
                            {
                                value = null;
                                message = "valeur " + CultureConfiguration.BooleanNullString + " non autorisée";
                                return false;
                            }
                        }
                        else
                        {
                            if (valueString.Equals(CultureConfiguration.BooleanTrueString))
                            {
                                value = true;
                                message = null;
                                return true;
                            }
                            else if (valueString.Equals(CultureConfiguration.BooleanFalseString))
                            {
                                value = false;
                                message = null;
                                return true;
                            }
                            else
                            {
                                value = null;
                                message = null;
                                return true;
                            }
                        }

                    }
                    else if (columnInfo.ControlType == ControlType.Text)
                    {
                        if (valueString == null)
                        {
                            value = null;
                            message = "valeur vide non autorisé";
                            return false;
                        }
                        else
                        {
                            if (valueString.Length > columnInfo.MaxCharLength)
                            {
                                value = null;
                                message = "le texte de doit pas dépasser " + columnInfo.MaxCharLength + " caractères";
                                return false;
                            }
                            else
                            {
                                value = valueString;
                                message = null;
                                return true;
                            }
                        }

                    }
                    else if (columnInfo.ControlType == ControlType.Color)
                    {
                        value = valueString;
                        message = null;
                        return true;
                    }
                    else if (columnInfo.ControlType == ControlType.Integer)
                    {
                        if (String.IsNullOrEmpty(valueString))
                        {
                            if (columnInfo.AllowNull)
                            {
                                value = null;
                                message = null;
                                return true;
                            }
                            else
                            {
                                value = null;
                                message = "valeur vide non autorisé";
                                return false;
                            }
                        }
                        else
                        {
                            valueInt32 = Int64.Parse(valueString);
                            if (valueInt32 > columnInfo.MaxNumericValue)
                            {
                                message = "la valeur doit être inférieur à  " + columnInfo.MaxNumericValue;
                                value = null;
                                return false;
                            }
                            else if (valueInt32 < columnInfo.MinNumericValue)
                            {
                                message = "la valeur doit être supérieur à  " + columnInfo.MaxNumericValue;
                                value = null;
                                return false;
                            }
                            else
                            {
                                value = valueInt32;
                                message = null;
                                return true;
                            }
                        }

                    }
                    else if (columnInfo.ControlType == ControlType.Decimal)
                    {
                        if (String.IsNullOrEmpty(valueString))
                        {
                            if (columnInfo.AllowNull)
                            {
                                value = null;
                                message = null;
                                return true;
                            }
                            else
                            {
                                value = null;
                                message = "valeur vide non autorisé";
                                return false;
                            }
                        }
                        else
                        {
                            valueDouble = Double.Parse(valueString.Replace(",", "."), NumberStyles.AllowDecimalPoint, System.Globalization.CultureInfo.InvariantCulture);
                            if (valueDouble > columnInfo.MaxNumericValue)
                            {
                                message = "la valeur doit être inférieur à  " + columnInfo.MaxNumericValue;
                                value = null;
                                return false;
                            }
                            else if (valueDouble < columnInfo.MinNumericValue)
                            {
                                message = "la valeur doit être supérieur à  " + columnInfo.MaxNumericValue;
                                value = null;
                                return false;
                            }
                            else
                            {
                                value = valueDouble;
                                message = null;
                                return true;
                            }
                        }

                    }
                    else if (columnInfo.ControlType == ControlType.Date)
                    {
                        if (valueString.IndexOf(" ") != -1)
                        {
                            valueString = valueString.Substring(0, valueString.IndexOf(" "));
                        }
                        if (columnInfo.AllowNull)
                        {
                            Nullable<DateTime> valNullableDateTime = null;
                            if (!Validator.ValidateNullableDateTime(valueString, out message, out valNullableDateTime))
                            {
                                value = null;
                                message = null;
                                return false;
                            }
                            else
                            {
                                value = valNullableDateTime;
                                message = null;
                                return true;
                            }
                        }
                        else
                        {
                            DateTime valDateTime = DateTime.Now;
                            if (!Validator.ValidateDateTime(valueString, out message, out valDateTime))
                            {
                                message = valueString + " n'est pas une date au format " + CultureConfiguration.DateFormatString;
                                value = null;
                                return false;
                            }
                            else
                            {
                                value = valDateTime;
                                message = null;
                                return true;
                            }
                        }
                    }
                    else if (columnInfo.ControlType == ControlType.None)
                    {
                        value = valueString;
                        message = null;
                        return true;
                    }
                    else if (columnInfo.ControlType == ControlType.Pr)
                    {
                        Int64 dplt = 10;
                        Int64 num = 0;
                        if (valueString.IndexOf("+") != -1)
                        {
                            String[] prItems = valueString.Split("+".ToCharArray(), StringSplitOptions.RemoveEmptyEntries);
                            if (prItems.Length == 2)
                            {
                                if (!Int64.TryParse(prItems[0].Trim(), out num) || !Int64.TryParse(prItems[1].Trim(), out dplt))
                                {
                                    value = null;
                                    message = valueString + " n'est pas un PR au format 12+852";
                                    return false;
                                }
                                else
                                {
                                    value = num.ToString() + " +" + dplt.ToString("0000");
                                    message = null;
                                    return true;
                                }
                            }
                            else
                            {
                                value = null;
                                message = valueString + " n'est pas un PR au format 12+852";
                                return false;
                            }
                        }
                        else
                        {
                            if (!Int64.TryParse(valueString.Trim(), out num))
                            {
                                value = null;
                                message = valueString + " n'est pas un PR au format 12+852";
                                return false;
                            }
                            else
                            {
                                value = num.ToString() + " +0000";
                                message = null;
                                return true;
                            }
                        }
                    }
                }

            value = null;
            message = null;
            return true;
        }
 public abstract bool ValidateString(EntityFieldInfo fieldInfo, string valueString, out string message, out object result);
Esempio n. 22
0
        public static List<Symbology> CreateSymbologies(EntityFieldInfo fieldInfo, StatType statType,Nullable<StatFieldPart> fieldPart)
        {
            List<Symbology> symbologies = new List<Symbology>();
            Symbology symobology = null;
            SymbologyRuleEquals rule = null;
            Symbolizer symbolizer = null;
            if (statType == StatType.Count)
            {
                if (fieldInfo.ControlType == ControlType.Check)
                {

                    if (fieldInfo.ColumnInfo.AllowNull)
                    {
                        symobology = new Symbology();

                        rule = new SymbologyRuleEquals();
                        rule.Field = fieldInfo;
                        rule.Value = null;
                        symobology.DisplayName = "Non renseigné";
                        symobology.Rule = rule;
                        symbolizer = new Symbolizer();
                        symobology.Symbolizer = symbolizer;
                        symobology.Symbolizer.BaseColor = Colors.Gray;
                        symbologies.Add(symobology);
                    }

                    symobology = new Symbology();
                    rule = new SymbologyRuleEquals();
                    rule.Field = fieldInfo;
                    rule.Value = true;
                    symobology.DisplayName = "Oui";
                    symobology.Rule = rule;
                    symbolizer = new Symbolizer();
                    symobology.Symbolizer = symbolizer;
                    symobology.Symbolizer.BaseColor = Colors.Green;
                    symbologies.Add(symobology);

                    symobology = new Symbology();
                    rule = new SymbologyRuleEquals();
                    rule.Field = fieldInfo;
                    rule.Value = false;
                    symobology.DisplayName = "Non";
                    symobology.Rule = rule;
                    symbolizer = new Symbolizer();
                    symobology.Symbolizer = symbolizer;
                    symobology.Symbolizer.BaseColor = Colors.Red;
                    symbologies.Add(symobology);

                }
                else if (fieldInfo.ControlType == ControlType.Date)
                {
                    if (fieldPart == StatFieldPart.Year)
                    {
                        if (fieldInfo.ColumnInfo.AllowNull)
                        {
                            symobology = new Symbology();
                            rule = new SymbologyRuleEquals();
                            rule.Field = fieldInfo;
                            rule.Value = null;
                            symobology.DisplayName = "Non renseigné";
                            symobology.Rule = rule;
                            symbolizer = new Symbolizer();
                            symobology.Symbolizer = symbolizer;
                            symobology.Symbolizer.BaseColor = Colors.Gray;
                            symbologies.Add(symobology);
                        }
                        /*
                        List<DateTime> dates = new List<DateTime>();
                        DbSet dbSet = dataService.GetDbSet(_selectedStatField.Field.ColumnInfo.TableInfo.EntityType);
                        IQueryable queryable = dbSet.AsQueryable();
                        System.Reflection.PropertyInfo propertyDate = _selectedStatField.Field.ColumnInfo.TableInfo.EntityType.GetProperty(_selectedStatField.Field.Path);
                        foreach (Object obj in queryable)
                        {
                            Object objDate = propertyDate.GetValue(obj);
                            if (objDate != null && objDate is DateTime)
                            {
                                DateTime date = (DateTime)objDate;
                                dates.Add(date);
                            }

                        }
                        if (dates.Count > 0)
                        {
                            int minYear = (from d in dates select d.Year).Min();
                            int maxYear = (from d in dates select d.Year).Min();
                            for (int year = minYear; year <= maxYear; year++)
                            {
                                symobology = new Symbology();
                                rule = new SymbologyRuleEquals();
                                rule.Field = _selectedStatField.Field;
                                rule.Value = year;
                                symobology.DisplayName = year.ToString();
                                symobology.Rule = rule;
                                symbolizer = new Symbolizer();
                                symobology.Symbolizer = symbolizer;
                                symobology.Symbolizer.BaseColor = Colors.Gray;
                                this.Symbologies.Add(symobology);
                            }
                        }
                         * */
                        //System.Linq.Expressions.ParameterExpression expressionBase = System.Linq.Expressions.Expression.Parameter(_selectedStatField.Field.ColumnInfo.TableInfo.EntityType, "item");
                        //MemberExpression exp = System.Linq.Expressions.Expression.Property(expressionBase, _selectedStatField.Field.Path);

                    }
                }
                else if (fieldInfo.ControlType == ControlType.Combo)
                {
                    List<Object> distinctValues = new List<object>();
                    IDataService dataService = ServiceLocator.Current.GetInstance<IDataService>();
                    DbSet dbSet = dataService.GetDbSet(fieldInfo.ParentColumnInfo.TableInfo.EntityType);
                    IQueryable queryable = dbSet.AsQueryable();
                    foreach (Object o in queryable)
                    {
                        distinctValues.Add(fieldInfo.ParentColumnInfo.Property.GetValue(o));
                    }
                    distinctValues = (from o in distinctValues orderby o select o).Distinct().ToList();
                    if (distinctValues.Count > 200)
                    {

                    }
                    else
                    {
                        if (fieldInfo.ColumnInfo.AllowNull)
                        {
                            symobology = new Symbology();

                            rule = new SymbologyRuleEquals();
                            rule.Field = fieldInfo;
                            rule.Value = null;
                            symobology.DisplayName = "Non renseigné";
                            symobology.Rule = rule;
                            symbolizer = new Symbolizer();
                            symobology.Symbolizer = symbolizer;
                            symobology.Symbolizer.BaseColor = Colors.Gray;
                            symbologies.Add(symobology);
                        }
                        double hueStep = 360D / distinctValues.Count;
                        double hue = 0D;
                        foreach (Object obj in distinctValues)
                        {
                            Color color = Colors.AliceBlue.FromHsv(hue, 0.8, 0.8);
                            symobology = new Symbology();

                            rule = new SymbologyRuleEquals();
                            rule.Field = fieldInfo;
                            rule.Value = obj;
                            symobology.DisplayName = obj.ToString();
                            symobology.Rule = rule;
                            symbolizer = new Symbolizer();
                            symobology.Symbolizer = symbolizer;
                            symobology.Symbolizer.BaseColor = color;
                            symbologies.Add(symobology);
                            hue += hueStep;

                        }

                    }

                }

            }
            return symbologies;
        }
 private static DataTemplate CreateTemplateDisplay(EntityFieldInfo fieldInfo, IDataService dataService, FrameworkElement element)
 {
     if (fieldInfo.ControlType == ControlType.Color)
     {
         DataTemplate dataTemplate = new DataTemplate();
         FrameworkElementFactory grid = new FrameworkElementFactory(typeof(Grid));
         grid.SetValue(TextBox.MinHeightProperty, 22D);
         grid.SetValue(TextBox.MinWidthProperty, 64D);
         Binding binding = CreateBindingOneWay(fieldInfo.Path);
         binding.Converter = new StringToBrushConverter();
         grid.SetBinding(Grid.BackgroundProperty, binding);
         dataTemplate.VisualTree = grid;
         return dataTemplate;
     }
     else
     {
         DataTemplate dataTemplate = new DataTemplate();
         FrameworkElementFactory textBox = new FrameworkElementFactory(typeof(TextBox));
         textBox.SetValue(TextBox.MinHeightProperty, 22D);
         textBox.SetBinding(TextBox.TextProperty, CreateBindingOneWay(fieldInfo.Path));
         textBox.SetValue(TextBox.IsReadOnlyProperty, true);
         dataTemplate.VisualTree = textBox;
         if (fieldInfo.IsMainTableField == false && fieldInfo.IsNeeded == false)
         {textBox.SetValue(TextBox.BackgroundProperty, Brushes.LightGray);}
         return dataTemplate;
     }
 }