Jelajahi Sumber

Changed HiddenColumns to be a list of strings

Kenric Nugteren 1 tahun lalu
induk
melakukan
72e3f29007

+ 10 - 0
InABox.Core/Column.cs

@@ -273,6 +273,16 @@ namespace InABox.Core
             return this;
             return this;
         }
         }
 
 
+        public Columns<T> AddSubColumns<TSub>(Expression<Func<T, TSub>> super, Columns<TSub> sub)
+        {
+            var prefix = CoreUtils.GetFullPropertyName(super, ".") + ".";
+            foreach(var column in sub.ColumnNames())
+            {
+                columns.Add(new Column<T>(prefix + column));
+            }
+            return this;
+        }
+
         public IColumns Add<TEntity>(Expression<Func<TEntity, object?>> expression)
         public IColumns Add<TEntity>(Expression<Func<TEntity, object?>> expression)
         {
         {
             return Add(CoreUtils.GetFullPropertyName(expression, "."));
             return Add(CoreUtils.GetFullPropertyName(expression, "."));

+ 2 - 2
InABox.Core/DataModel/AutoDataModel.cs

@@ -29,7 +29,7 @@ namespace InABox.Core
         //private List<Tuple<String,Type>> _lookuptables = new List<Tuple<String,Type>>();
         //private List<Tuple<String,Type>> _lookuptables = new List<Tuple<String,Type>>();
         private readonly List<Tuple<Type, string, bool>> _childtables = new List<Tuple<Type, string, bool>>();
         private readonly List<Tuple<Type, string, bool>> _childtables = new List<Tuple<Type, string, bool>>();
 
 
-        public AutoDataModel(Filter<T> filter, Columns<T>? columns, SortOrder<T>? sort) : base(filter, columns, sort)
+        public AutoDataModel(Filter<T>? filter, Columns<T>? columns, SortOrder<T>? sort) : base(filter, columns, sort)
         {
         {
             //var props = CoreUtils.PropertyList(typeof(T), x => x.PropertyType.GetInterfaces().Contains(typeof(IEntityLink)));
             //var props = CoreUtils.PropertyList(typeof(T), x => x.PropertyType.GetInterfaces().Contains(typeof(IEntityLink)));
             //foreach (var prop in props)
             //foreach (var prop in props)
@@ -171,7 +171,7 @@ namespace InABox.Core
                     new object?[] { manyToMany1.Item2, manyToMany1.Item3, null, null, false, manyToMany1.Item4, manyToMany1.Item5 });
                     new object?[] { manyToMany1.Item2, manyToMany1.Item3, null, null, false, manyToMany1.Item4, manyToMany1.Item5 });
         }
         }
 
 
-        public AutoDataModel(Filter<T> filter): this(filter, null, null) { }
+        public AutoDataModel(Filter<T>? filter): this(filter, null, null) { }
 
 
         public override string Name => typeof(T).EntityName().Split('.').Last();
         public override string Name => typeof(T).EntityName().Split('.').Last();
 
 

+ 1 - 1
InABox.Core/DataModel/DataModel.cs

@@ -750,7 +750,7 @@ namespace InABox.Core
     public abstract class DataModel<T> : DataModel, IDataModel<T>
     public abstract class DataModel<T> : DataModel, IDataModel<T>
         where T : Entity, IRemotable, IPersistent, new()
         where T : Entity, IRemotable, IPersistent, new()
     {
     {
-        public DataModel(Filter<T> filter, Columns<T>? columns = null, SortOrder<T>? sort = null)
+        public DataModel(Filter<T>? filter, Columns<T>? columns = null, SortOrder<T>? sort = null)
         {
         {
             Filter = filter;
             Filter = filter;
             Columns = columns;
             Columns = columns;

+ 19 - 2
inabox.wpf/DynamicGrid/BaseDynamicGrid.cs

@@ -97,7 +97,7 @@ namespace InABox.DynamicGrid
             RowStyleSelector = GetRowStyleSelector();
             RowStyleSelector = GetRowStyleSelector();
             RowStyleSelector.GetStyle += (row, style) => GetRowStyle(row, style);
             RowStyleSelector.GetStyle += (row, style) => GetRowStyle(row, style);
             
             
-            HiddenColumns = new List<Expression<Func<T, object?>>>();
+            HiddenColumns = new HiddenColumnsList();
         }
         }
 
 
         /// <summary>
         /// <summary>
@@ -134,7 +134,24 @@ namespace InABox.DynamicGrid
         public bool HasOption(DynamicGridOption option, IEnumerable<DynamicGridOption>? options = null) => (options ?? Options).Contains(option);
         public bool HasOption(DynamicGridOption option, IEnumerable<DynamicGridOption>? options = null) => (options ?? Options).Contains(option);
         bool IDynamicGrid.HasOption(InABox.DynamicGrid.DynamicGridOption option) => HasOption(option, null);
         bool IDynamicGrid.HasOption(InABox.DynamicGrid.DynamicGridOption option) => HasOption(option, null);
 
 
-        public List<Expression<Func<T, object?>>> HiddenColumns { get; }
+        public class HiddenColumnsList
+        {
+            private List<string> Columns { get; set; } = new();
+
+            public IEnumerable<string> ColumnNames => Columns;
+
+            public void Add(Expression<Func<T, object?>> column)
+            {
+                Columns.Add(CoreUtils.GetFullPropertyName(column, "."));
+            }
+
+            public void Add(IColumn column)
+            {
+                Columns.Add(column.Property);
+            }
+        }
+
+        public HiddenColumnsList HiddenColumns { get; }
 
 
         public void InitialiseEditorForm(IDynamicEditorForm editor, object[] items, Func<Type, CoreTable>? pageDataHandler = null, bool preloadPages = false)
         public void InitialiseEditorForm(IDynamicEditorForm editor, object[] items, Func<Type, CoreTable>? pageDataHandler = null, bool preloadPages = false)
         {
         {

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

@@ -2159,8 +2159,8 @@ namespace InABox.DynamicGrid
             var columns = new Columns<T>();
             var columns = new Columns<T>();
             foreach (var column in VisibleColumns)
             foreach (var column in VisibleColumns)
                 columns.Add(column.ColumnName);
                 columns.Add(column.ColumnName);
-            foreach (var column in HiddenColumns)
-                columns.Add(column);
+            foreach (var column in HiddenColumns.ColumnNames)
+                columns.Add(new Column<T>(column));
             return columns;
             return columns;
         }
         }
 
 
@@ -3297,7 +3297,7 @@ namespace InABox.DynamicGrid
             {
             {
                 reloadColumns.Add(column);
                 reloadColumns.Add(column);
             }
             }
-            foreach (var column in HiddenColumns)
+            foreach (var column in HiddenColumns.ColumnNames)
             {
             {
                 reloadColumns.Add(column);
                 reloadColumns.Add(column);
             }
             }