| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135 | #define scrolling//#define newgridusing System;using System.Collections.Generic;using System.Linq.Expressions;using System.Windows;using System.Windows.Controls;using System.Windows.Media.Imaging;using InABox.Core;using Syncfusion.Data;namespace InABox.DynamicGrid;public enum DynamicGridButtonPosition{    Left,    Right}public interface IDynamicGrid{    bool IsReady { get; }    Thickness Margin { get; set; }    DynamicGridColumns MasterColumns { get; }    DynamicGridColumns VisibleColumns { get; }    DynamicActionColumns ActionColumns { get; }    IList<DynamicColumnBase> ColumnList { get; }    CoreTable Data { get; set; }    CoreRow[] SelectedRows { get; set; }    double RowHeight { get; set; }    double HeaderHeight { get; set; }    double FontSize { get; set; }    void Refresh(bool columns, bool data);    /// <summary>    /// To be called when the grid is no longer needed.    /// </summary>    /// <remarks>    ///     <b>Note:</b> There is no requirement to call this method, it just allows the grid to decide to stop loading data.    /// </remarks>    void Shutdown();    void DoChanged();    void InitialiseEditorForm(IDynamicEditorForm editor, object[] items, Func<Type, CoreTable>? pageDataHandler = null, bool preloadPages = false);    bool EditItems(object[] items, Func<Type, CoreTable?>? PageDataHandler = null, bool PreloadPages = false);    //bool DirectEdit(CoreTable data);    event OnFilterRecord OnFilterRecord;    event OnCreateItem OnCreateItem;    event OnDoubleClick? OnDoubleClick;    delegate void ReconfigureEvent(DynamicGridOptions options);    event ReconfigureEvent? OnReconfigure;    public abstract void Reconfigure();    /// <summary>    /// Add <paramref name="onReconfigure"/> to <see cref="OnReconfigure"/>, and then call <see cref="Reconfigure"/>.    /// </summary>    /// <remarks>    /// Probably should only be called once per grid, otherwise there will be multiple event handlers bound.<br/>    /// If you want to reconfigure without specifiying    /// a new reconfigure event, use <see cref="Reconfigure"/>.    /// </remarks>    /// <param name="onReconfigure"></param>    public void Reconfigure(ReconfigureEvent onReconfigure);    public DynamicGridOptions Options { get; }    void AddVisualFilter(string column, string value, FilterType filtertype = FilterType.Contains);    Button AddButton(string? caption, BitmapImage? image, string? tooltip, DynamicGridButtonClickEvent action, DynamicGridButtonPosition position = DynamicGridButtonPosition.Left);    Button AddButton(string? caption, BitmapImage? image, DynamicGridButtonClickEvent action, DynamicGridButtonPosition position = DynamicGridButtonPosition.Left);    void UpdateButton(Button button, BitmapImage? image, string? text, string? tooltip = null);    event OnDefineFilter OnDefineFilter;    event OnPrintData OnPrintData;    event BeforeRefreshEventHandler BeforeRefresh;        event AfterRefreshEventHandler AfterRefresh;        event EntitySaveEvent? OnAfterSave;    event EntitySaveEvent? OnBeforeSave;    int DesiredWidth();    void AddHiddenColumn(string column);    void UpdateRow<TType>(CoreRow row, string column, TType value, bool refresh = true);    void UpdateRow<T, TType>(CoreRow row, Expression<Func<T, TType>> column, TType value, bool refresh = true);    void InvalidateRow(CoreRow row);    object? GetData(CoreRow row, DynamicColumnBase column);    IDynamicGridColumnFilter? GetColumnFilter(DynamicColumnBase column);}public interface IDynamicGrid<T> : IDynamicGrid    where T : BaseObject, new(){    T CreateItem();    T LoadItem(CoreRow row);    void SaveItem(T item);    void SaveItems(IEnumerable<T> items);    void DeleteItems(CoreRow[] rows);    bool EditItems(T[] items, Func<Type, CoreTable?>? PageDataHandler = null, bool PreloadPages = false);    /// <summary>    /// Update/sync the data in <paramref name="rows"/> with that of <paramref name="objs"/>.    /// </summary>    void UpdateRows(CoreRow[] rows, T[] objs, bool invalidateRows = true);}
 |