浏览代码

Improved default columns generation for DynamicGridColumns

Kenric Nugteren 4 月之前
父节点
当前提交
2ec471a518
共有 2 个文件被更改,包括 31 次插入4 次删除
  1. 7 1
      InABox.Core/DatabaseSchema/IProperty.cs
  2. 24 3
      inabox.wpf/DynamicGrid/Grids/DynamicGrid.cs

+ 7 - 1
InABox.Core/DatabaseSchema/IProperty.cs

@@ -1,4 +1,5 @@
-using System;
+using InABox.Clients;
+using System;
 using System.Linq.Expressions;
 using System.Runtime.CompilerServices;
 
@@ -158,5 +159,10 @@ namespace InABox.Core
                 return false;
             return true;
         }
+
+        public static bool IsForeignKey(this IProperty property)
+        {
+            return property.Parent != null && property.Parent.IsEntityLink && property.Name.EndsWith(".ID");
+        }
     }
 }

+ 24 - 3
inabox.wpf/DynamicGrid/Grids/DynamicGrid.cs

@@ -244,9 +244,30 @@ public abstract class DynamicGrid<T> : BaseDynamicGrid, IDynamicGridUIComponentP
 
     public override DynamicGridColumns GenerateColumns()
     {
-        var cols = IsDirectEditMode()
-            ? new Columns<T>(ColumnTypeFlags.IncludeVisible | ColumnTypeFlags.IncludeForeignKeys)
-            : new Columns<T>(ColumnTypeFlags.IncludeVisible | ColumnTypeFlags.IncludeLinked);
+        var defaultCols = DefaultColumns.GetDefaultColumns(typeof(T)).Select(x => x.Property).ToArray();
+
+        Columns<T> cols;
+        if(defaultCols.Length == 0)
+        {
+            cols = IsDirectEditMode()
+                ? new Columns<T>(ColumnTypeFlags.IncludeVisible | ColumnTypeFlags.IncludeForeignKeys)
+                : new Columns<T>(ColumnTypeFlags.IncludeVisible | ColumnTypeFlags.IncludeLinked);
+        }
+        else
+        {
+            IEnumerable<IProperty> propList;
+            if (IsDirectEditMode())
+            {
+                propList = defaultCols
+                    .Where(x => x.Parent is null || !x.HasParentEntityLink() || (x.IsForeignKey() && !x.Parent.HasParentEntityLink()));
+            }
+            else
+            {
+                // Ignore foreign keys.
+                propList = defaultCols.Where(x => !x.IsForeignKey());
+            }
+            cols = Columns.None<T>().AddRange(propList.Select(x => new Column<T>(x)));
+        }
         
         var columns = ExtractColumns(cols);
         OnGenerateColumns?.Invoke(this, new GenerateColumnsEventArgs(columns));