Browse Source

Merge remote-tracking branch 'origin/kenric' into frank

frogsoftware 1 year ago
parent
commit
a91be0986a

+ 10 - 5
InABox.Core/BaseObject.cs

@@ -109,13 +109,18 @@ namespace InABox.Core
 
             if (!bApplyingChanges)
             {
-                bApplyingChanges = true;
-
-                DoPropertyChanged(name, before, after);
+                try
+                {
+                    bApplyingChanges = true;
 
-                PropertyChanged?.Invoke(this, new PropertyChangedEventArgs(name));
+                    DoPropertyChanged(name, before, after);
 
-                bApplyingChanges = false;
+                    PropertyChanged?.Invoke(this, new PropertyChangedEventArgs(name));
+                }
+                finally
+                {
+                    bApplyingChanges = false;
+                }
             }
         }
 

+ 0 - 3
InABox.Core/Filter.cs

@@ -316,9 +316,6 @@ namespace InABox.Core
 
         string AsOData();
 
-        void SerializeBinary(CoreBinaryWriter writer);
-        void DeserializeBinary(CoreBinaryReader reader);
-
         IEnumerable<string> ColumnNames();
 
         public delegate object? ConvertCustomValueFunction(IFilter filter, CustomFilterValue value);

+ 6 - 6
inabox.wpf/DynamicGrid/DynamicDataGrid.cs

@@ -302,8 +302,8 @@ namespace InABox.DynamicGrid
                 }
 
                 var columns = LoadEditorColumns(); // new Columns<TEntity>().Default(ColumnType.IncludeOptional, ColumnType.IncludeForeignKeys, ColumnType.IncludeUserProperties);
-                var data = new Client<TEntity>().Query(filter, columns);
-                results.AddRange(data.Rows.Select(x => x.ToObject<TEntity>()));
+                var data = Client.Query(filter, columns);
+                results.AddRange(data.ToObjects<TEntity>());
             }
 
             return results.ToArray();
@@ -313,18 +313,18 @@ namespace InABox.DynamicGrid
         {
             var id = row.Get<TEntity, Guid>(x => x.ID);
             var filter = GetRowFilter(row);//new Filter<TEntity>(x => x.ID).IsEqualTo(id);
-            return new Client<TEntity>().Load(filter).FirstOrDefault()
+            return Client.Query(filter, LoadEditorColumns()).ToObjects<TEntity>().FirstOrDefault()
                 ?? throw new Exception($"No {typeof(TEntity).Name} with ID {id}");
         }
 
         public override void SaveItem(TEntity item)
         {
-            new Client<TEntity>().Save(item, "Edited by User");
+            Client.Save(item, "Edited by User");
         }
 
         public override void SaveItems(TEntity[] items)
         {
-            new Client<TEntity>().Save(items, "Edited by User");
+            Client.Save(items, "Edited by User");
         }
 
         protected override void DeleteItems(params CoreRow[] rows)
@@ -342,7 +342,7 @@ namespace InABox.DynamicGrid
                 deletes.Add(delete);
             }
 
-            new Client<TEntity>().Delete(deletes, "Deleted on User Request");
+            Client.Delete(deletes, "Deleted on User Request");
         }
 
         private object GetPropertyValue(Expression member, object obj)

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

@@ -21,6 +21,7 @@ using System.Windows.Threading;
 using InABox.Clients;
 using InABox.Core;
 using InABox.WPF;
+using Microsoft.CodeAnalysis.CSharp.Syntax;
 using Microsoft.Xaml.Behaviors;
 using Syncfusion.Data;
 using Syncfusion.DocIO.ReaderWriter.DataStreamParser.Escher;
@@ -977,6 +978,7 @@ namespace InABox.DynamicGrid
 
         private void DataGrid_CurrentCellValueChanged(object? sender, CurrentCellValueChangedEventArgs e)
         {
+            // Are we sure that this function is ever useful? It seems that since the data in the grid hasn't been updated by this point, this function is essentially useless (the data is updated in EndEdit). Probably need to check the GridCheckBoxColumn
             var headerrows = HasOption(DynamicGridOption.FilterRows) ? 2 : 1;
             if (e.RowColumnIndex.RowIndex < headerrows)
                 return;
@@ -1042,6 +1044,12 @@ namespace InABox.DynamicGrid
             if (table is null) return;
 
             var colno = table.Columns.IndexOf(datacolname);
+            if (colno < 0)
+            {
+                // This column is not in the list. Because of linked properties, a single lookup change can cause a cascade of updates,
+                // many of which are likely unnecessary; hence, we shall ignore any which are unnecessary.
+                return;
+            }
             var corecol = Data.Columns[colno].ColumnName;
             var corerow = Data.Rows[row];
             corerow[corecol] = value;
@@ -1147,6 +1155,10 @@ namespace InABox.DynamicGrid
             var colno = DataGridItems.Columns.IndexOf(mappedname);
             var column = Data.Columns[colno];
             var value = DataGridItems.Rows[iRow][mappedname];
+            if(value is DBNull)
+            {
+                value = CoreUtils.GetDefault(column.DataType);
+            }
             
             UpdateData(new Dictionary<CoreColumn, object?>() { { column, value } });