DynamicGridComboBoxColumn.cs 1.5 KB

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