|
@@ -144,18 +144,25 @@ 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
|
|
|
- public class BoolToImageConverter : IValueConverter
|
|
|
+ public class BoolToImageConverter : UtilityConverter<bool,ImageSource>
|
|
|
{
|
|
|
- private static readonly BitmapImage tick = Wpf.Resources.Bullet_Tick.AsBitmapImage();
|
|
|
|
|
|
- public object? Convert(object value, Type targetType, object parameter, CultureInfo culture)
|
|
|
+ public ImageSource TrueValue { get; set; }
|
|
|
+ public ImageSource FalseValue { get; set; }
|
|
|
+
|
|
|
+ public BoolToImageConverter()
|
|
|
+ {
|
|
|
+ TrueValue = Wpf.Resources.Bullet_Tick.AsBitmapImage();
|
|
|
+ }
|
|
|
+
|
|
|
+ public override ImageSource Convert(bool value)
|
|
|
{
|
|
|
- return value is bool boolean && boolean ? tick : null;
|
|
|
+ return value ? TrueValue : FalseValue;
|
|
|
}
|
|
|
|
|
|
- public object? ConvertBack(object value, Type targetType, object parameter, CultureInfo culture)
|
|
|
+ public override bool Deconvert(ImageSource value)
|
|
|
{
|
|
|
- return null;
|
|
|
+ return ImageUtils.IsEqual(value as BitmapImage,TrueValue as BitmapImage);
|
|
|
}
|
|
|
}
|
|
|
|
|
@@ -990,7 +997,7 @@ namespace InABox.DynamicGrid
|
|
|
if (e.Column is GridCheckBoxColumn)
|
|
|
inplaceeditor = LoadItem(Data.Rows[e.RowColumnIndex.RowIndex - headerrows]);
|
|
|
if (inplaceeditor is not null)
|
|
|
- UpdateData(DataGrid.Columns[e.RowColumnIndex.ColumnIndex].MappingName);
|
|
|
+ UpdateData(e.RowColumnIndex.ColumnIndex);
|
|
|
if (e.Column is GridCheckBoxColumn)
|
|
|
inplaceeditor = null;
|
|
|
if (inplaceeditor is not null)
|
|
@@ -1035,7 +1042,8 @@ namespace InABox.DynamicGrid
|
|
|
if (updatecol != null)
|
|
|
updates[updatecol] = lookuprow[lookupcol.ColumnName];
|
|
|
}
|
|
|
- UpdateData(updates);
|
|
|
+ var changes = UpdateData(updates);
|
|
|
+ DoEntityChanged(this, new DynamicColumnEntityChangedEventArgs(corecol, changes));
|
|
|
bChanged = true;
|
|
|
|
|
|
}
|
|
@@ -1068,8 +1076,10 @@ namespace InABox.DynamicGrid
|
|
|
var headerrows = HasOption(DynamicGridOption.FilterRows) ? 2 : 1;
|
|
|
if (e.RowColumnIndex.RowIndex < headerrows)
|
|
|
return;
|
|
|
- if (inplaceeditor is not null && bChanged)
|
|
|
- UpdateData(DataGrid.Columns[e.RowColumnIndex.ColumnIndex].MappingName);
|
|
|
+ if (inplaceeditor is not null && bChanged)
|
|
|
+ {
|
|
|
+ UpdateData(e.RowColumnIndex.ColumnIndex);
|
|
|
+ }
|
|
|
if (bChanged)
|
|
|
DoChanged();
|
|
|
bChanged = false;
|
|
@@ -1094,26 +1104,26 @@ namespace InABox.DynamicGrid
|
|
|
row[$"ActionColumn{i}"] = ActionColumns[i].Data(corerow);
|
|
|
}
|
|
|
|
|
|
- private void UpdateData(Dictionary<CoreColumn, object?> updates)
|
|
|
+ private Dictionary<string,object?> UpdateData(Dictionary<CoreColumn, object?> updates)
|
|
|
{
|
|
|
+ var result = new Dictionary<string, object?>();
|
|
|
if (!SelectedRows.Any())
|
|
|
- return;
|
|
|
+ return result;
|
|
|
|
|
|
var iRow = SelectedRows.First().Index;
|
|
|
var corerow = Data.Rows[iRow];
|
|
|
var row = DataGridItems.Rows[iRow];
|
|
|
-
|
|
|
- var changes = new Dictionary<string, object?>();
|
|
|
+
|
|
|
foreach (var (col, value) in updates)
|
|
|
{
|
|
|
UpdateRow(corerow, col.ColumnName, value, refresh: false);
|
|
|
- DynamicGridUtils.UpdateEditorValue(new BaseObject[] { inplaceeditor }, col.ColumnName, value, changes);
|
|
|
+ DynamicGridUtils.UpdateEditorValue(new BaseObject[] { inplaceeditor }, col.ColumnName, value, result);
|
|
|
}
|
|
|
|
|
|
SaveItem(inplaceeditor);
|
|
|
|
|
|
- foreach (var key in changes.Keys)
|
|
|
- UpdateCell(iRow, key, changes[key]);
|
|
|
+ foreach (var key in result.Keys)
|
|
|
+ UpdateCell(iRow, key, result[key]);
|
|
|
|
|
|
// foreach (var c in Data.Columns.Where(x => !string.Equals(column.ColumnName, x.ColumnName)))
|
|
|
// {
|
|
@@ -1124,49 +1134,41 @@ namespace InABox.DynamicGrid
|
|
|
for (var i = 0; i < ActionColumns.Count; i++)
|
|
|
row[string.Format("ActionColumn{0}", i)] = ActionColumns[i].Data(corerow);
|
|
|
|
|
|
- }
|
|
|
+ return result;
|
|
|
|
|
|
+ }
|
|
|
|
|
|
- private void UpdateData(Dictionary<String, object?> changes)
|
|
|
+ private void UpdateData(int columnindex)
|
|
|
{
|
|
|
+
|
|
|
if (!SelectedRows.Any())
|
|
|
return;
|
|
|
|
|
|
var iRow = SelectedRows.First().Index; //e.RowColumnIndex.RowIndex - (HasOption(DynamicGridOptions.FilterRows) ? 2 : 1);
|
|
|
if (DataGridItems is null || iRow > DataGridItems.Rows.Count)
|
|
|
return;
|
|
|
-
|
|
|
- var updates = new Dictionary<CoreColumn, object?>();
|
|
|
- foreach (var key in changes.Keys)
|
|
|
- {
|
|
|
- var colno = DataGridItems.Columns.IndexOf(key);
|
|
|
- var column = Data.Columns[colno];
|
|
|
- updates[column] = changes[key];
|
|
|
- }
|
|
|
|
|
|
- UpdateData(updates);
|
|
|
|
|
|
- }
|
|
|
-
|
|
|
- private void UpdateData(String mappedname)
|
|
|
- {
|
|
|
- if (!SelectedRows.Any())
|
|
|
- return;
|
|
|
-
|
|
|
- var iRow = SelectedRows.First().Index; //e.RowColumnIndex.RowIndex - (HasOption(DynamicGridOptions.FilterRows) ? 2 : 1);
|
|
|
- if (DataGridItems is null || iRow > DataGridItems.Rows.Count)
|
|
|
- return;
|
|
|
+ var gridcol = ColumnList[columnindex] as DynamicGridColumn;
|
|
|
|
|
|
- var colno = DataGridItems.Columns.IndexOf(mappedname);
|
|
|
- var column = Data.Columns[colno];
|
|
|
- var value = DataGridItems.Rows[iRow][mappedname];
|
|
|
- if(value is DBNull)
|
|
|
+ if (gridcol != null)
|
|
|
{
|
|
|
- value = CoreUtils.GetDefault(column.DataType);
|
|
|
+ var datacol = Data.Columns.FirstOrDefault(x => x.ColumnName.Equals(gridcol.ColumnName));
|
|
|
+ if (datacol != null)
|
|
|
+ {
|
|
|
+ var datacolindex = Data.Columns.IndexOf(datacol);
|
|
|
+
|
|
|
+ //var colno = DataGridItems.Columns.IndexOf(mappedname);
|
|
|
+ //var column = Data.Columns.FirstOrDefault(x => x.ColumnName.Equals(gridcol.ColumnName));
|
|
|
+ //if (column != null)
|
|
|
+ //{
|
|
|
+ var value = DataGridItems.Rows[iRow][datacolindex];
|
|
|
+ if (value is DBNull)
|
|
|
+ value = CoreUtils.GetDefault(datacol.DataType);
|
|
|
+ var changes = UpdateData(new Dictionary<CoreColumn, object?>() { { datacol, value } });
|
|
|
+ DoEntityChanged(gridcol, new DynamicColumnEntityChangedEventArgs(datacol.ColumnName,changes));
|
|
|
+ }
|
|
|
}
|
|
|
-
|
|
|
- UpdateData(new Dictionary<CoreColumn, object?>() { { column, value } });
|
|
|
-
|
|
|
}
|
|
|
|
|
|
private void DataGrid_QueryRowHeight(object? sender, QueryRowHeightEventArgs e)
|
|
@@ -1872,13 +1874,7 @@ namespace InABox.DynamicGrid
|
|
|
if (newcol != null)
|
|
|
{
|
|
|
newcol.GetEntity = () => inplaceeditor;
|
|
|
- newcol.EntityChanged = (changes) =>
|
|
|
- {
|
|
|
- SaveItem(inplaceeditor);
|
|
|
- UpdateRow(changes);
|
|
|
- DataGrid.SelectionController.CurrentCellManager.EndEdit();
|
|
|
- };
|
|
|
-
|
|
|
+ newcol.EntityChanged += DoEntityChanged;
|
|
|
if (!newcol.VariableHeight)
|
|
|
gridRowResizingOptions.ExcludeColumns.Add(newcol.MappingName);
|
|
|
|
|
@@ -1985,7 +1981,15 @@ namespace InABox.DynamicGrid
|
|
|
ResizeColumns(DataGrid, DataGrid.ActualWidth - 2, DataGrid.ActualHeight - 2);
|
|
|
}
|
|
|
|
|
|
-
|
|
|
+ private void DoEntityChanged(object column, DynamicColumnEntityChangedEventArgs args)
|
|
|
+ {
|
|
|
+
|
|
|
+ OnAfterEditorValueChanged(null, new T[] { inplaceeditor }, new AfterEditorValueChangedArgs(args.ColumnName, args.Changes), args.Changes);
|
|
|
+ SaveItem(inplaceeditor);
|
|
|
+ UpdateRow(args.Changes);
|
|
|
+ //DataGrid.SelectionController.CurrentCellManager.EndEdit();
|
|
|
+ }
|
|
|
+
|
|
|
|
|
|
private void ApplyFilterStyle(GridColumn column, bool filtering, bool isactioncolumn)
|
|
|
{
|