using FastReport; using InABox.Core; using InABox.Database; using InABox.DynamicGrid; using InABox.WPF; using System; using System.Collections.Generic; using System.Linq; using System.Reflection; using System.Text; using System.Threading; 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); ActionColumns.Add(new DynamicImageColumn(Properties.Resources.view.AsBitmapImage(), ViewClick)); } protected override void DoReconfigure(DynamicGridOptions options) { options.Clear(); options.EditRows = true; } protected override DynamicGridColumns LoadColumns() { var result = base.LoadColumns(); var deletionColumns = DeletionData.DeletionColumns(); var columns = new DynamicGridColumns(); foreach(var column in deletionColumns) { 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, CancellationToken token, Action action) { try { action(Table, null); } catch(Exception e) { action(null, e); } } public override T LoadItem(CoreRow row) { return Table.Rows[row.Index].ToObject(); } private bool ViewClick(CoreRow? row) { if(row is null) return false; ViewItem(LoadItem(row)); return false; } private void ViewItem(T item) { var editor = new DynamicEditorForm(typeof(T)) { ReadOnly = true }; editor.OnFormCustomiseEditor += Editor_OnFormCustomiseEditor; editor.OnDefineLookups += sender => DefineLookups(sender, Array.Empty()); editor.Items = new BaseObject[] { item }; editor.ShowDialog(); } private Columns? _deletionColumns; private void Editor_OnFormCustomiseEditor(IDynamicEditorForm sender, object[] items, DynamicGridColumn column, BaseEditor editor) { _deletionColumns ??= DeletionData.DeletionColumns(); if(!_deletionColumns.Any(y => y.Property == column.ColumnName)) { editor.Editable = Editable.Hidden; } } protected override void DoEdit() { if (!SelectedRows.Any()) return; ViewItem(LoadItem(SelectedRows.First())); } public override void SaveItem(T item) { // No saving allowed } public override void DeleteItems(params CoreRow[] rows) { // No deleting allowed } }