Ver Fonte

Added ability to customise grid on PopupList

Kenric Nugteren há 1 ano atrás
pai
commit
bc72dfb6be

+ 19 - 0
InABox.Core/Filter.cs

@@ -1880,6 +1880,25 @@ namespace InABox.Core
         }
     }
 
+    public static class FilterExtensions
+    {
+        public static Filter<T>? Combine<T>(this Filter<T>? filter1, Filter<T>? filter2)
+        {
+            if(filter1 is null)
+            {
+                return filter2;
+            }
+            else if(filter2 is null)
+            {
+                return filter1;
+            }
+            else
+            {
+                return filter1.And(filter2);
+            }
+        }
+    }
+
     public class FilterJsonConverter : JsonConverter
     {
         public override void WriteJson(JsonWriter writer, object? value, JsonSerializer serializer)

+ 1 - 1
inabox.wpf/DynamicGrid/BaseDynamicGrid.cs

@@ -77,7 +77,7 @@ namespace InABox.DynamicGrid
 
         public OnGetDynamicGridRowStyle? OnGetRowStyle { get; set; }
         
-        public ValidateEvent? OnValidate;
+        public ValidateEvent? OnValidate { get; set; }
         
         protected DynamicGridRowStyleSelector<T> RowStyleSelector;
 

+ 4 - 2
inabox.wpf/DynamicGrid/DynamicEditorForm/EmbeddedDynamicEditorForm.xaml.cs

@@ -1,4 +1,5 @@
 using InABox.Core;
+using InABox.Wpf;
 using System;
 using System.Collections.Generic;
 using System.ComponentModel;
@@ -312,9 +313,10 @@ namespace InABox.DynamicGrid
 
             if (errors != null && errors.Any())
             {
-                MessageBox.Show(
+                MessageWindow.ShowMessage(
                     string.Format("The following errors have been found with your data!\nPlease correct them and try again.\n\n- {0}",
-                        string.Join("\n- ", errors)), "Validation Error");
+                        string.Join("\n- ", errors)),
+                    "Validation Error");
                 return;
             }
             OnOK?.Invoke();

+ 5 - 1
inabox.wpf/DynamicGrid/Editors/LookupEditor/LookupEditorControl.cs

@@ -21,6 +21,8 @@ namespace InABox.DynamicGrid
 
         private CoreTable LookupTable;
 
+        private bool _loading = false;
+
         public ILookupEditor LookupEditorDefinition => EditorDefinition;
 
         public LookupEditorControl()
@@ -61,6 +63,7 @@ namespace InABox.DynamicGrid
 
         public void LoadLookups(CoreTable values)
         {
+            _loading = true;
             var keycol = ColumnName.Split('.').Last();
             var prefix = string.Join(".", ColumnName.Split('.').Reverse().Skip(1).Reverse());
 
@@ -105,6 +108,7 @@ namespace InABox.DynamicGrid
             //    Editor.SelectedIndex = Lookups.Keys.ToList().IndexOf(value);
 
             Editor.IsEnabled = EditorDefinition.Editable.IsEditable();
+            _loading = false;
         }
 
 
@@ -158,7 +162,7 @@ namespace InABox.DynamicGrid
 
         private void Combobox_SelectionChanged(object sender, SelectionChangedEventArgs e)
         {
-            if (!Editor.IsEnabled)
+            if (!Editor.IsEnabled || _loading)
                 return;
 
             if (LookupTable != null)

+ 8 - 3
inabox.wpf/DynamicGrid/Editors/PopupEditor/PopupList.xaml.cs

@@ -17,8 +17,9 @@ namespace InABox.DynamicGrid
         private readonly string[] _othercolumns = Array.Empty<string>();
 
         private readonly Type _type;
+        private readonly Type? _gridType;
 
-        public PopupList(Type type, Guid id, string[] OtherColumns, Dictionary<string, string>? Filters = null)
+        public PopupList(Type type, Guid id, string[] OtherColumns, Dictionary<string, string>? Filters = null, Type? gridType = null)
         {
             InitializeComponent();
 
@@ -27,6 +28,7 @@ namespace InABox.DynamicGrid
             _filters = Filters;
             _othercolumns = OtherColumns;
             _type = type;
+            _gridType = gridType;
 
             ID = id;
 
@@ -54,7 +56,7 @@ namespace InABox.DynamicGrid
         private void PopupList_SourceInitialized(object? sender, EventArgs e)
         {
             //_grid = DynamicGridUtils.CreateDynamicGrid(typeof(DynamicDataGrid<>), _type);
-            _grid = (Activator.CreateInstance(typeof(DynamicDataGrid<>).MakeGenericType(_type)) as IDynamicGrid)!;
+            _grid = (Activator.CreateInstance(_gridType ?? typeof(DynamicDataGrid<>).MakeGenericType(_type)) as IDynamicGrid)!;
             _grid.Margin = new Thickness(5, 5, 5, 0);
             ((DependencyObject)_grid).SetValue(Grid.ColumnProperty, 0);
             ((DependencyObject)_grid).SetValue(Grid.ColumnSpanProperty, 3);
@@ -78,7 +80,10 @@ namespace InABox.DynamicGrid
                 ).EndUpdate();
             });
 
-            CoreUtils.SetPropertyValue(_grid, "ColumnsTag", "Popup");
+            if(_grid is IDynamicDataGrid dataGrid)
+            {
+                dataGrid.ColumnsTag ??= "Popup";
+            }
 
             _grid.OnDefineFilter += t => OnDefineFilter?.Invoke(t);