1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071727374757677787980 |
- using System;
- using System.Collections.Generic;
- using System.Data;
- using System.Linq;
- using Syncfusion.Data;
- namespace InABox.DynamicGrid;
- public static class IDynamicGridUIComponentExtensions
- {
- public static string CreateFilterExpression(this DynamicActionColumn column, string propertyName)
- {
- List<string> criteria = new();
-
- var sel = column.SelectedFilters ?? [];
- var exc = column.ExcludeFilters ?? [];
- if (sel.Any())
- {
- var sels = String.Join(", ",sel.Select(x => $"'{x}'"));
- criteria.Add($"{propertyName} IN ({sels})");
- }
-
- if (exc.Any())
- {
- var excs = String.Join(", ",exc.Select(x => $"'{x}'"));
- criteria.Add($"{propertyName} NOT IN ({excs})");
- }
-
- if (criteria.Any())
- return $"{string.Join(" AND ", criteria)}";
- return "true";
- }
-
- public static void SetFilters(this DynamicActionColumn column, IEnumerable<FilterPredicate>? predicates)
- {
- if (predicates != null)
- {
- var filter = predicates.Select(x => x.FilterValue.ToString()!).ToArray();
- var include = predicates.Any(x => x.FilterType == FilterType.Equals);
- if (include)
- {
- column.SelectedFilters = filter;
- column.ExcludeFilters = null;
- }
- else if(column.Filters is not null)
- {
- column.SelectedFilters = column.Filters.Except(filter).ToArray();
- column.ExcludeFilters = null;
- }
- else
- {
- column.SelectedFilters = null;
- column.ExcludeFilters = filter;
- }
- }
- else
- {
- column.SelectedFilters = null;
- column.ExcludeFilters = null;
- }
- }
-
- public static void ApplyFilters(this DataView? view, IEnumerable<DynamicActionColumn> columns)
- {
- List<String> criteria = new();
- foreach (var column in columns)
- criteria.Add(column.GetFilterExpression?.Invoke(column) ?? "");
- var filter = string.Join(" AND ", criteria.Where(x => !string.IsNullOrWhiteSpace(x)));
- if (view != null)
- {
- view.RowStateFilter = DataViewRowState.CurrentRows;
- view.RowFilter = filter;
- if (view.Count == 0)
- view.RowStateFilter = DataViewRowState.None;
- }
- }
-
- }
|