|
@@ -28,7 +28,6 @@ namespace InABox.DynamicGrid
|
|
|
private TMany[] MasterList = Array.Empty<TMany>();
|
|
|
private readonly PropertyInfo property;
|
|
|
|
|
|
- public PageType PageType => PageType.Other;
|
|
|
|
|
|
protected DynamicGridCustomColumnsComponent<TMany> ColumnsComponent;
|
|
|
|
|
@@ -68,42 +67,46 @@ namespace InABox.DynamicGrid
|
|
|
options.EndUpdate();
|
|
|
}
|
|
|
|
|
|
- private bool _readOnly;
|
|
|
- public bool ReadOnly
|
|
|
- {
|
|
|
- get => _readOnly;
|
|
|
- set
|
|
|
- {
|
|
|
- if(_readOnly != value)
|
|
|
- {
|
|
|
- _readOnly = value;
|
|
|
- Reconfigure();
|
|
|
- }
|
|
|
- }
|
|
|
- }
|
|
|
-
|
|
|
private static bool IsAutoEntity => typeof(TMany).HasAttribute<AutoEntity>();
|
|
|
|
|
|
protected Filters<TMany> Criteria { get; } = new Filters<TMany>();
|
|
|
|
|
|
public TOne Item { get; protected set; }
|
|
|
|
|
|
- public bool Ready { get; set; }
|
|
|
+ public List<TMany> Items { get; private set; }
|
|
|
|
|
|
- public DynamicEditorGrid EditorGrid { get; set; }
|
|
|
+ public void LoadItems(TMany[] items)
|
|
|
+ {
|
|
|
+ Items.Clear();
|
|
|
+ Items.AddRange(items);
|
|
|
+ Refresh(false, true);
|
|
|
+ }
|
|
|
|
|
|
- public string Caption()
|
|
|
+ private static string GetTag()
|
|
|
{
|
|
|
- var caption = typeof(TMany).GetCustomAttribute(typeof(Caption));
|
|
|
- if (caption != null)
|
|
|
- return ((Caption)caption).Text;
|
|
|
- var result = new Inflector.Inflector(new CultureInfo("en")).Pluralize(typeof(TMany).Name);
|
|
|
- return result;
|
|
|
+ return typeof(TOne).Name + "." + typeof(TMany).Name;
|
|
|
}
|
|
|
|
|
|
- public virtual int Order()
|
|
|
+ #region IDynamicEditorPage
|
|
|
+
|
|
|
+ public DynamicEditorGrid EditorGrid { get; set; }
|
|
|
+
|
|
|
+ public PageType PageType => PageType.Other;
|
|
|
+
|
|
|
+ public bool Ready { get; set; }
|
|
|
+
|
|
|
+ private bool _readOnly;
|
|
|
+ public bool ReadOnly
|
|
|
{
|
|
|
- return int.MinValue;
|
|
|
+ get => _readOnly;
|
|
|
+ set
|
|
|
+ {
|
|
|
+ if (_readOnly != value)
|
|
|
+ {
|
|
|
+ _readOnly = value;
|
|
|
+ Reconfigure();
|
|
|
+ }
|
|
|
+ }
|
|
|
}
|
|
|
|
|
|
public virtual void Load(object item, Func<Type, CoreTable?>? PageDataHandler)
|
|
@@ -111,7 +114,9 @@ namespace InABox.DynamicGrid
|
|
|
Reconfigure();
|
|
|
|
|
|
Item = (TOne)item;
|
|
|
-
|
|
|
+
|
|
|
+ Refresh(true, false);
|
|
|
+
|
|
|
var data = PageDataHandler?.Invoke(typeof(TMany));
|
|
|
|
|
|
if (data == null)
|
|
@@ -128,14 +133,14 @@ namespace InABox.DynamicGrid
|
|
|
criteria.Add(new Filter<TMany>(exp).IsEqualTo(Item.ID).And(exp).IsNotEqualTo(Guid.Empty));
|
|
|
criteria.AddRange(Criteria.Items);
|
|
|
var sort = LookupFactory.DefineSort<TMany>();
|
|
|
- data = new Client<TMany>().Query(criteria.Combine(), null, sort);
|
|
|
+ data = new Client<TMany>().Query(criteria.Combine(), DynamicGridUtils.LoadEditorColumns(DataColumns()), sort);
|
|
|
}
|
|
|
}
|
|
|
|
|
|
MasterList = data.Rows.Select(x => x.ToObject<TMany>()).ToArray();
|
|
|
|
|
|
Items = MasterList.ToList();
|
|
|
- Refresh(true, true);
|
|
|
+ Refresh(false, true);
|
|
|
Ready = true;
|
|
|
}
|
|
|
|
|
@@ -144,16 +149,7 @@ namespace InABox.DynamicGrid
|
|
|
// Don't need to do anything here
|
|
|
}
|
|
|
|
|
|
- protected virtual void OnDeleteItem(TMany item)
|
|
|
- {
|
|
|
- if (IsAutoEntity)
|
|
|
- {
|
|
|
- return;
|
|
|
- }
|
|
|
- new Client<TMany>().Delete(item, typeof(TMany).Name + " Deleted by User");
|
|
|
- }
|
|
|
-
|
|
|
- public void AfterSave(object item)
|
|
|
+ public virtual void AfterSave(object item)
|
|
|
{
|
|
|
if (IsAutoEntity)
|
|
|
{
|
|
@@ -174,6 +170,39 @@ namespace InABox.DynamicGrid
|
|
|
new Client<TMany>().Save(Items.Where(x => x.IsChanged()), "Updated by User");
|
|
|
}
|
|
|
|
|
|
+ public Size MinimumSize()
|
|
|
+ {
|
|
|
+ return new Size(400, 400);
|
|
|
+ }
|
|
|
+
|
|
|
+ public string Caption()
|
|
|
+ {
|
|
|
+ var caption = typeof(TMany).GetCustomAttribute(typeof(Caption));
|
|
|
+ if (caption != null)
|
|
|
+ return ((Caption)caption).Text;
|
|
|
+ var result = new Inflector.Inflector(new CultureInfo("en")).Pluralize(typeof(TMany).Name);
|
|
|
+ return result;
|
|
|
+ }
|
|
|
+
|
|
|
+ public virtual int Order()
|
|
|
+ {
|
|
|
+ return int.MinValue;
|
|
|
+ }
|
|
|
+
|
|
|
+ #endregion
|
|
|
+
|
|
|
+ #region DynamicGrid
|
|
|
+
|
|
|
+ protected virtual void OnDeleteItem(TMany item)
|
|
|
+ {
|
|
|
+ if (IsAutoEntity)
|
|
|
+ {
|
|
|
+ return;
|
|
|
+ }
|
|
|
+ new Client<TMany>().Delete(item, typeof(TMany).Name + " Deleted by User");
|
|
|
+ }
|
|
|
+
|
|
|
+
|
|
|
protected override CoreTable LoadImportKeys(string[] fields)
|
|
|
{
|
|
|
var result = base.LoadImportKeys(fields);
|
|
@@ -193,25 +222,6 @@ namespace InABox.DynamicGrid
|
|
|
|
|
|
return result;
|
|
|
}
|
|
|
-
|
|
|
- public Size MinimumSize()
|
|
|
- {
|
|
|
- return new Size(400, 400);
|
|
|
- }
|
|
|
-
|
|
|
- public List<TMany> Items { get; private set; }
|
|
|
-
|
|
|
- public void LoadItems(TMany[] items)
|
|
|
- {
|
|
|
- Items.Clear();
|
|
|
- Items.AddRange(items);
|
|
|
- Refresh(false, true);
|
|
|
- }
|
|
|
- private static string GetTag()
|
|
|
- {
|
|
|
- return typeof(TOne).Name + "." + typeof(TMany).Name;
|
|
|
- }
|
|
|
-
|
|
|
public override DynamicGridColumns GenerateColumns()
|
|
|
{
|
|
|
var cols = new DynamicGridColumns();
|
|
@@ -282,7 +292,7 @@ namespace InABox.DynamicGrid
|
|
|
protected override void DeleteItems(params CoreRow[] rows)
|
|
|
{
|
|
|
var items = rows.Select(LoadItem).ToList();
|
|
|
- foreach(var item in items)
|
|
|
+ foreach (var item in items)
|
|
|
{
|
|
|
Items.Remove(item);
|
|
|
}
|
|
@@ -342,14 +352,17 @@ namespace InABox.DynamicGrid
|
|
|
|
|
|
protected override bool BeforePaste(IEnumerable<TMany> items, ClipAction action)
|
|
|
{
|
|
|
- if(action == ClipAction.Copy)
|
|
|
+ if (action == ClipAction.Copy)
|
|
|
{
|
|
|
- foreach(var item in items)
|
|
|
+ foreach (var item in items)
|
|
|
{
|
|
|
item.ID = Guid.Empty;
|
|
|
}
|
|
|
}
|
|
|
return base.BeforePaste(items, action);
|
|
|
}
|
|
|
+
|
|
|
+ #endregion
|
|
|
+
|
|
|
}
|
|
|
}
|