DynamicGridComboBoxColumn.cs 1.6 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748
  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<TEntity, TEditor> : DynamicGridEditorColumn<TEntity, TEditor, GridComboBoxColumn, TreeGridComboBoxColumn>
  10. where TEntity : BaseObject
  11. where TEditor : class, ILookupEditor
  12. {
  13. private List<Tuple<object?, string>> GetData(TEditor editor)
  14. {
  15. var keycol = Definition.ColumnName.Split('.').Last();
  16. var data = editor.Values(typeof(TEntity), Definition.ColumnName, null);
  17. var items = new List<Tuple<object?, string>>
  18. {
  19. new(null, "")
  20. };
  21. foreach (var row in data.Rows)
  22. items.Add(new(row[keycol], (row["Display"] ?? "").ToString() ?? ""));
  23. return items;
  24. }
  25. protected override void Configure(GridComboBoxColumn column, TEditor editor)
  26. {
  27. column.SelectedValuePath = "Item1";
  28. column.DisplayMemberPath = "Item2";
  29. column.ItemsSource = GetData(editor);
  30. column.UpdateTrigger = UpdateSourceTrigger.PropertyChanged;
  31. }
  32. protected override void Configure(TreeGridComboBoxColumn column, TEditor editor)
  33. {
  34. column.SelectedValuePath = "Item1";
  35. column.DisplayMemberPath = "Item2";
  36. column.ItemsSource = GetData(editor);
  37. column.UpdateTrigger = UpdateSourceTrigger.PropertyChanged;
  38. }
  39. protected DynamicGridComboBoxColumn(DynamicGridColumn definition) : base(definition)
  40. {
  41. }
  42. }