IDynamicGridUIComponentExtensions.cs 2.4 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071727374757677787980
  1. using System;
  2. using System.Collections.Generic;
  3. using System.Data;
  4. using System.Linq;
  5. using Syncfusion.Data;
  6. namespace InABox.DynamicGrid;
  7. public static class IDynamicGridUIComponentExtensions
  8. {
  9. public static string CreateFilterExpression(this DynamicActionColumn column, string propertyName)
  10. {
  11. List<string> criteria = new();
  12. var sel = column.SelectedFilters ?? [];
  13. var exc = column.ExcludeFilters ?? [];
  14. if (sel.Any())
  15. {
  16. var sels = String.Join(", ",sel.Select(x => $"'{x}'"));
  17. criteria.Add($"{propertyName} IN ({sels})");
  18. }
  19. if (exc.Any())
  20. {
  21. var excs = String.Join(", ",exc.Select(x => $"'{x}'"));
  22. criteria.Add($"{propertyName} NOT IN ({excs})");
  23. }
  24. if (criteria.Any())
  25. return $"{string.Join(" AND ", criteria)}";
  26. return "true";
  27. }
  28. public static void SetFilters(this DynamicActionColumn column, IEnumerable<FilterPredicate>? predicates)
  29. {
  30. if (predicates != null)
  31. {
  32. var filter = predicates.Select(x => x.FilterValue.ToString()!).ToArray();
  33. var include = predicates.Any(x => x.FilterType == FilterType.Equals);
  34. if (include)
  35. {
  36. column.SelectedFilters = filter;
  37. column.ExcludeFilters = null;
  38. }
  39. else if(column.Filters is not null)
  40. {
  41. column.SelectedFilters = column.Filters.Except(filter).ToArray();
  42. column.ExcludeFilters = null;
  43. }
  44. else
  45. {
  46. column.SelectedFilters = null;
  47. column.ExcludeFilters = filter;
  48. }
  49. }
  50. else
  51. {
  52. column.SelectedFilters = null;
  53. column.ExcludeFilters = null;
  54. }
  55. }
  56. public static void ApplyFilters(this DataView? view, IEnumerable<DynamicActionColumn> columns)
  57. {
  58. List<String> criteria = new();
  59. foreach (var column in columns)
  60. criteria.Add(column.GetFilterExpression?.Invoke(column) ?? "");
  61. var filter = string.Join(" AND ", criteria.Where(x => !string.IsNullOrWhiteSpace(x)));
  62. if (view != null)
  63. {
  64. view.RowStateFilter = DataViewRowState.CurrentRows;
  65. view.RowFilter = filter;
  66. if (view.Count == 0)
  67. view.RowStateFilter = DataViewRowState.None;
  68. }
  69. }
  70. }