|
@@ -94,7 +94,7 @@ namespace InABox.DynamicGrid
|
|
|
|
|
|
private void CalculateAggregate(IEnumerable items, string property, PropertyDescriptor args)
|
|
|
{
|
|
|
- if(items is IEnumerable<DataRowView> rows)
|
|
|
+ if (items is IEnumerable<DataRowView> rows)
|
|
|
{
|
|
|
if (string.Equals(args.Name, "Count"))
|
|
|
{
|
|
@@ -177,7 +177,7 @@ namespace InABox.DynamicGrid
|
|
|
|
|
|
public override DependencyProperty ForegroundProperty => Control.ForegroundProperty;
|
|
|
}
|
|
|
-
|
|
|
+
|
|
|
public class DynamicGridCellStyle : DynamicGridStyle<Control>
|
|
|
{
|
|
|
public DynamicGridCellStyle() : base(null)
|
|
@@ -247,11 +247,11 @@ namespace InABox.DynamicGrid
|
|
|
}
|
|
|
}
|
|
|
|
|
|
-// Used to render boolean columns (the default "false" value shows what appears to be an intermediate state, which is ugly
|
|
|
-// This should show nothing for false, and a tick in a box for true
|
|
|
+ // Used to render boolean columns (the default "false" value shows what appears to be an intermediate state, which is ugly
|
|
|
+ // This should show nothing for false, and a tick in a box for true
|
|
|
public class BoolToImageConverter : IValueConverter
|
|
|
{
|
|
|
- private static readonly BitmapImage tick =Wpf.Resources.Bullet_Tick.AsBitmapImage();
|
|
|
+ private static readonly BitmapImage tick = Wpf.Resources.Bullet_Tick.AsBitmapImage();
|
|
|
|
|
|
public object? Convert(object value, Type targetType, object parameter, CultureInfo culture)
|
|
|
{
|
|
@@ -306,7 +306,7 @@ namespace InABox.DynamicGrid
|
|
|
{
|
|
|
object? IValueConverter.Convert(object value, Type targetType, object parameter, CultureInfo culture)
|
|
|
{
|
|
|
- if(value is string[] strArray)
|
|
|
+ if (value is string[] strArray)
|
|
|
{
|
|
|
return string.Join("\n", strArray);
|
|
|
}
|
|
@@ -374,9 +374,9 @@ namespace InABox.DynamicGrid
|
|
|
|
|
|
private readonly Grid Layout;
|
|
|
private readonly Label Loading;
|
|
|
-
|
|
|
+
|
|
|
private DoubleAnimation LoadingFader = new DoubleAnimation(1d, 0.2d, new Duration(TimeSpan.FromSeconds(2))) { AutoReverse = true };
|
|
|
-
|
|
|
+
|
|
|
protected Dictionary<string, CoreTable> Lookups = new();
|
|
|
//private readonly Button MultiEdit;
|
|
|
private readonly Button Paste;
|
|
@@ -393,7 +393,7 @@ namespace InABox.DynamicGrid
|
|
|
|
|
|
#region Events
|
|
|
|
|
|
- public event SelectItemHandler? OnSelectItem;
|
|
|
+ public event SelectItemHandler? OnSelectItem;
|
|
|
|
|
|
public event OnCellDoubleClick? OnCellDoubleClick;
|
|
|
|
|
@@ -413,9 +413,9 @@ namespace InABox.DynamicGrid
|
|
|
|
|
|
public override event EntitySaveEvent? OnBeforeSave;
|
|
|
public override event EntitySaveEvent? OnAfterSave;
|
|
|
-
|
|
|
+
|
|
|
#endregion
|
|
|
-
|
|
|
+
|
|
|
private DynamicGridCellStyleConverter<System.Windows.Media.Brush?> CellBackgroundConverter;
|
|
|
private DynamicGridCellStyleConverter<System.Windows.Media.Brush?> CellForegroundConverter;
|
|
|
private DynamicGridCellStyleConverter<double?> CellFontSizeConverter;
|
|
@@ -427,9 +427,9 @@ namespace InABox.DynamicGrid
|
|
|
protected virtual double? GetCellFontSize(CoreRow row, String columnname) => null;
|
|
|
protected virtual FontStyle? GetCellFontStyle(CoreRow row, String columnname) => null;
|
|
|
protected virtual FontWeight? GetCellFontWeight(CoreRow row, String columnname) => null;
|
|
|
-
|
|
|
|
|
|
-
|
|
|
+
|
|
|
+
|
|
|
public DynamicGrid() : base()
|
|
|
{
|
|
|
IsReady = false;
|
|
@@ -445,7 +445,7 @@ namespace InABox.DynamicGrid
|
|
|
MasterColumns = new DynamicGridColumns();
|
|
|
MasterColumns.ExtractColumns(typeof(T));
|
|
|
|
|
|
- foreach(var column in LookupFactory.RequiredColumns<T>().ColumnNames())
|
|
|
+ foreach (var column in LookupFactory.RequiredColumns<T>().ColumnNames())
|
|
|
{
|
|
|
AddHiddenColumn(column);
|
|
|
}
|
|
@@ -460,7 +460,7 @@ namespace InABox.DynamicGrid
|
|
|
ActionColumns.Add(down);
|
|
|
HiddenColumns.Add(x => (x as ISequenceable)!.Sequence);
|
|
|
}
|
|
|
-
|
|
|
+
|
|
|
CellBackgroundConverter = new DynamicGridCellStyleConverter<System.Windows.Media.Brush?>(this, GetCellBackground);
|
|
|
CellForegroundConverter = new DynamicGridCellStyleConverter<System.Windows.Media.Brush?>(this, GetCellForeground);
|
|
|
CellFontSizeConverter = new DynamicGridCellStyleConverter<double?>(this, GetCellFontSize);
|
|
@@ -497,7 +497,7 @@ namespace InABox.DynamicGrid
|
|
|
DataGrid.ColumnSizer = GridLengthUnitType.AutoLastColumnFill;
|
|
|
DataGrid.SelectionForegroundBrush = BaseDynamicGrid.SelectionForeground;
|
|
|
DataGrid.RowSelectionBrush = BaseDynamicGrid.SelectionBackground;
|
|
|
-
|
|
|
+
|
|
|
DataGrid.CurrentCellBorderThickness = new Thickness(0);
|
|
|
DataGrid.AllowFiltering = false;
|
|
|
DataGrid.EnableDataVirtualization = true;
|
|
@@ -552,11 +552,11 @@ namespace InABox.DynamicGrid
|
|
|
Loading.BeginAnimation(Label.OpacityProperty, LoadingFader);
|
|
|
}
|
|
|
};
|
|
|
-
|
|
|
+
|
|
|
Help = CreateButton(Wpf.Resources.help.AsBitmapImage(Color.White));
|
|
|
Help.Margin = new Thickness(0, 2, 2, 0);
|
|
|
Help.SetValue(DockPanel.DockProperty, Dock.Right);
|
|
|
- Help.Click += (o, e) => ShowHelp(typeof(T).Name.Split('.').Last().SplitCamelCase().Replace(" ","_"));
|
|
|
+ Help.Click += (o, e) => ShowHelp(typeof(T).Name.Split('.').Last().SplitCamelCase().Replace(" ", "_"));
|
|
|
|
|
|
Add = CreateButton(Wpf.Resources.add.AsBitmapImage(Color.White));
|
|
|
Add.Margin = new Thickness(0, 2, 2, 0);
|
|
@@ -619,7 +619,7 @@ namespace InABox.DynamicGrid
|
|
|
LeftButtonStack.Children.Add(Export);
|
|
|
LeftButtonStack.Children.Add(Import);
|
|
|
LeftButtonStack.Children.Add(ExportSpacer);
|
|
|
-
|
|
|
+
|
|
|
RightButtonStack = new StackPanel();
|
|
|
RightButtonStack.Orientation = Orientation.Horizontal;
|
|
|
RightButtonStack.SetValue(DockPanel.DockProperty, Dock.Right);
|
|
@@ -629,7 +629,7 @@ namespace InABox.DynamicGrid
|
|
|
Delete.SetValue(DockPanel.DockProperty, Dock.Right);
|
|
|
Delete.Click += Delete_Click;
|
|
|
|
|
|
- DuplicateBtn = AddButton("Duplicate",Wpf.Resources.paste.AsBitmapImage(Color.White), DoDuplicate);
|
|
|
+ DuplicateBtn = AddButton("Duplicate", Wpf.Resources.paste.AsBitmapImage(Color.White), DoDuplicate);
|
|
|
|
|
|
Count = new Label();
|
|
|
Count.Height = 30;
|
|
@@ -674,7 +674,7 @@ namespace InABox.DynamicGrid
|
|
|
if (_header is not null && Layout.Children.Contains(_header))
|
|
|
Layout.Children.Remove(_header);
|
|
|
_header = value;
|
|
|
- if(_header is not null)
|
|
|
+ if (_header is not null)
|
|
|
{
|
|
|
_header.SetValue(Grid.RowProperty, 0);
|
|
|
_header.SetValue(Grid.ColumnProperty, 0);
|
|
@@ -712,7 +712,7 @@ namespace InABox.DynamicGrid
|
|
|
|
|
|
Add.Visibility = Options.Contains(DynamicGridOption.AddRows) ? Visibility.Visible : Visibility.Collapsed;
|
|
|
Edit.Visibility = Options.Contains(DynamicGridOption.EditRows) ? Visibility.Visible : Visibility.Collapsed;
|
|
|
-
|
|
|
+
|
|
|
EditSpacer.Visibility = Options.Contains(DynamicGridOption.AddRows) || Options.Contains(DynamicGridOption.EditRows)
|
|
|
? Visibility.Visible
|
|
|
: Visibility.Collapsed;
|
|
@@ -745,7 +745,7 @@ namespace InABox.DynamicGrid
|
|
|
DataGrid.AllowDraggingRows = true;
|
|
|
DataGrid.RowDragDropController.DragStart += RowDragDropController_DragStart;
|
|
|
}
|
|
|
- else if(DataGrid.AllowDraggingRows)
|
|
|
+ else if (DataGrid.AllowDraggingRows)
|
|
|
{
|
|
|
DataGrid.AllowDraggingRows = false;
|
|
|
DataGrid.RowDragDropController.DragStart -= RowDragDropController_DragStart;
|
|
@@ -775,7 +775,7 @@ namespace InABox.DynamicGrid
|
|
|
{
|
|
|
return new DynamicGridRowStyleSelector<T, DynamicGridRowStyle>();
|
|
|
}
|
|
|
-
|
|
|
+
|
|
|
protected override DynamicGridStyle GetRowStyle(CoreRow row, DynamicGridStyle style)
|
|
|
{
|
|
|
var result = base.GetRowStyle(row, style);
|
|
@@ -864,7 +864,7 @@ namespace InABox.DynamicGrid
|
|
|
var column = ColumnList[col] as DynamicActionColumn;
|
|
|
if (column != null)
|
|
|
e.ItemsSource = column.Filters.Select(x => new FilterElement
|
|
|
- { DisplayText = x, ActualValue = x, IsSelected = column.SelectedFilters == null || column.SelectedFilters.Contains(x) });
|
|
|
+ { DisplayText = x, ActualValue = x, IsSelected = column.SelectedFilters == null || column.SelectedFilters.Contains(x) });
|
|
|
}
|
|
|
|
|
|
private CoreRow? GetRowFromIndex(int rowIndex)
|
|
@@ -972,7 +972,7 @@ namespace InABox.DynamicGrid
|
|
|
return;
|
|
|
if (e.Column is GridCheckBoxColumn)
|
|
|
inplaceeditor = LoadItem(Data.Rows[e.RowColumnIndex.RowIndex - headerrows]);
|
|
|
- if(inplaceeditor is not null)
|
|
|
+ if (inplaceeditor is not null)
|
|
|
UpdateData(inplaceeditor, e.RowColumnIndex.ColumnIndex);
|
|
|
if (e.Column is GridCheckBoxColumn)
|
|
|
inplaceeditor = null;
|
|
@@ -1010,7 +1010,7 @@ namespace InABox.DynamicGrid
|
|
|
return;
|
|
|
if (inplaceeditor is not null && bChanged) UpdateData(inplaceeditor, e.RowColumnIndex.ColumnIndex);
|
|
|
bChanged = false;
|
|
|
- inplaceeditor = null;
|
|
|
+ inplaceeditor = null;
|
|
|
DataGridItems.AcceptChanges();
|
|
|
}
|
|
|
|
|
@@ -1034,8 +1034,8 @@ namespace InABox.DynamicGrid
|
|
|
if (DataGrid.Columns[colname] is GridComboBoxColumn combo)
|
|
|
{
|
|
|
|
|
|
- var prefix = String.Join(".",corecol.Split(".").Reverse().Skip(1).Reverse());
|
|
|
- var field = corecol.Split(".").Last();
|
|
|
+ var prefix = String.Join(".", corecol.Split(".").Reverse().Skip(1).Reverse());
|
|
|
+ var field = corecol.Split(".").Last();
|
|
|
var lookups = (combo.ItemsSource as DataView)?.Table;
|
|
|
if (lookups != null)
|
|
|
{
|
|
@@ -1044,8 +1044,8 @@ namespace InABox.DynamicGrid
|
|
|
{
|
|
|
foreach (DataColumn lookupcol in lookups.Columns)
|
|
|
{
|
|
|
- var prop = String.IsNullOrWhiteSpace(prefix)
|
|
|
- ? lookupcol.ColumnName
|
|
|
+ var prop = String.IsNullOrWhiteSpace(prefix)
|
|
|
+ ? lookupcol.ColumnName
|
|
|
: String.Join(".", new String[] { prefix, lookupcol.ColumnName });
|
|
|
DynamicGridUtils.UpdateEditorValue(new BaseObject[] { inplaceeditor }, prop, lookuprow[lookupcol], changes);
|
|
|
//CoreUtils.SetPropertyValue(obj, prop, lookuprow[lookupcol]);
|
|
@@ -1055,7 +1055,7 @@ namespace InABox.DynamicGrid
|
|
|
}
|
|
|
else
|
|
|
DynamicGridUtils.UpdateEditorValue(new BaseObject[] { inplaceeditor }, corecol, value, changes);
|
|
|
- //CoreUtils.SetPropertyValue(obj, corecol, value);
|
|
|
+ //CoreUtils.SetPropertyValue(obj, corecol, value);
|
|
|
|
|
|
|
|
|
SaveItem(obj);
|
|
@@ -1069,9 +1069,9 @@ namespace InABox.DynamicGrid
|
|
|
row[scol] = corerow[column.ColumnName] ?? DBNull.Value;
|
|
|
}
|
|
|
|
|
|
- for (var i = 0; i < ActionColumns.Count; i++)
|
|
|
+ for (var i = 0; i < ActionColumns.Count; i++)
|
|
|
row[string.Format("ActionColumn{0}", i)] = ActionColumns[i].Data(corerow);
|
|
|
-
|
|
|
+
|
|
|
}
|
|
|
|
|
|
private void DataGrid_QueryRowHeight(object? sender, QueryRowHeightEventArgs e)
|
|
@@ -1341,7 +1341,7 @@ namespace InABox.DynamicGrid
|
|
|
{
|
|
|
StopTimer();
|
|
|
|
|
|
- if(OnCellDoubleClick is not null && ColumnList[e.RowColumnIndex.ColumnIndex] is DynamicGridColumn column)
|
|
|
+ if (OnCellDoubleClick is not null && ColumnList[e.RowColumnIndex.ColumnIndex] is DynamicGridColumn column)
|
|
|
{
|
|
|
var row = GetRowFromIndex(e.RowColumnIndex.RowIndex);
|
|
|
var args = new DynamicGridCellClickEventArgs(row, column);
|
|
@@ -1419,8 +1419,8 @@ namespace InABox.DynamicGrid
|
|
|
var fAvailWidth = width;
|
|
|
|
|
|
//if (Data.Rows.Count * (DataGrid.RowHeight + 1) + DataGrid.HeaderRowHeight > height + 0.5F)
|
|
|
- if(height < DataGrid.AutoScroller.VScrollBar.Maximum)
|
|
|
- fAvailWidth -= (SystemParameters.VerticalScrollBarWidth+0.75);
|
|
|
+ if (height < DataGrid.AutoScroller.VScrollBar.Maximum)
|
|
|
+ fAvailWidth -= (SystemParameters.VerticalScrollBarWidth + 0.75);
|
|
|
|
|
|
|
|
|
double fCurWidth = 0.0F;
|
|
@@ -1477,7 +1477,7 @@ namespace InABox.DynamicGrid
|
|
|
//String sColName = String.Format("ActionColumn{0}{1}", i, position == DynamicActionColumnPosition.Start ? "L" : "R");
|
|
|
var sColName = string.Format("ActionColumn{0}", i);
|
|
|
gridRowResizingOptions.ExcludeColumns.Add(sColName);
|
|
|
-
|
|
|
+
|
|
|
if (column is DynamicImageColumn imgcol)
|
|
|
{
|
|
|
var newcol = new GridImageColumn();
|
|
@@ -1490,16 +1490,16 @@ namespace InABox.DynamicGrid
|
|
|
newcol.ColumnSizer = GridLengthUnitType.None;
|
|
|
newcol.HeaderText = column.HeaderText;
|
|
|
newcol.AllowSorting = false;
|
|
|
-
|
|
|
+
|
|
|
ApplyFilterStyle(newcol, true, true);
|
|
|
-
|
|
|
+
|
|
|
newcol.ShowToolTip = column.ToolTip != null;
|
|
|
-
|
|
|
+
|
|
|
var style = new Style();
|
|
|
style.Setters.Add(new Setter(BackgroundProperty, new SolidColorBrush(Colors.Gainsboro)));
|
|
|
style.Setters.Add(new Setter(IsEnabledProperty, false));
|
|
|
newcol.FilterRowCellStyle = style;
|
|
|
-
|
|
|
+
|
|
|
var headstyle = new Style(typeof(GridHeaderCellControl));
|
|
|
headstyle.Setters.Add(new Setter(BackgroundProperty, new SolidColorBrush(Colors.Gainsboro)));
|
|
|
headstyle.Setters.Add(new Setter(ForegroundProperty, new SolidColorBrush(Colors.Black)));
|
|
@@ -1538,11 +1538,11 @@ namespace InABox.DynamicGrid
|
|
|
}
|
|
|
else if (column is DynamicTextColumn txtCol)
|
|
|
{
|
|
|
-
|
|
|
+
|
|
|
var newcol = new GridTextColumn();
|
|
|
gridRowResizingOptions.ExcludeColumns.Add(sColName);
|
|
|
newcol.TextWrapping = TextWrapping.NoWrap;
|
|
|
-
|
|
|
+
|
|
|
newcol.TextAlignment = txtCol.Alignment == Alignment.NotSet
|
|
|
? TextAlignment.Left
|
|
|
: txtCol.Alignment == Alignment.BottomLeft || txtCol.Alignment == Alignment.MiddleLeft ||
|
|
@@ -1552,7 +1552,7 @@ namespace InABox.DynamicGrid
|
|
|
txtCol.Alignment == Alignment.TopCenter
|
|
|
? TextAlignment.Center
|
|
|
: TextAlignment.Right;
|
|
|
-
|
|
|
+
|
|
|
newcol.AllowEditing = false;
|
|
|
newcol.UpdateTrigger = UpdateSourceTrigger.PropertyChanged;
|
|
|
newcol.MappingName = sColName;
|
|
@@ -1563,12 +1563,12 @@ namespace InABox.DynamicGrid
|
|
|
newcol.AllowSorting = false;
|
|
|
newcol.FilterRowOptionsVisibility = Visibility.Collapsed;
|
|
|
newcol.ShowToolTip = column.ToolTip != null;
|
|
|
-
|
|
|
+
|
|
|
var style = new Style();
|
|
|
style.Setters.Add(new Setter(BackgroundProperty, new SolidColorBrush(Colors.Gainsboro)));
|
|
|
style.Setters.Add(new Setter(IsEnabledProperty, false));
|
|
|
newcol.FilterRowCellStyle = style;
|
|
|
-
|
|
|
+
|
|
|
var headstyle = new Style(typeof(GridHeaderCellControl));
|
|
|
headstyle.Setters.Add(new Setter(BackgroundProperty, new SolidColorBrush(Colors.Gainsboro)));
|
|
|
headstyle.Setters.Add(new Setter(ForegroundProperty, new SolidColorBrush(Colors.Black)));
|
|
@@ -1585,10 +1585,10 @@ namespace InABox.DynamicGrid
|
|
|
newcol.HeaderStyle = headstyle;
|
|
|
|
|
|
DataGrid.Columns.Add(newcol);
|
|
|
- ColumnList.Add(column);
|
|
|
+ ColumnList.Add(column);
|
|
|
}
|
|
|
|
|
|
-
|
|
|
+
|
|
|
}
|
|
|
}
|
|
|
}
|
|
@@ -1597,7 +1597,7 @@ namespace InABox.DynamicGrid
|
|
|
{
|
|
|
return !IsSequenced;
|
|
|
}
|
|
|
-
|
|
|
+
|
|
|
private void ReloadColumns()
|
|
|
{
|
|
|
|
|
@@ -1617,7 +1617,7 @@ namespace InABox.DynamicGrid
|
|
|
gridRowResizingOptions.ExcludeColumns = new List<string>();
|
|
|
|
|
|
LoadActionColumns(DynamicActionColumnPosition.Start);
|
|
|
-
|
|
|
+
|
|
|
foreach (var column in VisibleColumns)
|
|
|
{
|
|
|
var filtering = true;
|
|
@@ -1866,14 +1866,14 @@ namespace InABox.DynamicGrid
|
|
|
}
|
|
|
else
|
|
|
{
|
|
|
- cellstyle.Setters.Add(new Setter(BackgroundProperty, new Binding() { Path=new PropertyPath("."), Converter = CellBackgroundConverter, ConverterParameter = column.ColumnName}));
|
|
|
- cellstyle.Setters.Add(new Setter(ForegroundProperty, new Binding() { Converter = CellForegroundConverter, ConverterParameter = column.ColumnName}));
|
|
|
- cellstyle.Setters.Add(new Setter(FontSizeProperty, new Binding() { Converter = CellFontSizeConverter, ConverterParameter = column.ColumnName}));
|
|
|
- cellstyle.Setters.Add(new Setter(FontStyleProperty, new Binding() { Converter = CellFontStyleConverter, ConverterParameter = column.ColumnName}));
|
|
|
- cellstyle.Setters.Add(new Setter(FontWeightProperty, new Binding() { Converter = CellFontWeightConverter, ConverterParameter = column.ColumnName}));
|
|
|
+ cellstyle.Setters.Add(new Setter(BackgroundProperty, new Binding() { Path = new PropertyPath("."), Converter = CellBackgroundConverter, ConverterParameter = column.ColumnName }));
|
|
|
+ cellstyle.Setters.Add(new Setter(ForegroundProperty, new Binding() { Converter = CellForegroundConverter, ConverterParameter = column.ColumnName }));
|
|
|
+ cellstyle.Setters.Add(new Setter(FontSizeProperty, new Binding() { Converter = CellFontSizeConverter, ConverterParameter = column.ColumnName }));
|
|
|
+ cellstyle.Setters.Add(new Setter(FontStyleProperty, new Binding() { Converter = CellFontStyleConverter, ConverterParameter = column.ColumnName }));
|
|
|
+ cellstyle.Setters.Add(new Setter(FontWeightProperty, new Binding() { Converter = CellFontWeightConverter, ConverterParameter = column.ColumnName }));
|
|
|
newcol.CellStyle = cellstyle;
|
|
|
}
|
|
|
-
|
|
|
+
|
|
|
|
|
|
DataGrid.Columns.Add(newcol);
|
|
|
ColumnList.Add(column);
|
|
@@ -1897,7 +1897,7 @@ namespace InABox.DynamicGrid
|
|
|
|
|
|
DataGrid.Columns.Resume();
|
|
|
DataGrid.RefreshColumns();
|
|
|
-
|
|
|
+
|
|
|
foreach (var key in _filterpredicates.Keys.ToArray())
|
|
|
if (DataGrid.Columns.Any(x => string.Equals(x.MappingName, key)))
|
|
|
{
|
|
@@ -1927,8 +1927,8 @@ namespace InABox.DynamicGrid
|
|
|
column.FilterRowCondition = FilterRowCondition.Contains;
|
|
|
column.FilterRowOptionsVisibility = Visibility.Collapsed;
|
|
|
column.AllowBlankFilters = true;
|
|
|
- column.AllowSorting = isactioncolumn
|
|
|
- ? false
|
|
|
+ column.AllowSorting = isactioncolumn
|
|
|
+ ? false
|
|
|
: CanSort();
|
|
|
}
|
|
|
else
|
|
@@ -1964,13 +1964,13 @@ namespace InABox.DynamicGrid
|
|
|
|
|
|
public override void Refresh(bool reloadcolumns, bool reloaddata)
|
|
|
{
|
|
|
-
|
|
|
+
|
|
|
if (bRefreshing)
|
|
|
return;
|
|
|
|
|
|
if (!DoBeforeRefresh())
|
|
|
return;
|
|
|
-
|
|
|
+
|
|
|
DataGrid.SelectionForegroundBrush = BaseDynamicGrid.SelectionForeground;
|
|
|
DataGrid.RowSelectionBrush = BaseDynamicGrid.SelectionBackground;
|
|
|
|
|
@@ -1978,7 +1978,7 @@ namespace InABox.DynamicGrid
|
|
|
|
|
|
Loading.Visibility = Visibility.Visible;
|
|
|
Loading.BeginAnimation(Label.OpacityProperty, LoadingFader);
|
|
|
-
|
|
|
+
|
|
|
bRefreshing = true;
|
|
|
|
|
|
// Yo, please don't remove this.
|
|
@@ -1986,10 +1986,10 @@ namespace InABox.DynamicGrid
|
|
|
// for no reason. I think perhaps the image columns were trying to refer to data that didn't exist anymore when calling DataGrid.Columns.Refresh(),
|
|
|
// and thus some mega problems (perhaps even exceptions within Syncfusion) were occurring, and this seems to fix it.
|
|
|
// I don't pretend to know why it works; this is probably the strangest problem I've ever come across.
|
|
|
- if(reloadcolumns)
|
|
|
+ if (reloadcolumns)
|
|
|
DataGrid.ItemsSource = null;
|
|
|
-
|
|
|
- if (reloadcolumns)
|
|
|
+
|
|
|
+ if (reloadcolumns)
|
|
|
ReloadColumns();
|
|
|
|
|
|
if (reloaddata)
|
|
@@ -2018,7 +2018,7 @@ namespace InABox.DynamicGrid
|
|
|
Dispatcher.Invoke(() =>
|
|
|
{
|
|
|
MessageBox.Show(String.Format("Error: {0}", exception.Message));
|
|
|
- });
|
|
|
+ });
|
|
|
}
|
|
|
else if (table is not null)
|
|
|
{
|
|
@@ -2040,18 +2040,18 @@ namespace InABox.DynamicGrid
|
|
|
DoAfterRefresh();
|
|
|
bRefreshing = false;
|
|
|
IsReady = true;
|
|
|
-
|
|
|
+
|
|
|
Loading.BeginAnimation(Label.OpacityProperty, null);
|
|
|
Loading.Visibility = Visibility.Collapsed;
|
|
|
}
|
|
|
-
|
|
|
+
|
|
|
if (cursor != null)
|
|
|
{
|
|
|
cursor.Dispose();
|
|
|
cursor = null;
|
|
|
}
|
|
|
}
|
|
|
-
|
|
|
+
|
|
|
protected override bool OnBeforeRefresh()
|
|
|
{
|
|
|
return true;
|
|
@@ -2069,7 +2069,7 @@ namespace InABox.DynamicGrid
|
|
|
|
|
|
return result;
|
|
|
}
|
|
|
-
|
|
|
+
|
|
|
protected override void OnAfterRefresh()
|
|
|
{
|
|
|
}
|
|
@@ -2079,7 +2079,7 @@ namespace InABox.DynamicGrid
|
|
|
OnAfterRefresh();
|
|
|
NotifyAfterRefresh(new AfterRefreshEventArgs());
|
|
|
}
|
|
|
-
|
|
|
+
|
|
|
public Columns<T> DataColumns()
|
|
|
{
|
|
|
var columns = new Columns<T>();
|
|
@@ -2218,9 +2218,9 @@ namespace InABox.DynamicGrid
|
|
|
}
|
|
|
|
|
|
for (var i = 0; i < ActionColumns.Count; i++)
|
|
|
- result.Columns.Add(string.Format("ActionColumn{0}", i),
|
|
|
- ActionColumns[i] is DynamicImageColumn
|
|
|
- ? typeof(BitmapImage)
|
|
|
+ result.Columns.Add(string.Format("ActionColumn{0}", i),
|
|
|
+ ActionColumns[i] is DynamicImageColumn
|
|
|
+ ? typeof(BitmapImage)
|
|
|
: typeof(String)
|
|
|
);
|
|
|
|
|
@@ -2233,7 +2233,7 @@ namespace InABox.DynamicGrid
|
|
|
|
|
|
if (RowStyleSelector != null)
|
|
|
RowStyleSelector.Data = Data;
|
|
|
-
|
|
|
+
|
|
|
//int rowIndex = DataGrid.SelectionController.CurrentCellManager.CurrentRowColumnIndex.RowIndex;
|
|
|
//int columnIndex = DataGrid.SelectionController.CurrentCellManager.CurrentRowColumnIndex.ColumnIndex;
|
|
|
//int scrollRowIndex = DataGrid.GetVisualContainer().ScrollRows.LastBodyVisibleLineIndex;
|
|
@@ -2318,13 +2318,13 @@ namespace InABox.DynamicGrid
|
|
|
// //IncrementalItemsSource.LoadItems(list);
|
|
|
//}
|
|
|
|
|
|
- public override void AddVisualFilter(string column, string value)
|
|
|
+ public override void AddVisualFilter(string column, string value, FilterType filtertype = FilterType.Contains)
|
|
|
{
|
|
|
- if (!string.IsNullOrWhiteSpace(value))
|
|
|
- {
|
|
|
- DataGrid.Columns[column].FilterPredicates.Add(new FilterPredicate { FilterType = FilterType.Contains, FilterValue = value });
|
|
|
- DataGrid.Columns[column].FilteredFrom = FilteredFrom.FilterRow;
|
|
|
- }
|
|
|
+ if (string.IsNullOrWhiteSpace(value))
|
|
|
+ return;
|
|
|
+
|
|
|
+ DataGrid.Columns[column].FilterPredicates.Add(new FilterPredicate { FilterType = filtertype, FilterValue = value });
|
|
|
+ DataGrid.Columns[column].FilteredFrom = FilteredFrom.FilterRow;
|
|
|
}
|
|
|
|
|
|
#endregion
|
|
@@ -2549,10 +2549,10 @@ namespace InABox.DynamicGrid
|
|
|
}
|
|
|
|
|
|
private void Add_Click(object sender, RoutedEventArgs e)
|
|
|
- {
|
|
|
- DoAdd();
|
|
|
+ {
|
|
|
+ DoAdd();
|
|
|
}
|
|
|
-
|
|
|
+
|
|
|
public virtual DynamicEditorPages LoadEditorPages(T item)
|
|
|
{
|
|
|
DynamicEditorPages pages = new DynamicEditorPages();
|
|
@@ -2584,7 +2584,7 @@ namespace InABox.DynamicGrid
|
|
|
{
|
|
|
form.BeforeLoad();
|
|
|
}
|
|
|
-
|
|
|
+
|
|
|
public override void InitialiseEditorForm(IDynamicEditorForm editor, T[] items, Func<Type, CoreTable>? pageDataHandler = null, bool preloadPages = false)
|
|
|
{
|
|
|
var pages = items.Length == 1 ? LoadEditorPages(items.First()) : new DynamicEditorPages();
|
|
@@ -2622,7 +2622,7 @@ namespace InABox.DynamicGrid
|
|
|
editor.OnEditorValueChanged += (s, n, v) => EditorValueChanged(editor, items, n, v);
|
|
|
|
|
|
editor.OnAfterEditorValueChanged += (g, n) => AfterEditorValueChanged(g, items, n);
|
|
|
-
|
|
|
+
|
|
|
editor.OnReconfigureEditors = g => ReconfigureEditors(g, items);
|
|
|
|
|
|
editor.OnValidateData += (o, i) => ValidateData(items);
|
|
@@ -2639,7 +2639,7 @@ namespace InABox.DynamicGrid
|
|
|
{
|
|
|
using var Wait = new WaitCursor();
|
|
|
DoBeforeSave(editor, items);
|
|
|
-
|
|
|
+
|
|
|
|
|
|
if (items.Length == 1)
|
|
|
editor.UnloadEditorPages(false);
|
|
@@ -2647,7 +2647,7 @@ namespace InABox.DynamicGrid
|
|
|
SaveItem(item);
|
|
|
if (items.Length == 1)
|
|
|
editor.UnloadEditorPages(true);
|
|
|
-
|
|
|
+
|
|
|
DoAfterSave(editor, items);
|
|
|
|
|
|
}
|
|
@@ -2676,7 +2676,7 @@ namespace InABox.DynamicGrid
|
|
|
public override bool EditItems(T[] items, Func<Type, CoreTable>? PageDataHandler = null, bool PreloadPages = false)
|
|
|
{
|
|
|
DynamicEditorForm editor;
|
|
|
- using(var cursor = new WaitCursor())
|
|
|
+ using (var cursor = new WaitCursor())
|
|
|
{
|
|
|
editor = new DynamicEditorForm();
|
|
|
editor.SetValue(Panel.ZIndexProperty, 999);
|
|
@@ -2694,7 +2694,7 @@ namespace InABox.DynamicGrid
|
|
|
return changes;
|
|
|
}
|
|
|
|
|
|
- protected virtual void OnAfterEditorValueChanged(DynamicEditorGrid grid, T[] items, String columnnname, Dictionary<String,object?> changes)
|
|
|
+ protected virtual void OnAfterEditorValueChanged(DynamicEditorGrid grid, T[] items, String columnnname, Dictionary<String, object?> changes)
|
|
|
{
|
|
|
}
|
|
|
|
|
@@ -2765,7 +2765,7 @@ namespace InABox.DynamicGrid
|
|
|
var values = editor.Values(colname, items);
|
|
|
Dispatcher.Invoke(
|
|
|
() =>
|
|
|
- {
|
|
|
+ {
|
|
|
try
|
|
|
{
|
|
|
//Logger.Send(LogType.Information, typeof(T).Name, "Dispatching Results" + colname);
|
|
@@ -2845,10 +2845,10 @@ namespace InABox.DynamicGrid
|
|
|
|
|
|
if (rows == null || !rows.Any())
|
|
|
{
|
|
|
-
|
|
|
+
|
|
|
if (!CanCreateItems())
|
|
|
return false;
|
|
|
-
|
|
|
+
|
|
|
var item = CreateItem();
|
|
|
|
|
|
// Yea, and this won't work, because we're actually usually showing the description of a linked item,
|
|
@@ -3086,7 +3086,7 @@ namespace InABox.DynamicGrid
|
|
|
result.LoadColumns(new Columns<T>(fields));
|
|
|
return result;
|
|
|
}
|
|
|
-
|
|
|
+
|
|
|
protected virtual Guid GetImportID()
|
|
|
{
|
|
|
return Guid.Empty;
|
|
@@ -3218,7 +3218,8 @@ namespace InABox.DynamicGrid
|
|
|
}
|
|
|
|
|
|
var sort = LookupFactory.DefineSort<T>();
|
|
|
- Reload(filters, reloadColumns, ref sort, (data, err) => Dispatcher.Invoke(() => {
|
|
|
+ Reload(filters, reloadColumns, ref sort, (data, err) => Dispatcher.Invoke(() =>
|
|
|
+ {
|
|
|
if (data is not null)
|
|
|
{
|
|
|
var newData = new CoreTable();
|
|
@@ -3265,7 +3266,8 @@ namespace InABox.DynamicGrid
|
|
|
/// <returns>A list of tables, in the same order as they came in <paramref name="tableColumns"/></returns>
|
|
|
protected virtual IEnumerable<Tuple<Type?, CoreTable>> LoadExportTables(Filters<T> filter, IEnumerable<Tuple<Type, IColumns>> tableColumns)
|
|
|
{
|
|
|
- return tableColumns.Select(x => {
|
|
|
+ return tableColumns.Select(x =>
|
|
|
+ {
|
|
|
var table = new CoreTable();
|
|
|
table.LoadColumns(x.Item2);
|
|
|
return new Tuple<Type?, CoreTable>(x.Item1, table);
|
|
@@ -3353,7 +3355,7 @@ namespace InABox.DynamicGrid
|
|
|
var button = CreateButton(image, caption, tooltip);
|
|
|
button.Margin = position == DynamicGridButtonPosition.Right
|
|
|
? new Thickness(2, 2, 0, 0)
|
|
|
- : bFirstButtonAdded && AnyButtonsVisible()
|
|
|
+ : bFirstButtonAdded && AnyButtonsVisible()
|
|
|
? new Thickness(0, 2, 0, 0)
|
|
|
: new Thickness(0, 2, 2, 0);
|
|
|
button.Padding = !String.IsNullOrWhiteSpace(caption) ? new Thickness(5, 1, 5, 1) : new Thickness(1);
|
|
@@ -3419,19 +3421,19 @@ namespace InABox.DynamicGrid
|
|
|
if (e.Data.GetDataPresent(DragFormat))
|
|
|
{
|
|
|
var data = e.Data.GetData(DragFormat) as DynamicGridDragFormat;
|
|
|
- if(data is not null)
|
|
|
+ if (data is not null)
|
|
|
{
|
|
|
var table = new CoreTable();
|
|
|
- foreach(var column in data.Table.Columns)
|
|
|
+ foreach (var column in data.Table.Columns)
|
|
|
{
|
|
|
- if(column is DataColumn dataColumn)
|
|
|
+ if (column is DataColumn dataColumn)
|
|
|
{
|
|
|
table.Columns.Add(new CoreColumn { ColumnName = dataColumn.ColumnName, DataType = dataColumn.DataType });
|
|
|
}
|
|
|
}
|
|
|
- foreach(var row in data.Table.Rows)
|
|
|
+ foreach (var row in data.Table.Rows)
|
|
|
{
|
|
|
- if(row is DataRow dataRow)
|
|
|
+ if (row is DataRow dataRow)
|
|
|
{
|
|
|
var coreRow = table.NewRow();
|
|
|
coreRow.LoadValues(dataRow.ItemArray);
|
|
@@ -3465,7 +3467,7 @@ namespace InABox.DynamicGrid
|
|
|
private void RowDragDropController_DragStart(object? sender, GridRowDragStartEventArgs e)
|
|
|
{
|
|
|
var rows = new List<CoreRow>();
|
|
|
- foreach(var record in e.DraggingRecords)
|
|
|
+ foreach (var record in e.DraggingRecords)
|
|
|
{
|
|
|
var rowIndex = DataGrid.ResolveToRowIndex(record);
|
|
|
rows.Add(GetRowFromIndex(rowIndex));
|