SpatialColumnEditor.cs 1.5 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253
  1. using System;
  2. using System.Collections.Generic;
  3. using System.Text;
  4. using System.Windows.Forms;
  5. using System.Windows.Forms.Design;
  6. using System.ComponentModel;
  7. using System.Drawing;
  8. using System.Drawing.Design;
  9. using FastReport.Controls;
  10. using FastReport.Data;
  11. namespace FastReport.Map
  12. {
  13. internal class SpatialColumnEditor : UITypeEditor
  14. {
  15. private IWindowsFormsEditorService edSvc = null;
  16. private void lb_Click(object sender, EventArgs e)
  17. {
  18. edSvc.CloseDropDown();
  19. }
  20. public override UITypeEditorEditStyle GetEditStyle(ITypeDescriptorContext context)
  21. {
  22. return UITypeEditorEditStyle.DropDown;
  23. }
  24. public override object EditValue(ITypeDescriptorContext context,
  25. IServiceProvider provider, object Value)
  26. {
  27. edSvc = (IWindowsFormsEditorService)provider.GetService(typeof(IWindowsFormsEditorService));
  28. MapLayer layer = null;
  29. if (context != null && context.Instance is MapLayer)
  30. layer = context.Instance as MapLayer;
  31. if (layer != null)
  32. {
  33. string[] columnNames = layer.SpatialColumns.ToArray();
  34. ListBox lb = new ListBox();
  35. lb.Items.AddRange(columnNames);
  36. lb.SelectedItem = Value;
  37. lb.BorderStyle = BorderStyle.None;
  38. lb.Height = lb.ItemHeight * lb.Items.Count;
  39. lb.Click += new EventHandler(lb_Click);
  40. edSvc.DropDownControl(lb);
  41. if (lb.SelectedIndex >= 0 && lb.SelectedIndex < columnNames.Length)
  42. return columnNames[lb.SelectedIndex];
  43. }
  44. return Value;
  45. }
  46. }
  47. }