using System.Collections.Generic; using System.Data; using System.Linq; using System.Windows; using InABox.Core; using InABox.Wpf; using Syncfusion.UI.Xaml.Grid; namespace InABox.DynamicGrid { /* /// /// Interaction logic for DynamicMultiEditWindow.xaml /// public partial class DynamicMultiEditWindow : ThemableWindow, IDynamicEditorForm { public DynamicMultiEditWindow() { InitializeComponent(); } protected virtual void EndEdit(int row, int col, object value) { } protected virtual void DeleteRow(int row) { } private void Editor_CurrentCellEndEdit(object sender, CurrentCellEndEditEventArgs e) { //if (!(Editor.CurrentCellInfo.Column is GridComboBoxColumn)) // EndEdit(e.RowColumnIndex.RowIndex-1, e.RowColumnIndex.ColumnIndex, null); } private void OK_Click(object sender, RoutedEventArgs e) { DialogResult = true; Close(); } private void Cancel_Click(object sender, RoutedEventArgs e) { DialogResult = false; Close(); } private void CurrentCellActivated(object sender, CurrentCellActivatedEventArgs args) { //Skip the selection when it is moved to next row on adding new row.        //bool needToMove = (Editor.IsAddNewIndex(args.PreviousRowColumnIndex.RowIndex) // //&& !Editor.IsAddNewIndex(args.CurrentRowColumnIndex.RowIndex) // && (args.ActivationTrigger == ActivationTrigger.Keyboard) // && (Keyboard.IsKeyDown(Key.Enter) || Keyboard.IsKeyDown(Key.Tab))); //if (needToMove) //{ // Dispatcher.BeginInvoke( // new Action( // () => // { // Editor.MoveCurrentCell // ( // new Syncfusion.UI.Xaml.ScrollAxis.RowColumnIndex // ( // args.PreviousRowColumnIndex.RowIndex-1, // args.CurrentRowColumnIndex.ColumnIndex // ) // ); // } // ) // ); //} } private void Delete_Click(object sender, RoutedEventArgs e) { DeleteRow(Editor.CurrentCellInfo.RowIndex); } private void Editor_CurrentCellValueChanged(object sender, CurrentCellValueChangedEventArgs e) { //EndEdit(e.RowColumnIndex.RowIndex - 1, e.RowColumnIndex.ColumnIndex); } private void Editor_CurrentCellDropDownSelectionChanged(object sender, CurrentCellDropDownSelectionChangedEventArgs e) { //EndEdit(e.RowColumnIndex.RowIndex - 1, e.RowColumnIndex.ColumnIndex, (e.SelectedItem as DataRowView)["ID"]); } }*/ /*public class DynamicEditWindow : DynamicMultiEditWindow where T : BaseObject, new() { private CoreTable _data; private readonly DataTable table = new(); private readonly Dictionary updates = new(); public T[] Updates => updates.Values.ToArray(); public event OnCustomiseColumns? OnCustomiseColumns; public event OnGetEditor? OnGetEditor; public event OnCreateItem? OnCreateItem; public event OnGetEditorSequence? OnGetSequence; private decimal GetSequence(DynamicGridColumn column) { if (OnGetSequence != null) return OnGetSequence.Invoke(column); return 999M; } public void Load(CoreTable data) { _data = data; var dgcs = OnCustomiseColumns?.Invoke(this, null).OrderBy(x => GetSequence(x)).ToArray(); foreach (var dgc in dgcs) { var col = data.Columns.FirstOrDefault(x => string.Equals(x.ColumnName, dgc.ColumnName)); if (col != null) table.Columns.Add(col.ColumnName, col.DataType); } foreach (var row in data.Rows) { var newrow = table.NewRow(); foreach (var col in dgcs) if (table.Columns.Contains(col.ColumnName)) newrow[col.ColumnName] = row[col.ColumnName]; table.Rows.Add(newrow); } foreach (var dgc in dgcs) try { var editor = OnGetEditor?.Invoke(dgc); if (editor != null && editor.Editable != Editable.Hidden) { GridColumn col = null; if (editor is TextBoxEditor) { col = new GridTextColumn { ColumnSizer = GridLengthUnitType.Star }; } else if (editor is CodeEditor) { col = new GridMaskColumn { Mask = ">a" }; } else if (editor is CheckBoxEditor) { col = new GridCheckBoxColumn(); } else if (editor is DateTimeEditor) { col = new GridDateTimeColumn(); } else if (editor is DateEditor) { col = new GridDateTimeColumn(); } else if (editor is TimeOfDayEditor) { col = new GridTimeSpanColumn(); } else if (editor is DurationEditor) { col = new GridTimeSpanColumn(); } else if (editor is PINEditor) { col = new GridMaskColumn { Mask = "9999" }; } // //else if (editor is CheckListEditor) // // element = new CheckListBoxEditorControl(); // //else if (editor is MemoEditor) // // element = new MemoEditorControl(); else if (editor is LookupEditor || editor is EnumLookupEditor || editor is ComboLookupEditor) { var values = (editor as ILookupEditor)?.Values(dgc.ColumnName)?.ToDataTable()?.AsDataView(); col = new GridComboBoxColumn { DisplayMemberPath = "Display", SelectedValuePath = "ID", ItemsSource = values }; } // //else if (editor is MiscellaneousDocumentEditor) // // element = new DocumentEditorControl(); // //else if (editor is ImageDocumentEditor) // // element = new DocumentEditorControl(); // //else if (editor is PDFDocumentEditor) // // element = new DocumentEditorControl(); else if (editor is CurrencyEditor) { col = new GridCurrencyColumn(); } else if (editor is DoubleEditor) { col = new GridNumericColumn { ParsingMode = ParseMode.Double }; } else if (editor is IntegerEditor) { col = new GridNumericColumn { ParsingMode = ParseMode.Int }; } //else if (editor is InABox.Core.ScriptEditor) // element = new ScriptEditorControl(); //else if (editor is PopupEditor) // element = new PopupEditorControl(); //else if (editor is TimestampEditor) // element = new TimestampEditorControl(); //else if (editor is ColorEditor) // element = new ColorEditorControl(); if (col != null) { col.MappingName = dgc.ColumnName; col.UseBindingValue = true; Editor.Columns.Add(col); } } } catch (Exception e) { Logger.Send(LogType.Error, "", string.Format("*** Unknown Error: {0}\n{1}", e.Message, e.StackTrace)); } } protected override void EndEdit(int row, int col, object value) { if (!updates.ContainsKey(row)) { if (row < _data.Rows.Count) updates[row] = _data.Rows[row].ToObject(); else updates[row] = OnCreateItem?.Invoke(); } object cur = updates[row]; var property = Editor.Columns[col].MappingName; var currow = Editor.View.IsAddingNew ? (Editor.View.CurrentAddItem as DataRowView).Row : table.Rows[row]; var val = value == null ? currow[property] : value; currow[property] = val; CoreUtils.SetPropertyValue(cur, property, val); } protected override void OnActivated(EventArgs e) { base.OnActivated(e); Editor.ItemsSource = table; } protected override void DeleteRow(int row) { if (Editor.IsAddNewIndex(row)) Editor.View.CancelNew(); else if (row < table.Rows.Count) table.Rows.RemoveAt(row); } }*/ }