1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768 |
- using System;
- using System.Collections.Generic;
- using System.Linq;
- using System.Reflection;
- using InABox.Clients;
- using InABox.Core;
- namespace InABox.DynamicGrid
- {
- public class DynamicManyToManyDataGrid<TManyToMany, TThis> : DynamicManyToManyGrid<TManyToMany, TThis>
- where TManyToMany : Entity, IPersistent, IRemotable, new() where TThis : Entity, IRemotable, IPersistent, new()
- {
- private readonly PropertyInfo prop;
- public DynamicManyToManyDataGrid()
- {
- prop = CoreUtils.PropertyList(typeof(TManyToMany), p => p.PropertyType.IsSubclassOf(typeof(EntityLink<TThis>))).FirstOrDefault();
- }
- public Guid ID { get; set; }
- protected override Guid[] CurrentGuids()
- {
- var result = new List<Guid>();
- foreach (var row in Data.Rows)
- {
- var guid = row.Get<Guid>(otherproperty.Name + ".ID");
- result.Add(guid);
- }
- return result.ToArray();
- }
- protected override TManyToMany CreateItem()
- {
- var result = base.CreateItem();
- var link = (IEntityLink)prop.GetValue(result);
- link.ID = ID;
- return result;
- }
- protected override void Reload(Filters<TManyToMany> criteria, Columns<TManyToMany> columns, ref SortOrder<TManyToMany> sort,
- Action<CoreTable, Exception> action)
- {
- var expr = CoreUtils.CreateLambdaExpression<TManyToMany>(prop.Name + ".ID");
- criteria.Add(new Filter<TManyToMany>(expr).IsEqualTo(ID));
- new Client<TManyToMany>().Query(criteria.Combine(), columns, sort, action);
- }
- protected override TManyToMany LoadItem(CoreRow row)
- {
- return new Client<TManyToMany>().Load(new Filter<TManyToMany>(x => x.ID).IsEqualTo(row.Get<TManyToMany, Guid>(x => x.ID)))
- .FirstOrDefault();
- }
- protected override void DeleteItems(params CoreRow[] rows)
- {
- var items = LoadItems(rows);
- foreach (var item in items)
- new Client<TManyToMany>().Delete(item, "");
- }
- protected override void SaveItem(TManyToMany item)
- {
- new Client<TManyToMany>().Save(item, "");
- }
- }
- }
|