コード例 #1
0
 public void InsertRecord(IRecord record, int index)
 {
     DoOnAsynchThread(() =>
     {
         RecordForm.LoadingViewModel.IsLoading = true;
         try
         {
             //this part may take a while to load/create (e.g. get record types for record type field)
             //so create on asynch thread while loading so doesn't freeze ui
             //then add to observable collection on main thread
             var rowItem = new GridRowViewModel(record, DynamicGridViewModel);
             DoOnMainThread(() =>
             {
                 try
                 {
                     DynamicGridViewModel.GridRecords.Insert(index, rowItem);
                     rowItem.OnLoad();
                     rowItem.RunOnChanges();
                     DynamicGridViewModel.RefreshGridButtons();
                 }
                 finally
                 {
                     RecordForm.LoadingViewModel.IsLoading = false;
                 }
             });
         }
         catch (Exception)
         {
             RecordForm.LoadingViewModel.IsLoading = false;
             throw;
         }
     });
 }
コード例 #2
0
        private void DynamicRowIsKeyboardFocusWithinChanged(object sender, DependencyPropertyChangedEventArgs e)
        {
            if ((bool)e.NewValue)
            {
                var model = GenerateDynamicRowMethod();
                if (Rows != null)
                {
                    ((IList)Rows).Add(model);
                }

                var rowsList    = (ItemsControl)FindName("rowsList");
                var viewModels  = (IList)RowViewModels;
                int rowIndex    = viewModels.Count;
                int columnIndex = -1;
                foreach (UIElement child in DynamicRow.Children)
                {
                    if (child.IsKeyboardFocusWithin)
                    {
                        columnIndex = Grid.GetColumn(child);
                        break;
                    }
                }

                rowsList.ItemContainerGenerator.StatusChanged += new NewRowFocusHelper(rowIndex, columnIndex).ItemContainerGeneratorStatusChanged;

                var row = new GridRowViewModel(model, Columns, ModelBindingMode.TwoWay);
                ((IList)RowViewModels).Add(row);
            }
        }
コード例 #3
0
 public IActionResult Index()
 {
     if (Identity != null)
     {
         Model["Username"] = Identity.Username;
         var products  = productsService.GetAllProducts().ToList();
         var rowsCount = products.Count / GridColumnsCount + 1;
         var gridRows  = new GridRowViewModel[rowsCount];
         for (int p = 0; p < products.Count; p++)
         {
             for (int r = 0; r <= rowsCount; r++)
             {
                 var gridColumns = new GridColumnViewModel[GridColumnsCount];
                 for (int c = 0; c < gridColumns.Length; c++)
                 {
                     var column = new GridColumnViewModel()
                     {
                         GridColumn = new ProductViewModel()
                         {
                             Id          = products[p].Id,
                             Name        = products[p].Name,
                             Description = products[p].Description.Length > 53
                                 ? $"{string.Join("", products[p].Description.Take(50))}..."
                                 : products[p].Description,
                             Price = $"${products[p].Price:F2}"
                         }
                     };
                     gridColumns[c] = column;
                     p++;
                     if (p >= products.Count)
                     {
                         break;
                     }
                 }
                 var row = new GridRowViewModel()
                 {
                     GridColumns = gridColumns.Where(gc => gc != null).ToArray()
                 };
                 gridRows[r] = row;
                 if (p >= products.Count)
                 {
                     break;
                 }
             }
         }
         Model["ProductsGrid"] = new GridViewModel()
         {
             GridRows = gridRows
         };
         if (Identity.Roles.Contains(UserRole.Admin.ToString()))
         {
             return(View("Index-Admin"));
         }
         if (Identity.Roles.Contains(UserRole.User.ToString()))
         {
             return(View("Index-User"));
         }
     }
     return(View());
 }
コード例 #4
0
        private void LoadRowsAsync()
        {
            lock (_searchLock)
            {
                LookupGridVisible = false;
                Searching         = true;
                try
                {
                    var records = GetSearchResults();

                    DoOnMainThread(() =>
                    {
                        try
                        {
                            LookupGridViewModel.DynamicGridViewModel.GridRecords = GridRowViewModel.LoadRows(records, LookupGridViewModel.DynamicGridViewModel);
                            OnPropertyChanged(nameof(LookupGridViewModel));
                            Searching         = false;
                            LookupGridVisible = LookupGridViewModel.DynamicGridViewModel.GridRecords.Any();
                        }
                        catch (Exception)
                        {
                            Searching = false;
                            throw;
                        }
                    });
                }
                catch (Exception)
                {
                    Searching = false;
                    throw;
                }
            }
        }
コード例 #5
0
 private void EditRow(GridRowViewModel row)
 {
     DoOnAsynchThread(() =>
     {
         LoadingViewModel.IsLoading      = true;
         LoadingViewModel.LoadingMessage = "Please Wait While Loading";
         try
         {
             var viewModel = GetEditRowViewModel(row);
             if (viewModel == null)
             {
                 throw new NotImplementedException("No Form For Type");
             }
             else
             {
                 viewModel.IsReadOnly = IsReadOnly;
                 RecordForm.LoadChildForm(viewModel);
             }
         }
         catch (Exception ex)
         {
             ApplicationController.UserMessage(string.Format("Error Adding Row: {0}", ex.DisplayString()));
         }
         finally
         {
             LoadingViewModel.IsLoading = false;
         }
     });
 }
コード例 #6
0
        public void OnEdit(GridRowViewModel gridRow)
        {
            var dialog = CreateEditDialog(gridRow.GetRecord().Id);

            dialog.OverideCompletionScreenMethod = ClearChildFormAndRefresh;
            dialog.OnCancel = ClearChildForm;
            ListViewModel.LoadChildForm(dialog);
        }
コード例 #7
0
        private void GenerateDynamicRow()
        {
            var viewModel = new GridRowViewModel(new EmptyModel(), Columns, ModelBindingMode.OneWay);
            var row       = new GridRow();

            row.InitializeColumns(this, viewModel);
            row.IsKeyboardFocusWithinChanged += DynamicRowIsKeyboardFocusWithinChanged;
            DynamicRow = row;
        }
コード例 #8
0
 private void UnbindRow(GridRowViewModel row)
 {
     foreach (var column in Columns)
     {
         if (column.HasSummarizeFunction)
         {
             row.RemovePropertyChangedHandler(column.SourceProperty, OnSummaryPropertyChanged);
         }
     }
 }
コード例 #9
0
        public override void AddSelectedItem(GridRowViewModel selectedRow, RecordEntryViewModelBase recordForm, string subGridReference)
        {
            var gridField          = GetEntryViewModel(recordForm).GetEnumerableFieldViewModel(subGridReference);
            var targetPropertyname = GetTargetProperty(recordForm, subGridReference).Name;
            var newRecord          = recordForm.RecordService.NewRecord(GetEnumeratedType(recordForm, subGridReference).AssemblyQualifiedName);
            var lookup             = GetLookupService(recordForm, subGridReference).ToLookup(selectedRow.GetRecord());

            newRecord.SetField(targetPropertyname, lookup, recordForm.RecordService);
            //if (gridField.GridRecords.Any(g => g.GetLookupFieldFieldViewModel(targetPropertyname).Value == lookup))
            //    return;
            //gridField.InsertRecord(newRecord, 0);
            InsertNewItem(recordForm, subGridReference, newRecord);
        }
コード例 #10
0
        public RecordEntryFormViewModel GetEditRowViewModel(GridRowViewModel row)
        {
            var viewModel = FormService.GetEditRowViewModel(SectionIdentifier, RecordForm, (record) =>
            {
                RecordForm.ClearChildForm();
                var index = DynamicGridViewModel.GridRecords.IndexOf(row);
                DoOnMainThread(() =>
                {
                    DynamicGridViewModel.GridRecords.Remove(row);
                    InsertRecord(record, index == -1 ? 0 : index);
                });
            }, () => RecordForm.ClearChildForm(), row);

            return(viewModel);
        }
コード例 #11
0
        public void InitializeColumns(GridView view, GridRowViewModel rowViewModel)
        {
            foreach (var column in view.Columns)
            {
                ColumnDefinitions.Add(GridView.GenerateColumnDefinition(column));
            }

            if (view.CanReorder || view.CanRemove)
            {
                ColumnDefinitions.Add(new ColumnDefinition
                {
                    SharedSizeGroup = "commands"
                });
            }

            int i = 0;

            foreach (var column in view.Columns)
            {
                var contentPresenter = new ContentPresenter();
                var cell             = rowViewModel.Cells[i];
                if (cell == null)
                {
                    cell = column.CreateFieldViewModelInternal(rowViewModel);
                    rowViewModel.Cells[i] = cell;
                }

                contentPresenter.Content = cell;
                Grid.SetColumn(contentPresenter, i);
                Children.Add(contentPresenter);
                i++;
            }

            if (view.CanReorder || view.CanRemove)
            {
                var commands = rowViewModel.Commands;
                if (commands == null)
                {
                    commands = rowViewModel.Commands = new GridRowCommandsViewModel(view, rowViewModel);
                }

                var contentPresenter = new ContentPresenter();
                contentPresenter.Content = commands;
                Grid.SetColumn(contentPresenter, i);
                Children.Add(contentPresenter);
            }
        }
コード例 #12
0
        private void RegenerateRowViewModels()
        {
            var rows    = Rows;
            var columns = Columns;

            if (rows != null && columns != null)
            {
                var rowViewModels = new ObservableCollection <GridRowViewModel>();

                foreach (ModelBase model in rows)
                {
                    var row = new GridRowViewModel(model, columns, ViewModels.ModelBindingMode.Committed);
                    rowViewModels.Add(row);
                }

                RowViewModels = rowViewModels;
            }
        }
コード例 #13
0
        public override void AddSelectedItem(GridRowViewModel selectedRow, RecordEntryViewModelBase recordForm, string subGridReference)
        {
            var gridField          = GetEntryViewModel(recordForm).GetEnumerableFieldViewModel(subGridReference);
            var targetPropertyname = GetTargetProperty(recordForm, subGridReference).Name;
            var newRecord          = recordForm.RecordService.NewRecord(GetEnumeratedType(recordForm, subGridReference).AssemblyQualifiedName);

            var selectedRowrecord = selectedRow.GetRecord() as ObjectRecord;

            if (selectedRowrecord != null)
            {
                var newRecordType = new RecordField();
                newRecordType.Key   = (string)selectedRowrecord.Instance.GetPropertyValue(nameof(IFieldMetadata.SchemaName));
                newRecordType.Value = (string)selectedRowrecord.Instance.GetPropertyValue(nameof(IFieldMetadata.DisplayName));
                newRecord.SetField(targetPropertyname, newRecordType, recordForm.RecordService);

                //if (gridField.GridRecords.Any(g => g.GetRecordFieldFieldViewModel(targetPropertyname).Value == newRecordType))
                //    return;
                InsertNewItem(recordForm, subGridReference, newRecord);
            }
        }
コード例 #14
0
 private void EditRow(GridRowViewModel row)
 {
     try
     {
         var viewModel = GetEditRowViewModel(row);
         if (viewModel == null)
         {
             throw new NotImplementedException("No Form For Type");
         }
         else
         {
             viewModel.IsReadOnly = IsReadOnly;
             RecordForm.LoadChildForm(viewModel);
         }
     }
     catch (Exception ex)
     {
         ApplicationController.UserMessage(string.Format("Error Adding Row: {0}", ex.DisplayString()));
     }
 }
コード例 #15
0
        internal void SetItemsSource(IEnumerable <T> items)
        {
            ItemsSource = items == null ? new SelectablePicklistOption[0] : items.Select(i => new SelectablePicklistOption(i, RefreshSelectedItemsIntoValue, Value != null && Value.Any(v => v == i))).ToArray();
            var optionsObject = new SelectablePicklistOptions()
            {
                Options = ItemsSource
            };
            var recordService = new ObjectRecordService(optionsObject, ApplicationController);
            Func <IEnumerable <IRecord> > getRecordsFunc = () => recordService.RetreiveAll(new QueryDefinition(typeof(SelectablePicklistOption).AssemblyQualifiedName));

            DynamicGridViewModel = new DynamicGridViewModel(ApplicationController)
            {
                ViewType       = ViewType.LookupView,
                FormController = new FormController(recordService, null, ApplicationController),
                RecordType     = typeof(SelectablePicklistOption).AssemblyQualifiedName,
                RecordService  = recordService,
                GetGridRecords = (b) => new GetGridRecordsResponse(getRecordsFunc()),
                IsReadOnly     = true
            };
            Action onClick = () =>
            {
                var selectedItem = DynamicGridViewModel.SelectedRow;
                if (selectedItem != null)
                {
                    var isSelectedField = selectedItem.GetBooleanFieldFieldViewModel(nameof(SelectablePicklistOption.Select));
                    isSelectedField.Value            = !isSelectedField.Value;
                    DynamicGridViewModel.SelectedRow = null;
                }
            };

            DynamicGridViewModel.OnClick = onClick;
            DoOnAsynchThread(() => {
                DynamicGridViewModel.GridRecords = GridRowViewModel.LoadRows(getRecordsFunc(), DynamicGridViewModel);
                OnPropertyChanged(nameof(DynamicGridViewModel));
                OnPropertyChanged(nameof(StringDisplay));
            });
        }
コード例 #16
0
 public virtual RecordEntryFormViewModel GetEditRowViewModel(string subGridName, RecordEntryViewModelBase parentForm, Action <IRecord> onSave, Action onCancel, GridRowViewModel gridRow)
 {
     return(null);
 }
コード例 #17
0
        private static void PopulateRowForMessage(GridRowViewModel newRow, string message)
        {
            foreach (var field in newRow.FieldViewModels)
            {
                if (field.ValueObject == null)
                {
                    if (field is LookupFieldViewModel)
                    {
                        var typeFieldViewModel = (LookupFieldViewModel)field;
                        if (field.FieldName == "Message")
                        {
                            typeFieldViewModel.Value = typeFieldViewModel.LookupService.ToLookup(typeFieldViewModel.ItemsSource.First(m => m.Name == message).Record);
                        }
                        else if (typeFieldViewModel.UsePicklist)
                        {
                            typeFieldViewModel.Value = typeFieldViewModel.LookupService.ToLookup(typeFieldViewModel.ItemsSource.First(p => p.Record != null).Record);
                        }
                        ;
                    }
                    if (field is PicklistFieldViewModel)
                    {
                        var typeFieldViewModel = (PicklistFieldViewModel)field;
                        typeFieldViewModel.Value = typeFieldViewModel.ItemsSource.First();
                    }
                    if (field is RecordTypeFieldViewModel)
                    {
                        var typeFieldViewModel = (RecordTypeFieldViewModel)field;
                        typeFieldViewModel.Value = typeFieldViewModel.ItemsSource.First();
                    }
                    if (field.FieldName == nameof(PluginTrigger.FilteringFields) && message == "Update")
                    {
                        var multiSelectField = newRow.GetFieldViewModel <RecordFieldMultiSelectFieldViewModel>(nameof(PluginTrigger.FilteringFields));
                        multiSelectField.MultiSelectsVisible = true;
                        multiSelectField.DynamicGridViewModel.GridRecords.ElementAt(1).GetBooleanFieldFieldViewModel(nameof(RecordFieldMultiSelectFieldViewModel.SelectablePicklistOption.Select)).Value = true;
                        multiSelectField.DynamicGridViewModel.GridRecords.ElementAt(2).GetBooleanFieldFieldViewModel(nameof(RecordFieldMultiSelectFieldViewModel.SelectablePicklistOption.Select)).Value = true;
                    }
                    if (field.FieldName == nameof(PluginTrigger.PreImageAllFields) && message == "Update")
                    {
                        newRow.GetFieldViewModel <BooleanFieldViewModel>(nameof(PluginTrigger.PreImageAllFields)).Value = false;
                    }
                    if (field.FieldName == nameof(PluginTrigger.PreImageFields) && message == "Update")
                    {
                        var multiSelectField = newRow.GetFieldViewModel <RecordFieldMultiSelectFieldViewModel>(nameof(PluginTrigger.PreImageFields));
                        multiSelectField.MultiSelectsVisible = true;
                        multiSelectField.DynamicGridViewModel.GridRecords.ElementAt(1).GetBooleanFieldFieldViewModel(nameof(RecordFieldMultiSelectFieldViewModel.SelectablePicklistOption.Select)).Value = true;
                        multiSelectField.DynamicGridViewModel.GridRecords.ElementAt(2).GetBooleanFieldFieldViewModel(nameof(RecordFieldMultiSelectFieldViewModel.SelectablePicklistOption.Select)).Value = true;
                    }
                }
            }
            newRow.GetPicklistFieldFieldViewModel(nameof(PluginTrigger.Mode)).ValueObject        = PluginTrigger.PluginMode.Asynchronous;
            newRow.GetPicklistFieldFieldViewModel(nameof(PluginTrigger.Stage)).ValueObject       = PluginTrigger.PluginStage.PostEvent;
            newRow.GetBooleanFieldFieldViewModel(nameof(PluginTrigger.PreImageAllFields)).Value  = true;
            newRow.GetLookupFieldFieldViewModel(nameof(PluginTrigger.SpecificUserContext)).Value = null;
            var filteringAttributesField = newRow.GetFieldViewModel <RecordFieldMultiSelectFieldViewModel>(nameof(PluginTrigger.FilteringFields));

            filteringAttributesField.MultiSelectsVisible = true;
            foreach (var field in filteringAttributesField.DynamicGridViewModel.GridRecords)
            {
                field.GetBooleanFieldFieldViewModel(nameof(RecordFieldMultiSelectFieldViewModel.SelectablePicklistOption.Select)).Value = false;
            }
        }
コード例 #18
0
        public override RecordEntryFormViewModel GetEditRowViewModel(string subGridName, RecordEntryViewModelBase parentForm, Action <IRecord> onSave,
                                                                     Action onCancel, GridRowViewModel gridRow)
        {
            var viewModel =
                new OpenSqlRecordViewModel(new FormController(parentForm.RecordService,
                                                              parentForm.FormService, parentForm.ApplicationController), onCancel);
            var lookup = gridRow.Record.ToLookup();
            var record = parentForm.RecordService.Get(lookup.RecordType, lookup.Id);

            viewModel.SetRecord(record);
            return(viewModel);
        }
コード例 #19
0
 public abstract void AddSelectedItem(GridRowViewModel gridRow, RecordEntryViewModelBase recordForm, string subGridReference);
コード例 #20
0
        public override RecordEntryFormViewModel GetEditRowViewModel(string subGridName, RecordEntryViewModelBase parentForm, Action <IRecord> onSave, Action onCancel, GridRowViewModel gridRow)
        {
            var record = gridRow.GetRecord();

            if (!(record is ObjectRecord))
            {
                throw new NotSupportedException(string.Format("Error Expected Object Of Type {0}", typeof(ObjectRecord).Name));
            }
            var newRecord = (ObjectRecord)record;
            //need to load the existing row to this
            //lets start a dialog to add it on complete
            var mapper        = new ClassSelfMapper();
            var newObject     = mapper.Map(newRecord.Instance);
            var recordService = new ObjectRecordService(newObject, ObjectRecordService.LookupService, ObjectRecordService.OptionSetLimitedValues, ObjectRecordService, subGridName, parentForm.ApplicationController);
            var viewModel     = new ObjectEntryViewModel(
                () => onSave(new ObjectRecord(newObject)),
                onCancel,
                newObject, new FormController(recordService, new ObjectFormService(newObject, recordService), parentForm.FormController.ApplicationController), parentForm, subGridName, parentForm.OnlyValidate);

            return(viewModel);
        }
コード例 #21
0
 private void RemoveRow(GridRowViewModel row)
 {
     DynamicGridViewModel.GridRecords.Remove(row);
 }