浏览代码

Fixed some really dumb code in CodePopupEditor to go through DatabaseSchema like all good things should.
Fixed some really dumb code to not wholesale replace property prefixes when they're not actually prefixes.

Kenric Nugteren 1 年之前
父节点
当前提交
2f6e034799

+ 4 - 1
inabox.wpf/DynamicGrid/DynamicEditorGrid.xaml.cs

@@ -174,7 +174,10 @@ namespace InABox.DynamicGrid
             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;
+            {
+                var subColumn = col.ColumnName[prefix.Length..];
+                columns[subColumn] = col.ColumnName;
+            }
         }
 
         public IFilter? DefineFilter(Type type) => OnDefineFilter?.Invoke(type);

+ 6 - 14
inabox.wpf/DynamicGrid/Editors/CodePopupEditor/CodePopupEditorControl.cs

@@ -301,20 +301,12 @@ namespace InABox.DynamicGrid
                 LookupFactory.FormatLookup(_type, display, new[] { CodeColumn });
         }
 
-        private string GetCodeColumn()
+        private string GetCodeColumn(Type type)
         {
-            var comps = ColumnName.Split('.').ToList();
-            comps.RemoveAt(comps.Count - 1);
-            var prefix = string.Format("{0}.", string.Join(".", comps));
-            var cols = Host.Columns.Where(x => !x.ColumnName.Equals(ColumnName) && x.ColumnName.StartsWith(prefix));
-            foreach (var col in cols)
-            {
-                var editor = Host.GetEditor(col);
-                if (editor is CodeEditor || editor is UniqueCodeEditor)
-                    return col.ColumnName.Split('.').Last();
-            }
-
-            return "";
+            var prop = DatabaseSchema.Properties(type)
+                .Where(x => x.Editor is BaseCodeEditor && !x.HasParentEntityLink())
+                .FirstOrDefault() ?? throw new Exception($"No code property for {type.EntityName()}");
+            return prop.Name;
         }
 
         public override void Configure()
@@ -329,7 +321,7 @@ namespace InABox.DynamicGrid
             Host.LoadColumns(ColumnName, OtherColumns);
             Host.LoadColumns(ColumnName, codePopupEditor.OtherColumns);
 
-            CodeColumn = !string.IsNullOrEmpty(codePopupEditor.CodeColumn) ? codePopupEditor.CodeColumn : GetCodeColumn();
+            CodeColumn = !string.IsNullOrEmpty(codePopupEditor.CodeColumn) ? codePopupEditor.CodeColumn : GetCodeColumn(_type);
         }
 
         public override void SetFocus()