浏览代码

Fixed NumericDynamicGridColumnFilter

Kenric Nugteren 1 月之前
父节点
当前提交
5f95a50f4f

+ 7 - 2
inabox.wpf/DynamicGrid/ColumnFilter/NumericDynamicGridColumnFilter.cs

@@ -7,6 +7,7 @@ using System;
 using System.Collections.Generic;
 using System.ComponentModel;
 using System.Linq;
+using System.Numerics;
 using System.Runtime.CompilerServices;
 using System.Text;
 using System.Threading.Tasks;
@@ -17,7 +18,8 @@ using System.Windows.Media;
 
 namespace InABox.DynamicGrid;
 
-public class NumericDynamicGridColumnFilter(IBaseDynamicGrid grid, DynamicColumnBase column) : CheckBoxDynamicGridColumnFilter
+public class NumericDynamicGridColumnFilter<T>(IBaseDynamicGrid grid, DynamicColumnBase column) : CheckBoxDynamicGridColumnFilter
+    where T : struct, INumber<T>
 {
     public IBaseDynamicGrid Grid { get; set; } = grid;
     public DynamicColumnBase Column { get; set; } = column;
@@ -29,7 +31,10 @@ public class NumericDynamicGridColumnFilter(IBaseDynamicGrid grid, DynamicColumn
             .Distinct()
             .Select(x => new FilterItem(x, x?.ToString() ?? "", this))
             .ToArray();
-        Array.Sort(items, (a, b) => (a.Value as IComparable)!.CompareTo(b.Value));
+        Array.Sort(items, (a, b) =>
+        {
+            return ((T?)a.Value ?? default).CompareTo((T?)b.Value ?? default);
+        });
         return items;
     }
 

+ 10 - 2
inabox.wpf/DynamicGrid/Grids/BaseDynamicGrid.cs

@@ -563,9 +563,17 @@ public abstract class BaseDynamicGrid : ContentControl, IDynamicGridUIComponentP
             {
                 return new DateTreeDynamicGridColumnFilter(this, column);
             }
-            else if(gc.Editor is NumericEditor)
+            else if(gc.Editor is IntegerEditor)
             {
-                return new NumericDynamicGridColumnFilter(this, column);
+                return new NumericDynamicGridColumnFilter<int>(this, column);
+            }
+            else if(gc.Editor is DoubleEditor)
+            {
+                return new NumericDynamicGridColumnFilter<double>(this, column);
+            }
+            else if(gc.Editor is DecimalEditor)
+            {
+                return new NumericDynamicGridColumnFilter<decimal>(this, column);
             }
             else
             {