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.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 Init() { } protected override void DoReconfigure(FluentList options) { 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(); } 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.OnCustomiseColumns += Editor_OnCustomiseColumns; editor.OnDefineLookups += sender => DefineLookups(sender, Array.Empty()); editor.Items = new BaseObject[] { item }; editor.ShowDialog(); } protected override void DoEdit() { if (!SelectedRows.Any()) return; ViewItem(LoadItem(SelectedRows.First())); } private void Editor_OnCustomiseColumns(object sender, DynamicGridColumns columns) { columns.Clear(); columns.ExtractColumns(typeof(T)); var deletionColumns = DeletionData.DeletionColumns(); columns.RemoveAll(x => !deletionColumns.GetColumns().Any(y => y.Property == x.ColumnName)); } public override void SaveItem(T item) { // No saving allowed } protected override void DeleteItems(params CoreRow[] rows) { // No deleting allowed } } }