|
@@ -7,6 +7,7 @@ using System.ComponentModel;
|
|
|
using System.Linq;
|
|
|
using System.Runtime.CompilerServices;
|
|
|
using System.Text;
|
|
|
+using System.Threading;
|
|
|
using System.Threading.Tasks;
|
|
|
using System.Windows;
|
|
|
using System.Windows.Controls;
|
|
@@ -32,6 +33,10 @@ public class DynamicGridColumnNameSelectorGrid : DynamicItemsListGrid<DynamicGri
|
|
|
}
|
|
|
}
|
|
|
|
|
|
+ private List<DynamicGridColumnNameSelectorItem> _items;
|
|
|
+
|
|
|
+ public string SearchText { get; set; }
|
|
|
+
|
|
|
public DynamicGridColumnNameSelectorGrid(string[] columnNames)
|
|
|
{
|
|
|
var items = new List<DynamicGridColumnNameSelectorItem>();
|
|
@@ -85,7 +90,14 @@ public class DynamicGridColumnNameSelectorGrid : DynamicItemsListGrid<DynamicGri
|
|
|
}
|
|
|
items.Sort((a, b) => a.ColumnName.CompareTo(b.ColumnName));
|
|
|
|
|
|
- Items = items;
|
|
|
+ _items = items;
|
|
|
+ }
|
|
|
+
|
|
|
+ protected override void DoReconfigure(DynamicGridOptions options)
|
|
|
+ {
|
|
|
+ base.DoReconfigure(options);
|
|
|
+ options.Clear();
|
|
|
+ options.FilterRows = true;
|
|
|
}
|
|
|
|
|
|
protected override void SelectItems(CoreRow[]? rows)
|
|
@@ -164,23 +176,87 @@ public class DynamicGridColumnNameSelectorGrid : DynamicItemsListGrid<DynamicGri
|
|
|
PropertyChanged?.Invoke(this, new(propertyName));
|
|
|
}
|
|
|
|
|
|
+ protected override void Reload(Filters<DynamicGridColumnNameSelectorItem> criteria, Columns<DynamicGridColumnNameSelectorItem> columns, ref SortOrder<DynamicGridColumnNameSelectorItem>? sort, CancellationToken token, Action<CoreTable?, Exception?> action)
|
|
|
+ {
|
|
|
+ if (SearchText.IsNullOrWhiteSpace())
|
|
|
+ {
|
|
|
+ Items = _items;
|
|
|
+ }
|
|
|
+ else
|
|
|
+ {
|
|
|
+ Items = new();
|
|
|
+
|
|
|
+ foreach(var item in _items)
|
|
|
+ {
|
|
|
+ if (!item.IsParent && item.ColumnName.Contains(SearchText, StringComparison.CurrentCultureIgnoreCase))
|
|
|
+ {
|
|
|
+ Items.Add(item);
|
|
|
+ }
|
|
|
+ }
|
|
|
+ foreach(var item in _items)
|
|
|
+ {
|
|
|
+ if (item.IsParent && Items.Any(x => x.ColumnName.StartsWith(item.ColumnName + ".")))
|
|
|
+ {
|
|
|
+ Items.Add(item);
|
|
|
+ }
|
|
|
+ }
|
|
|
+ }
|
|
|
+
|
|
|
+ base.Reload(criteria, columns, ref sort, token, action);
|
|
|
+ }
|
|
|
+
|
|
|
public static bool SelectColumnName(string[] columnNames, out string value)
|
|
|
{
|
|
|
var grid = new DynamicGridColumnNameSelectorGrid(columnNames);
|
|
|
grid.Refresh(true, true);
|
|
|
|
|
|
- grid.OnCellDoubleClick += (o, e) =>
|
|
|
+ var lbl = new Label
|
|
|
{
|
|
|
- if (e.Row is null) return;
|
|
|
+ Content = "Search:",
|
|
|
+ Margin = new Thickness(0, 0, 5, 5)
|
|
|
+ };
|
|
|
|
|
|
- var item = grid.LoadItem(e.Row);
|
|
|
+ var search = new TextBox
|
|
|
+ {
|
|
|
+ Background = Colors.LightYellow.ToBrush(),
|
|
|
+ Height = 25,
|
|
|
+ Margin = new Thickness(0, 0, 0, 5),
|
|
|
+ VerticalContentAlignment = VerticalAlignment.Center,
|
|
|
};
|
|
|
+ search.TextChanged += (o, e) =>
|
|
|
+ {
|
|
|
+ grid.SearchText = search.Text;
|
|
|
+ grid.Refresh(false, true);
|
|
|
+ };
|
|
|
+
|
|
|
+ var control = new Grid();
|
|
|
+ control.AddColumn(GridUnitType.Auto);
|
|
|
+ control.AddColumn(GridUnitType.Star);
|
|
|
+
|
|
|
+ control.AddRow(GridUnitType.Auto);
|
|
|
+ control.AddRow(GridUnitType.Star);
|
|
|
|
|
|
- var window = new DynamicContentDialog(grid)
|
|
|
+ control.AddChild(lbl, 0, 0);
|
|
|
+ control.AddChild(search, 0, 1);
|
|
|
+ control.AddChild(grid, 1, 0, colSpan: 2);
|
|
|
+
|
|
|
+ var window = new DynamicContentDialog(control)
|
|
|
{
|
|
|
Title = "Select Column"
|
|
|
};
|
|
|
window.Bind(DynamicContentDialog.CanSaveProperty, grid, x => x.CanSave);
|
|
|
+
|
|
|
+ grid.OnCellDoubleClick += (o, e) =>
|
|
|
+ {
|
|
|
+ if (e.Row is null) return;
|
|
|
+
|
|
|
+ var item = grid.LoadItem(e.Row);
|
|
|
+ if (!item.IsParent)
|
|
|
+ {
|
|
|
+ window.DialogResult = true;
|
|
|
+ }
|
|
|
+ };
|
|
|
+
|
|
|
if(window.ShowDialog() == true && grid.SelectedRows.FirstOrDefault() is CoreRow row)
|
|
|
{
|
|
|
var item = grid.LoadItem(row);
|