| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186 | 
							- using System;
 
- using System.Collections.Generic;
 
- using System.Linq;
 
- using InABox.Core;
 
- namespace InABox.DynamicGrid
 
- {
 
-     internal class DynamicColumnGrid : DynamicGrid<DynamicGridColumn>
 
-     {
 
-         public DynamicColumnGrid()
 
-         {
 
-             Columns = new DynamicGridColumns();
 
-             Options.AddRange(DynamicGridOption.RecordCount, DynamicGridOption.MultiSelect, DynamicGridOption.AddRows, DynamicGridOption.EditRows,
 
-                 DynamicGridOption.DeleteRows);
 
-             ActionColumns.Add(new DynamicRowMovementColumn(DynamicRowMovement.Up, SwapRows));
 
-             ActionColumns.Add(new DynamicRowMovementColumn(DynamicRowMovement.Down, SwapRows));
 
-             //MasterColumns.AddRange(LoadColumns());
 
-         }
 
-         public Type Type { get; set; }
 
-         public DynamicGridColumns Columns { get; }
 
-         public bool DirectEdit { get; set; }
 
-         private bool SwapRows(int row1, int row2)
 
-         {
 
-             var item = Columns[row1];
 
-             Columns.Remove(item);
 
-             Columns.Insert(row2, item);
 
-             return true;
 
-         }
 
-         //public DynamicGridColumns DefineColumns()
 
-         //{
 
-         //	return LoadColumns();
 
-         //}
 
-         protected override DynamicGridColumns LoadColumns()
 
-         {
 
-             var columns = new DynamicGridColumns
 
-             {
 
-                 new()
 
-                 {
 
-                     ColumnName = "ColumnName", /* Type = typeof(String), */ Width = 0, Editor = new ComboLookupEditor(typeof(ColumnNameGenerator))
 
-                 },
 
-                 new() { ColumnName = "Width", /* Type = typeof(int),  */ Width = 80 },
 
-                 new() { ColumnName = "Caption", /* Type = typeof(String), */ Width = 0 },
 
-                 new() { ColumnName = "Format", /* Type = typeof(String), */ Width = 60 },
 
-                 new() { ColumnName = "Alignment", /* Type = typeof(String), */ Width = 100, Editor = new EnumLookupEditor(typeof(Alignment)) }
 
-             };
 
-             return columns;
 
-         }
 
-         public override void ConfigureColumns(DynamicGridColumns columns)
 
-         {
 
-             base.ConfigureColumns(columns);
 
-             var column = columns.FirstOrDefault(x => x.ColumnName.Equals("ColumnName"));
 
-             if (column != null)
 
-             {
 
-                 var lookup = column.Editor as ComboLookupEditor;
 
-                 lookup.OnAfterGenerateLookups += DoGenerateColumns;
 
-             }
 
-         }
 
-         private IEnumerable<DynamicGridColumn> ProcessColumns()
 
-         {
 
-             var result = new List<DynamicGridColumn>();
 
-             var cols = new DynamicGridColumns();
 
-             cols.ExtractColumns(Type);
 
-             foreach (var col in cols)
 
-             {
 
-                 if (col.Editor == null)
 
-                     continue;
 
-                 if (col.Editor is NullEditor)
 
-                     continue;
 
-                 if (col.Editor.Visible != Visible.Hidden)
 
-                 {
 
-                     result.Add(col);
 
-                     continue;
 
-                 }
 
-                 if (!DirectEdit)
 
-                     continue;
 
-                 if (col.Editor.Editable == Editable.Enabled && col.ColumnName.Split('.').Length <= 2)
 
-                     result.Add(col);
 
-             }
 
-             result.Sort((a, b) => a.ColumnName.CompareTo(b.ColumnName));
 
-             return result;
 
-         }
 
-         private void DoGenerateColumns(ILookupGenerator generator, List<LookupEntry> entries)
 
-         {
 
-             var cols = ProcessColumns();
 
-             foreach (var col in cols)
 
-             {
 
-                 var entry = new LookupEntry(col.ColumnName, col.ColumnName);
 
-                 entries.Add(entry);
 
-             }
 
-         }
 
-         protected override void DefineLookups(ILookupEditorControl sender, DynamicGridColumn[] items)
 
-         {
 
-             if (Type != null && sender.ColumnName.Equals("ColumnName"))
 
-             {
 
-                 var results = new CoreTable();
 
-                 results.Columns.Add(new CoreColumn { ColumnName = sender.ColumnName, DataType = typeof(string) });
 
-                 results.Columns.Add(new CoreColumn { ColumnName = "Display", DataType = typeof(string) });
 
-                 var cols = ProcessColumns();
 
-                 foreach (var col in cols)
 
-                 {
 
-                     var row = results.NewRow();
 
-                     row[sender.ColumnName] = col.ColumnName;
 
-                     row["Display"] = col.ColumnName;
 
-                     results.Rows.Add(row);
 
-                 }
 
-                 ;
 
-                 sender.LoadLookups(results);
 
-             }
 
-             else
 
-             {
 
-                 base.DefineLookups(sender, items);
 
-             }
 
-         }
 
-         #region Save / Load
 
-         protected override void Reload(Filters<DynamicGridColumn> criteria, Columns<DynamicGridColumn> columns, ref SortOrder<DynamicGridColumn>? sort,
 
-             Action<CoreTable, Exception?> action)
 
-         {
 
-             var result = new CoreTable();
 
-             if (columns == null || !columns.Items.Any())
 
-                 result.LoadColumns(typeof(DynamicGridColumn));
 
-             else
 
-                 foreach (var column in columns.Items)
 
-                     result.Columns.Add(new CoreColumn { ColumnName = column.ToString(), DataType = column.Expression.Type });
 
-             result.LoadRows(Columns);
 
-             action.Invoke(result, null);
 
-         }
 
-         //protected override DataTable Reload(Dictionary<String,Object> criteria, List<String> columnnames, String sort)
 
-         //{
 
-         //	DataTable result = new DataTable();
 
-         //	result.LoadColumns(typeof(DynamicGridColumn));
 
-         //	result.LoadRows(Columns);
 
-         //	return result;
 
-         //}
 
-         protected override DynamicGridColumn LoadItem(CoreRow row)
 
-         {
 
-             var index = Data.Rows.IndexOf(row);
 
-             return Columns[index];
 
-         }
 
-         public override void SaveItem(DynamicGridColumn item)
 
-         {
 
-             try
 
-             {
 
-                 var prop = DatabaseSchema.Property(Type, item.ColumnName);
 
-                 item.Editor = prop.Editor;
 
-             }
 
-             catch (Exception e)
 
-             {
 
-                 Logger.Send(LogType.Error, "", string.Format("*** Unknown Error: {0}\n{1}", e.Message, e.StackTrace));
 
-             }
 
-             if (!Columns.Contains(item))
 
-                 Columns.Add(item);
 
-         }
 
-         protected override void DeleteItems(params CoreRow[] rows)
 
-         {
 
-             foreach (var row in rows.OrderByDescending(x => x.Index))
 
-                 Columns.RemoveAt(row.Index);
 
-         }
 
-         #endregion
 
-     }
 
- }
 
 
  |