using FastReport; using InABox.Clients; using InABox.Core; using InABox.Database; using InABox.DynamicGrid; using System; using System.Collections.Generic; using System.Linq; using System.Reflection; using System.Text; using System.Threading.Tasks; using System.Windows.Forms; namespace PRSServer.Forms { class DeletedEntityGrid : DynamicGrid, ISpecificGrid where T : Entity, new() { private CoreTable Table { get; set; } public DeletedEntityGrid(CoreTable table) { Table = table; HiddenColumns.Add(x => x.ID); Options.BeginUpdate().Clear() .AddRange(DynamicGridOption.EditRows).EndUpdate(); } protected override DynamicGridColumns LoadColumns() { var result = base.LoadColumns(); var deletionColumns = DeletionData.DeletionColumns(); var columns = new DynamicGridColumns(); foreach(var column in deletionColumns.GetColumns()) { var resultColumn = result.FirstOrDefault(x => x.ColumnName == column.Property); if(resultColumn is not null) { columns.Add(resultColumn); } } if(columns.Count == 0) { columns.Add(x => x.ID, 0, "ID", "", Alignment.MiddleLeft); } return columns; } protected override void Reload(Filters criteria, Columns columns, ref SortOrder? sort, Action action) { try { action(Table, null); } catch(Exception e) { action(null, e); } } protected override T LoadItem(CoreRow row) { return Table.Rows[row.Index].ToObject(); } protected override void DoEdit() { if (!SelectedRows.Any()) return; var item = LoadItem(SelectedRows.First()); var editor = new DynamicEditorForm(typeof(T)); editor.ReadOnly = true; editor.OnCustomiseColumns += Editor_OnCustomiseColumns; editor.OnDefineLookups += sender => DefineLookups(sender, Array.Empty()); editor.Items = new BaseObject[] { item }; editor.ShowDialog(); } private DynamicGridColumns Editor_OnCustomiseColumns(object sender, DynamicGridColumns? source) { var columns = new DynamicGridColumns(); columns.ExtractColumns(typeof(T)); var deletionColumns = DeletionData.DeletionColumns(); columns.RemoveAll(x => !deletionColumns.GetColumns().Any(y => y.Property == x.ColumnName)); return columns; } public override void SaveItem(T item) { // No saving allowed } protected override void DeleteItems(params CoreRow[] rows) { // No deleting allowed } } }