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; } }); }
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); } }
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()); }
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; } } }
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; } }); }
public void OnEdit(GridRowViewModel gridRow) { var dialog = CreateEditDialog(gridRow.GetRecord().Id); dialog.OverideCompletionScreenMethod = ClearChildFormAndRefresh; dialog.OnCancel = ClearChildForm; ListViewModel.LoadChildForm(dialog); }
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; }
private void UnbindRow(GridRowViewModel row) { foreach (var column in Columns) { if (column.HasSummarizeFunction) { row.RemovePropertyChangedHandler(column.SourceProperty, OnSummaryPropertyChanged); } } }
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); }
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); }
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); } }
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; } }
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); } }
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())); } }
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)); }); }
public virtual RecordEntryFormViewModel GetEditRowViewModel(string subGridName, RecordEntryViewModelBase parentForm, Action <IRecord> onSave, Action onCancel, GridRowViewModel gridRow) { return(null); }
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; } }
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); }
public abstract void AddSelectedItem(GridRowViewModel gridRow, RecordEntryViewModelBase recordForm, string subGridReference);
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); }
private void RemoveRow(GridRowViewModel row) { DynamicGridViewModel.GridRecords.Remove(row); }