ソースを参照

Removing dumb usages of null lookup columns, Host.OtherColumns, Host.Columns, etc.

Kenric Nugteren 1 年間 前
コミット
11ea87a1b6

+ 7 - 31
inabox.wpf/DynamicGrid/DynamicColumnGrid.cs

@@ -17,7 +17,11 @@ namespace InABox.DynamicGrid
             ActionColumns.Add(new DynamicRowMovementColumn(DynamicRowMovement.Up, SwapRows));
             ActionColumns.Add(new DynamicRowMovementColumn(DynamicRowMovement.Down, SwapRows));
 
-            //MasterColumns.AddRange(LoadColumns());
+            var column = MasterColumns.FirstOrDefault(x => string.Equals(x.ColumnName, nameof(DynamicGridColumn.ColumnName)));
+            if(column is not null && column.Editor is ComboLookupEditor lookup)
+            {
+                lookup.OnAfterGenerateLookups += DoGenerateColumns;
+            }
         }
 
         protected override void DoReconfigure(DynamicGridOptions options)
@@ -43,12 +47,6 @@ namespace InABox.DynamicGrid
             return true;
         }
 
-
-        //public DynamicGridColumns DefineColumns()
-        //{
-        //	return LoadColumns();
-        //}
-
         protected override void DoValidate(DynamicGridColumn[] items, List<string> errors)
         {
             base.DoValidate(items, errors);
@@ -57,31 +55,9 @@ namespace InABox.DynamicGrid
                 errors.Add("[ColumnName] must not be blank!");
         }
 
-        protected override DynamicGridColumns LoadColumns()
+        protected override void CustomiseEditor(DynamicGridColumn[] items, DynamicGridColumn column, BaseEditor editor)
         {
-            var columns = new DynamicGridColumns
-            {
-                new()
-                {
-                    ColumnName = "ColumnName", /* Type = typeof(String), */ Width = 0, Editor = new ComboLookupEditor(typeof(ColumnNameGenerator))
-                },
-                new() { ColumnName = "Width", /* Type = typeof(int),  */ Width = 80 },
-                new() { ColumnName = "Caption", /* Type = typeof(String), */ Width = 0 },
-                new() { ColumnName = "Format", /* Type = typeof(String), */ Width = 60 },
-                new() { ColumnName = "Alignment", /* Type = typeof(String), */ Width = 100, Editor = new EnumLookupEditor(typeof(Alignment)) }
-            };
-            return columns;
-        }
-
-        public override void ConfigureColumns(DynamicGridColumns columns)
-        {
-            base.ConfigureColumns(columns);
-            var column = columns.FirstOrDefault(x => x.ColumnName.Equals("ColumnName"));
-            if (column != null)
-            {
-                var lookup = column.Editor as ComboLookupEditor;
-                lookup.OnAfterGenerateLookups += DoGenerateColumns;
-            }
+            base.CustomiseEditor(items, column, editor);
         }
 
         private IEnumerable<DynamicGridColumn> ProcessColumns()

+ 0 - 18
inabox.wpf/DynamicGrid/DynamicEditorGrid.xaml.cs

@@ -81,8 +81,6 @@ public partial class DynamicEditorGrid : UserControl, IDynamicEditorHost
     public event OnSelectPage? OnSelectPage;
     public event OnUnloadPage? OnUnloadPage;
 
-    public DynamicGridColumns Columns => _columns;
-
     private bool _readOnly;
     public bool ReadOnly
     {
@@ -181,22 +179,6 @@ public partial class DynamicEditorGrid : UserControl, IDynamicEditorHost
 
     #region Host Implementation
 
-    IEnumerable<DynamicGridColumn> IDynamicEditorHost.Columns => Columns;
-
-    public void LoadColumns(string column, Dictionary<string, string> columns)
-    {
-        columns.Clear();
-        var comps = column.Split('.').ToList();
-        comps.RemoveAt(comps.Count - 1);
-        var prefix = string.Format("{0}.", string.Join(".", comps));
-        var cols = Columns.Where(x => !x.ColumnName.Equals(column) && x.ColumnName.StartsWith(prefix));
-        foreach (var col in cols)
-        {
-            var subColumn = col.ColumnName[prefix.Length..];
-            columns[subColumn] = col.ColumnName;
-        }
-    }
-
     public void LoadLookups(ILookupEditorControl editor)
     {
         OnDefineLookups?.Invoke(editor);

+ 0 - 15
inabox.wpf/DynamicGrid/DynamicGrid.cs

@@ -162,11 +162,6 @@ public abstract class DynamicGrid<T> : DynamicGrid, IDynamicGridUIComponentParen
     public event EditorLoaded OnEditorLoaded;
 
     public event OnLoadEditorButtons<T> OnLoadEditorButtons;
-    
-    public virtual event OnCustomiseColumns? OnCustomiseColumns;
-
-    protected void DoCustomiseColumnsEvent(object sender, DynamicGridColumns columns) =>
-        OnCustomiseColumns?.Invoke(sender, columns);
 
     #endregion
 
@@ -936,11 +931,6 @@ public abstract class DynamicGrid<T> : DynamicGrid, IDynamicGridUIComponentParen
         return UIComponent.DesiredWidth();
     }
 
-    public virtual void ConfigureColumns(DynamicGridColumns columns)
-    {
-        DoCustomiseColumnsEvent(this,columns);
-    }
-
     /// <summary>
     /// Handle to configure column groups.
     /// </summary>
@@ -956,12 +946,8 @@ public abstract class DynamicGrid<T> : DynamicGrid, IDynamicGridUIComponentParen
     
     private void ReloadColumns()
     {
-        ConfigureColumns(MasterColumns /*, false */);
-
         VisibleColumns = LoadColumns();
 
-        ConfigureColumns(VisibleColumns /*, true */);
-
         ColumnGroupings.Clear();
         ConfigureColumnGroups();
 
@@ -1438,7 +1424,6 @@ public abstract class DynamicGrid<T> : DynamicGrid, IDynamicGridUIComponentParen
         {
             columns.Clear();
             columns.AddRange(MasterColumns);
-            ConfigureColumns(columns);
         };
 
         editor.OnDefineEditor = (o, c) =>

+ 7 - 8
inabox.wpf/DynamicGrid/DynamicGridColumn.cs

@@ -21,29 +21,28 @@ namespace InABox.DynamicGrid
         public DynamicGridColumn()
         {
             Editor = new NullEditor();
-            Lookups = new Dictionary<object, object>();
         }
 
-        [ComboLookupEditor(typeof(ColumnNameGenerator))]
+        [ComboLookupEditor(typeof(ColumnNameGenerator), Visible = Visible.Default)]
         [EditorSequence(1)]
         public string ColumnName { get; set; }
 
         [EditorSequence(2)]
+        [IntegerEditor(Visible = Visible.Default)]
         public int Width { get; set; }
 
         [EditorSequence(3)]
-        public string Format { get; set; }
+        [TextBoxEditor(Visible = Visible.Default)]
+        public string Caption { get; set; }
 
         [EditorSequence(4)]
-        public string Caption { get; set; }
+        [TextBoxEditor(Width = 60, Visible = Visible.Default)]
+        public string Format { get; set; }
 
-        [EnumLookupEditor(typeof(Alignment))]
+        [EnumLookupEditor(typeof(Alignment), Width = 100, Visible = Visible.Default)]
         [EditorSequence(5)]
         public Alignment Alignment { get; set; }
 
-        [NullEditor]
-        public Dictionary<object, object> Lookups { get; set; }
-
         public BaseEditor Editor { get; set; }
 
         public VerticalAlignment VerticalAlignment()

+ 2 - 1
inabox.wpf/DynamicGrid/DynamicGridUtils.cs

@@ -190,7 +190,8 @@ public static class DynamicGridUtils
                             x =>
                                 x.IsClass
                                 && !x.IsGenericType
-                                && x.HasInterface(typeof(IDynamicOneToManyGrid<,>)))
+                                && x.HasInterface(typeof(IDynamicOneToManyGrid<,>))
+                                && !x.HasInterface<ISpecificGrid>())
                         .ToArray();
 
                     var subtypes = _allo2mpages.Where(x => x.GetInterfaces().Any(

+ 13 - 34
inabox.wpf/DynamicGrid/Editors/CodePopupEditor/CodePopupEditorControl.cs

@@ -11,7 +11,7 @@ using InABox.Core;
 
 namespace InABox.DynamicGrid;
 
-public class CodePopupEditorControl : DynamicEditorControl<Guid, CodePopupEditor>, IPopupEditorControl
+public class CodePopupEditorControl : DynamicEditorControl<Guid, CodePopupEditor>
 {
     static CodePopupEditorControl()
     {
@@ -25,13 +25,6 @@ public class CodePopupEditorControl : DynamicEditorControl<Guid, CodePopupEditor
 
     private string origvalue = "";
 
-    public CodePopupEditorControl()
-    {
-        OtherColumns = new Dictionary<string, string>();
-    }
-
-    public Dictionary<string, string> OtherColumns { get; }
-
     public string CodeColumn { get; set; }
 
     protected override FrameworkElement CreateEditor()
@@ -182,9 +175,10 @@ public class CodePopupEditorControl : DynamicEditorControl<Guid, CodePopupEditor
         if (_type != null)
         {
             var columns = LookupFactory.DefineLookupColumns(Host.GetEditorType(), _type, ColumnName);
-            var cols = OtherColumns.Keys.Concat(columns.ColumnNames()).ToArray();
 
-            var list = new PopupList(_type, _value, cols, new Dictionary<string, string> { { CodeColumn, code } });
+            var list = new PopupList(_type, _value,
+                columns.ColumnNames().Concat(CoreUtils.One(CodeColumn)).ToArray(),
+                new Dictionary<string, string> { { CodeColumn, code } });
 
             list.OnDefineFilter += t => LookupFactory.DefineLookupFilter(Host.GetEditorType(), t, ColumnName, Host.GetItems());
 
@@ -211,8 +205,8 @@ public class CodePopupEditorControl : DynamicEditorControl<Guid, CodePopupEditor
 
                 _value = list.ID;
 
-                foreach (var key in OtherColumns.Keys)
-                    OtherValues[OtherColumns[key]] = list.OtherValues[key];
+                foreach (var col in columns)
+                    OtherValues[col.Property] = list.OtherValues[col.Property];
                 CheckChanged();
 
                 Editor.Text = string.Format("{0}", list.OtherValues[CodeColumn]);
@@ -229,18 +223,6 @@ public class CodePopupEditorControl : DynamicEditorControl<Guid, CodePopupEditor
         return result;
     }
 
-    //private void Clear_Click(object sender, RoutedEventArgs e)
-    //{
-    //    if (_type != null)
-    //    {
-    //        _value = Guid.Empty;
-    //        foreach (var otherfield in OtherColumns.Keys)
-    //            OtherValues[OtherColumns[otherfield]] = null;
-    //        CheckChanged();
-    //        Editor.Text = "";
-    //    }
-    //}
-
     public override int DesiredHeight()
     {
         return 25;
@@ -279,8 +261,7 @@ public class CodePopupEditorControl : DynamicEditorControl<Guid, CodePopupEditor
     {
         var client = ClientFactory.CreateClient(_type);
         var columns = LookupFactory.DefineLookupColumns(Host.GetEditorType(), _type, ColumnName);
-        foreach (var key in OtherColumns)
-            columns.Add(key.Key);
+
         var sort = LookupFactory.DefineSort(_type);
         var filter = Filter.Create(_type, column).IsEqualTo(value);
 
@@ -293,14 +274,15 @@ public class CodePopupEditorControl : DynamicEditorControl<Guid, CodePopupEditor
         row ??= lookup.NewRow(true);
 
         code = row[CodeColumn]?.ToString();
-        id = (Guid)row["ID"];
+        id = row.Get<Guid>("ID");
         
         foreach (var col in displaycols.Where(x => !x.Equals("ID") && !x.Equals(CodeColumn)))
             display[col] = row[col];
-        
-        foreach (var key in OtherColumns.Keys)
-            if (lookup.Columns.Any(x => x.ColumnName.Equals(key)))
-                OtherValues[OtherColumns[key]] = row[key];
+
+        foreach(var col in columns)
+        {
+            OtherValues[col.Property] = row[col.Property];
+        }
         
         _value = id;
         Editor.Text = code;
@@ -321,9 +303,6 @@ public class CodePopupEditorControl : DynamicEditorControl<Guid, CodePopupEditor
     {
         _type = EditorDefinition.Type;
 
-        Host.LoadColumns(ColumnName, OtherColumns);
-        Host.LoadColumns(ColumnName, EditorDefinition.OtherColumns);
-
         CodeColumn = !string.IsNullOrEmpty(EditorDefinition.CodeColumn) ? EditorDefinition.CodeColumn : GetCodeColumn(_type);
     }
 

+ 0 - 6
inabox.wpf/DynamicGrid/Editors/CurrencyEditor/CurrencyEditorControl.cs

@@ -38,12 +38,6 @@ namespace InABox.DynamicGrid
             foreach(var button in buttons)
             {
                 button.SetValue(DockPanel.DockProperty, Dock.Right);
-                button.Click += (o, e) =>
-                {
-                    var b = (Button)o;
-                    var eb = b.Tag as EditorButton;
-                    eb.Click(this);
-                };
                 DockPanel.Children.Add(button);
             }
 

+ 3 - 12
inabox.wpf/DynamicGrid/Editors/DocumentEditor/DocumentEditorControl.cs

@@ -6,6 +6,7 @@ using System.Windows;
 using System.Windows.Controls;
 using System.Windows.Media;
 using InABox.Core;
+using InABox.Wpf;
 using InABox.WPF;
 using Microsoft.Win32;
 
@@ -33,21 +34,12 @@ namespace InABox.DynamicGrid
 
         private TextBox Editor;
 
-        public DocumentEditorControl()
-        {
-            OtherColumns = new Dictionary<string, string>();
-        }
-
-        public Dictionary<string, string> OtherColumns { get; }
-
         public string Filter { get; set; }
 
         public override void Configure()
         {
             if (EditorDefinition is not BaseDocumentEditor editor) return;
 
-            Host.LoadColumns(ColumnName, OtherColumns);
-
             Filter = editor.FileMask;
         }
 
@@ -154,8 +146,7 @@ namespace InABox.DynamicGrid
                 }
 
                 Editor.Text = _document.FileName;
-                if (OtherColumns.ContainsKey("FileName"))
-                    OtherValues[OtherColumns["FileName"]] = _document.FileName;
+                OtherValues[nameof(Document.FileName)] = _document.FileName;
                 CheckChanged();
             }
         }
@@ -164,7 +155,7 @@ namespace InABox.DynamicGrid
         {
             if (_document.ID == Guid.Empty)
             {
-                MessageBox.Show("Please select a document first!");
+                MessageWindow.ShowMessage("Please select a document first!", "No document selected");
                 return;
             }
 

+ 10 - 1
inabox.wpf/DynamicGrid/Editors/DynamicEditorControl.cs

@@ -54,10 +54,19 @@ namespace InABox.DynamicGrid
                 try
                 {
                     var values = new Dictionary<string, object?>();
+
                     var sColumn = string.IsNullOrEmpty(ColumnName) ? "" : ColumnName;
+
+                    var dotIdx = sColumn.LastIndexOf('.');
+                    var prefix = "";
+                    if (dotIdx != -1)
+                    {
+                        prefix = sColumn[..dotIdx];
+                    }
+
                     values[sColumn] = RetrieveValue();
                     foreach (var key in OtherValues.Keys)
-                        values[key] = OtherValues[key];
+                        values[$"{prefix}.{key}"] = OtherValues[key];
                     OnEditorValueChanged?.Invoke(this, values);
                 }
                 finally

+ 5 - 8
inabox.wpf/DynamicGrid/Editors/ILookupEditorControl.cs

@@ -1,14 +1,11 @@
 using System.Collections.Generic;
 using InABox.Core;
 
-namespace InABox.DynamicGrid
-{
-    public interface ILookupEditorControl : IDynamicEditorControl
-    {
-        ILookupEditor LookupEditorDefinition { get; }
+namespace InABox.DynamicGrid;
 
-        Dictionary<string, string> OtherColumns { get; }
+public interface ILookupEditorControl : IDynamicEditorControl
+{
+    ILookupEditor LookupEditorDefinition { get; }
 
-        void LoadLookups(CoreTable values);
-    }
+    void LoadLookups(CoreTable values);
 }

+ 0 - 10
inabox.wpf/DynamicGrid/Editors/IPopupEditorControl.cs

@@ -1,10 +0,0 @@
-using System;
-using System.Collections.Generic;
-
-namespace InABox.DynamicGrid
-{
-    public interface IPopupEditorControl : IDynamicEditorControl<Guid>
-    {
-        Dictionary<string, string> OtherColumns { get; }
-    }
-}

+ 8 - 16
inabox.wpf/DynamicGrid/Editors/LookupEditor/LookupEditorControl.cs

@@ -27,16 +27,16 @@ namespace InABox.DynamicGrid
 
         public LookupEditorControl()
         {
-            OtherColumns = new Dictionary<string, string>();
+            OtherColumns = new HashSet<string>();
             Lookups = new Dictionary<object, string>();
             Width = int.MaxValue;
         }
 
         public int Width { get; set; }
 
-        public Dictionary<object, string> Lookups { get; set; }
+        private Dictionary<object, string> Lookups { get; set; }
 
-        public Dictionary<string, string> OtherColumns { get; }
+        private HashSet<string> OtherColumns { get; }
 
         public override void Configure()
         {
@@ -46,13 +46,6 @@ namespace InABox.DynamicGrid
             if (EditorDefinition.LookupWidth != int.MaxValue)
                 Width = EditorDefinition.LookupWidth;
 
-            Host.LoadColumns(ColumnName, OtherColumns);
-
-            if (EditorDefinition is DataLookupEditor dataLookup)
-            {
-                Host.LoadColumns(ColumnName, dataLookup.OtherColumns);
-            }
-
             Editor.HorizontalAlignment = Width.Equals(int.MaxValue) ? HorizontalAlignment.Stretch : HorizontalAlignment.Left;
             if (!Width.Equals(int.MaxValue))
                 Editor.Width = Width;
@@ -69,8 +62,7 @@ namespace InABox.DynamicGrid
 
             foreach (var col in values.Columns)
                 if (!string.Equals(col.ColumnName, keycol) && !string.Equals(col.ColumnName, "Display"))
-                    if (!OtherColumns.ContainsKey(col.ColumnName))
-                        OtherColumns[col.ColumnName] = string.IsNullOrWhiteSpace(prefix) ? col.ColumnName : string.Join(".", prefix, col.ColumnName);
+                    OtherColumns.Add(col.ColumnName);
 
 
             var value = RetrieveValue();
@@ -168,12 +160,12 @@ namespace InABox.DynamicGrid
             if (LookupTable != null)
             {
                 var keycol = ColumnName.Split('.').Last();
+                var value = RetrieveValue();
 
-                var row = LookupTable.Rows.FirstOrDefault(r => object.Equals(r[keycol], RetrieveValue()));
-                foreach (var field in LookupTable.Columns.Where(x => OtherColumns.ContainsKey(x.ColumnName)))
+                var row = LookupTable.Rows.FirstOrDefault(r => Equals(r[keycol], value));
+                foreach (var field in LookupTable.Columns.Where(x => OtherColumns.Contains(x.ColumnName)))
                 {
-                    var othervalue = row?[field.ColumnName];
-                    OtherValues[OtherColumns[field.ColumnName]] = othervalue;
+                    OtherValues[field.ColumnName] = row?[field.ColumnName];
                 }
             }
 

+ 1 - 4
inabox.wpf/DynamicGrid/Editors/MultiLookupEditor/MultiLookupEditorControl.cs

@@ -25,16 +25,13 @@ namespace InABox.DynamicGrid
 
         public MultiLookupEditorControl()
         {
-            OtherColumns = new Dictionary<string, string>();
             Lookups = new Dictionary<object, string>();
             Width = int.MaxValue;
         }
 
         public int Width { get; set; }
 
-        public Dictionary<object, string> Lookups { get; set; }
-
-        public Dictionary<string, string> OtherColumns { get; }
+        private Dictionary<object, string> Lookups { get; set; }
 
         private List<Tuple<object?, string>> Items;
 

+ 14 - 25
inabox.wpf/DynamicGrid/Editors/PopupEditor/PopupEditorControl.cs

@@ -10,7 +10,7 @@ using InABox.Core;
 
 namespace InABox.DynamicGrid;
 
-public class PopupEditorControl : DynamicEditorControl<Guid, PopupEditor>, IPopupEditorControl
+public class PopupEditorControl : DynamicEditorControl<Guid, PopupEditor>
 {
     
     static PopupEditorControl()
@@ -24,21 +24,11 @@ public class PopupEditorControl : DynamicEditorControl<Guid, PopupEditor>, IPopu
     private TextBox Editor;
     //public event DefineFilter OnDefineFilter;
 
-    public PopupEditorControl()
-    {
-        OtherColumns = new Dictionary<string, string>();
-    }
-
-    public Dictionary<string, string> OtherColumns { get; }
-
     public event OnDefineLookupFilter? OnDefineFilter;
 
     public override void Configure()
     {
         _type = EditorDefinition.Type;
-
-        Host.LoadColumns(ColumnName, OtherColumns);
-        Host.LoadColumns(ColumnName, EditorDefinition.OtherColumns);
     }
 
     protected override FrameworkElement CreateEditor()
@@ -98,7 +88,8 @@ public class PopupEditorControl : DynamicEditorControl<Guid, PopupEditor>, IPopu
     {
         if (_type != null)
         {
-            var list = new PopupList(_type, _value, OtherColumns.Keys.ToArray());
+            var columns = LookupFactory.DefineLookupColumns(Host.GetEditorType(), _type, ColumnName);
+            var list = new PopupList(_type, _value, columns.ColumnNames().ToArray());
 
             list.OnDefineFilter += t => { return LookupFactory.DefineLookupFilter(Host.GetEditorType(), t, ColumnName, Host.GetItems()); };
 
@@ -106,21 +97,16 @@ public class PopupEditorControl : DynamicEditorControl<Guid, PopupEditor>, IPopu
             {
                 _value = list.ID;
 
-                //Dictionary<String, String> fieldmap = new Dictionary<String, String>();
-                foreach (var key in OtherColumns.Keys)
-                    //String[] comps = othercolumn.Split(new String[] { "->" }, StringSplitOptions.None);
-                    //String field = comps.Last();
-                    //fieldmap[comps.First()] = field;
-                    OtherValues[OtherColumns[key]] = list.OtherValues[key];
-                //fieldmap[OtherColumns[key]] = list.OtherValues[othercolumn]
+                foreach (var col in columns)
+                    OtherValues[col.Property] = list.OtherValues[col.Property];
                 CheckChanged();
 
                 var display = new List<string?>();
                 //var columns = Entity.DefaultLookupColumns(_type) as IColumns;
-                var columns = LookupFactory.DefineLookupColumns(Host.GetEditorType(), _type, ColumnName);
-                foreach (var column in columns.ColumnNames())
-                    if (list.OtherValues.ContainsKey(column))
-                        display.Add(list.OtherValues[column]?.ToString());
+                foreach (var col in columns)
+                    if (list.OtherValues.ContainsKey(col.Property))
+                        display.Add(list.OtherValues[col.Property]?.ToString());
+
                 Editor.Text = string.Join(" / ", display.Where(x => x != null && !string.IsNullOrWhiteSpace(x.ToString())));
             }
         }
@@ -131,8 +117,11 @@ public class PopupEditorControl : DynamicEditorControl<Guid, PopupEditor>, IPopu
         if (_type != null)
         {
             _value = Guid.Empty;
-            foreach (var otherfield in OtherColumns.Keys)
-                OtherValues[OtherColumns[otherfield]] = null;
+
+            var columns = LookupFactory.DefineLookupColumns(Host.GetEditorType(), _type, ColumnName);
+            foreach (var col in columns)
+                OtherValues[col.Property] = null;
+
             CheckChanged();
             Editor.Text = "";
         }

+ 0 - 37
inabox.wpf/DynamicGrid/IDynamicEditorHost.cs

@@ -8,30 +8,6 @@ namespace InABox.DynamicGrid;
 
 public interface IDynamicEditorHost
 {
-    /// <summary>
-    /// A list of columns which are defined for this editor; from this are loaded the additional columns for lookups. A useful default is just
-    /// to call <see cref="DynamicGridColumns.ExtractColumns(Type)"/>, if a singular type for the editor is well-defined.
-    /// </summary>
-    /// <remarks>
-    /// I'm still not sure whether this one is actually a good idea, but it seems to be how the editors have functioned for a while. My reasoning is that
-    /// if the lookup defines a column to be loaded, but it doesn't get loaded because it is not in this list, then we would have broken functionality.
-    /// </remarks>
-    IEnumerable<DynamicGridColumn> Columns { get; }
-
-    /// <summary>
-    /// Loads into <paramref name="columns"/> all columns that start with the same prefix as <paramref name="column"/>; e.g, when taking a
-    /// lookup defined for column EntityLink.ID, <paramref name="columns"/> will contain all EntityLink.* except EntityLink.ID.
-    /// 
-    /// This essentially gives us the other columns we need to load from the database for lookups.
-    /// See <see cref="DefaultDynamicEditorHost{T}.LoadColumns(string, Dictionary{string, string})"/> for the canonical implementation.
-    /// </summary>
-    /// <remarks>
-    /// This is dumb; we don't want it, because the presence of <see cref="Columns"/> kinda makes it redundant.
-    /// </remarks>
-    /// <param name="column">The column to use the prefix of.</param>
-    /// <param name="columns">The dictionary into which the columns will be loaded, in the form "FieldName": "EntityLink.FieldName"</param>
-    void LoadColumns(string column, Dictionary<string, string> columns);
-
     /// <summary>
     /// Trigger the loading of the lookup values; the canonical implementation calls <see cref="ILookupEditor.Values(string, object[]?)"/>,
     /// and calls (either sync/async) <see cref="ILookupEditorControl.LoadLookups(CoreTable)"/> when the values are loaded.
@@ -107,25 +83,12 @@ public class DefaultDynamicEditorHost<T> : IDynamicEditorHost
 {
     public virtual T[]? Items { get; set; }
 
-    public IEnumerable<DynamicGridColumn> Columns => new DynamicGridColumns().ExtractColumns(typeof(T));
-
     public BaseEditor? GetEditor(DynamicGridColumn column) => column.Editor.CloneEditor();
 
     public BaseObject[] GetItems() => Items ?? Array.Empty<BaseObject>();
 
     public Type GetEditorType() => typeof(T);
 
-    public void LoadColumns(string column, Dictionary<string, string> columns)
-    {
-        columns.Clear();
-        var comps = column.Split('.').ToList();
-        comps.RemoveAt(comps.Count - 1);
-        var prefix = string.Format("{0}.", string.Join(".", comps));
-        var cols = Columns.Where(x => !x.ColumnName.Equals(column) && x.ColumnName.StartsWith(prefix));
-        foreach (var col in cols)
-            columns[col.ColumnName.Replace(prefix, "")] = col.ColumnName;
-    }
-
     public void LoadLookups(ILookupEditorControl sender)
     {
         var editor = sender.EditorDefinition as ILookupEditor;

+ 0 - 4
inabox.wpf/DynamicGrid/IDynamicGrid.cs

@@ -80,8 +80,6 @@ public interface IDynamicGrid
     event OnDefineFilter OnDefineFilter;
 
     event OnPrintData OnPrintData;
-    
-    event OnCustomiseColumns OnCustomiseColumns;
 
     event BeforeRefreshEventHandler BeforeRefresh;
     
@@ -92,8 +90,6 @@ public interface IDynamicGrid
 
     int DesiredWidth();
 
-    void ConfigureColumns(DynamicGridColumns columns /*, bool dolookups */);
-
     void AddHiddenColumn(string column);
 
     void UpdateRow<TType>(CoreRow row, string column, TType value, bool refresh = true);