Browse Source

"Fixed" enum columns in DYnamicGrid. Made OneTOManyGrid BeforeSave a virtual, so that you can do validation in it.

Kenric Nugteren 1 year ago
parent
commit
fa52b9609e
2 changed files with 22 additions and 23 deletions
  1. 21 22
      inabox.wpf/DynamicGrid/DynamicGrid.cs
  2. 1 1
      inabox.wpf/DynamicGrid/DynamicOneToManyGrid.cs

+ 21 - 22
inabox.wpf/DynamicGrid/DynamicGrid.cs

@@ -2015,31 +2015,30 @@ namespace InABox.DynamicGrid
                     else if (prop.Editor is ILookupEditor lookupEditor)
                     {
                         var lookupcol = new GridComboBoxColumn();
-                        
-                        //var lookups = editor.Values(column.ColumnName).ToDictionary(column.ColumnName, "Display");
-                        //lookupcol.SelectedValuePath = "Key";
-                        //lookupcol.DisplayMemberPath = "Value";
-                        //lookupcol.ItemsSource = lookups;
-
-                        var table = lookupEditor.Values(column.ColumnName).ToDataTable();
-                        //var row = table.NewRow();
-                        //row["Display"] = "";
-                        //table.Rows.InsertAt(row, 0);
-                        
-                        var data = lookupEditor.Values(column.ColumnName);
 
-                        var items = new List<Tuple<object?, string>>();
-                        if (!lookupEditor.IsEnumEditor())
+                        if (lookupEditor.IsEnumEditor())
+                        {
+                            // For some reason this code works for enums, and the other code works for other things but not enums.
+                            // So we are doing this.
+                            var lookups = lookupEditor.Values(column.ColumnName).ToDataTable();
+                            lookupcol.SelectedValuePath = lookups.Columns[0].ColumnName;
+                            lookupcol.DisplayMemberPath = "Display";
+                            lookupcol.ItemsSource = lookups.DefaultView;
+                        }
+                        else
                         {
+                            var data = lookupEditor.Values(column.ColumnName);
+
+                            var items = new List<Tuple<object?, string>>();
                             items.Add(new(null, ""));
+                            foreach (var row in data.Rows)
+                                items.Add(new(row[data.Columns[0].ColumnName], (row["Display"] ?? "").ToString() ?? ""));
+
+                            lookupcol.SelectedValuePath = "Item1";
+                            lookupcol.DisplayMemberPath = "Item2";
+                            lookupcol.ItemsSource = items;
+                            lookupcol.UpdateTrigger = UpdateSourceTrigger.PropertyChanged;
                         }
-                        foreach(var row in data.Rows)
-                            items.Add(new(row[data.Columns[0].ColumnName], (row["Display"] ?? "").ToString() ?? ""));
-                        
-                        lookupcol.SelectedValuePath = "Item1";
-                        lookupcol.DisplayMemberPath = "Item2";
-                        lookupcol.ItemsSource = items;
-                        lookupcol.UpdateTrigger = UpdateSourceTrigger.PropertyChanged;
 
                         newcol = lookupcol;
                     }
@@ -2946,7 +2945,7 @@ namespace InABox.DynamicGrid
             return changes;
         }
 
-        protected virtual void OnAfterEditorValueChanged(DynamicEditorGrid grid, T[] items, String columnnname, Dictionary<String, object?> changes)
+        protected virtual void OnAfterEditorValueChanged(DynamicEditorGrid grid, T[] items, String columnname, Dictionary<String, object?> changes)
         {
         }
         

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

@@ -145,7 +145,7 @@ namespace InABox.DynamicGrid
             Ready = true;
         }
 
-        public void BeforeSave(object item)
+        public virtual void BeforeSave(object item)
         {
             // Don't need to do anything here
         }