فهرست منبع

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

frogsoftware 1 سال پیش
والد
کامیت
a91be0986a
4فایلهای تغییر یافته به همراه28 افزوده شده و 14 حذف شده
  1. 10 5
      InABox.Core/BaseObject.cs
  2. 0 3
      InABox.Core/Filter.cs
  3. 6 6
      inabox.wpf/DynamicGrid/DynamicDataGrid.cs
  4. 12 0
      inabox.wpf/DynamicGrid/DynamicGrid.cs

+ 10 - 5
InABox.Core/BaseObject.cs

@@ -109,13 +109,18 @@ namespace InABox.Core
 
 
             if (!bApplyingChanges)
             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();
         string AsOData();
 
 
-        void SerializeBinary(CoreBinaryWriter writer);
-        void DeserializeBinary(CoreBinaryReader reader);
-
         IEnumerable<string> ColumnNames();
         IEnumerable<string> ColumnNames();
 
 
         public delegate object? ConvertCustomValueFunction(IFilter filter, CustomFilterValue value);
         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 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();
             return results.ToArray();
@@ -313,18 +313,18 @@ namespace InABox.DynamicGrid
         {
         {
             var id = row.Get<TEntity, Guid>(x => x.ID);
             var id = row.Get<TEntity, Guid>(x => x.ID);
             var filter = GetRowFilter(row);//new Filter<TEntity>(x => x.ID).IsEqualTo(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}");
                 ?? throw new Exception($"No {typeof(TEntity).Name} with ID {id}");
         }
         }
 
 
         public override void SaveItem(TEntity item)
         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)
         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)
         protected override void DeleteItems(params CoreRow[] rows)
@@ -342,7 +342,7 @@ namespace InABox.DynamicGrid
                 deletes.Add(delete);
                 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)
         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.Clients;
 using InABox.Core;
 using InABox.Core;
 using InABox.WPF;
 using InABox.WPF;
+using Microsoft.CodeAnalysis.CSharp.Syntax;
 using Microsoft.Xaml.Behaviors;
 using Microsoft.Xaml.Behaviors;
 using Syncfusion.Data;
 using Syncfusion.Data;
 using Syncfusion.DocIO.ReaderWriter.DataStreamParser.Escher;
 using Syncfusion.DocIO.ReaderWriter.DataStreamParser.Escher;
@@ -977,6 +978,7 @@ namespace InABox.DynamicGrid
 
 
         private void DataGrid_CurrentCellValueChanged(object? sender, CurrentCellValueChangedEventArgs e)
         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;
             var headerrows = HasOption(DynamicGridOption.FilterRows) ? 2 : 1;
             if (e.RowColumnIndex.RowIndex < headerrows)
             if (e.RowColumnIndex.RowIndex < headerrows)
                 return;
                 return;
@@ -1042,6 +1044,12 @@ namespace InABox.DynamicGrid
             if (table is null) return;
             if (table is null) return;
 
 
             var colno = table.Columns.IndexOf(datacolname);
             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 corecol = Data.Columns[colno].ColumnName;
             var corerow = Data.Rows[row];
             var corerow = Data.Rows[row];
             corerow[corecol] = value;
             corerow[corecol] = value;
@@ -1147,6 +1155,10 @@ namespace InABox.DynamicGrid
             var colno = DataGridItems.Columns.IndexOf(mappedname);
             var colno = DataGridItems.Columns.IndexOf(mappedname);
             var column = Data.Columns[colno];
             var column = Data.Columns[colno];
             var value = DataGridItems.Rows[iRow][mappedname];
             var value = DataGridItems.Rows[iRow][mappedname];
+            if(value is DBNull)
+            {
+                value = CoreUtils.GetDefault(column.DataType);
+            }
             
             
             UpdateData(new Dictionary<CoreColumn, object?>() { { column, value } });
             UpdateData(new Dictionary<CoreColumn, object?>() { { column, value } });