DynamicGridComboBoxColumn.cs 1.5 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647
  1. using System;
  2. using System.Collections.Generic;
  3. using System.Linq;
  4. using System.Windows.Data;
  5. using InABox.Core;
  6. using Syncfusion.UI.Xaml.Grid;
  7. using Syncfusion.UI.Xaml.TreeGrid;
  8. namespace InABox.DynamicGrid;
  9. public abstract class DynamicGridComboBoxColumn<TEditor> : DynamicGridEditorColumn<TEditor, GridComboBoxColumn, TreeGridComboBoxColumn>
  10. where TEditor : class, ILookupEditor
  11. {
  12. private List<Tuple<object?, string>> GetData(TEditor editor)
  13. {
  14. var keycol = Definition.ColumnName.Split('.').Last();
  15. var data = editor.Values(Definition.ColumnName, null);
  16. var items = new List<Tuple<object?, string>>
  17. {
  18. new(null, "")
  19. };
  20. foreach (var row in data.Rows)
  21. items.Add(new(row[keycol], (row["Display"] ?? "").ToString() ?? ""));
  22. return items;
  23. }
  24. protected override void Configure(GridComboBoxColumn column, TEditor editor)
  25. {
  26. column.SelectedValuePath = "Item1";
  27. column.DisplayMemberPath = "Item2";
  28. column.ItemsSource = GetData(editor);
  29. column.UpdateTrigger = UpdateSourceTrigger.PropertyChanged;
  30. }
  31. protected override void Configure(TreeGridComboBoxColumn column, TEditor editor)
  32. {
  33. column.SelectedValuePath = "Item1";
  34. column.DisplayMemberPath = "Item2";
  35. column.ItemsSource = GetData(editor);
  36. column.UpdateTrigger = UpdateSourceTrigger.PropertyChanged;
  37. }
  38. protected DynamicGridComboBoxColumn(DynamicGridColumn definition) : base(definition)
  39. {
  40. }
  41. }