|
@@ -508,10 +508,6 @@ namespace InABox.DynamicGrid
|
|
|
Edit.Margin = new Thickness(0, 2, 2, 0);
|
|
|
Edit.Click += Edit_Click;
|
|
|
|
|
|
- /*MultiEdit = CreateButton(Properties.Resources.doc_xls.AsBitmapImage(Color.White));
|
|
|
- MultiEdit.Margin = new Thickness(0, 2, 2, 0);
|
|
|
- MultiEdit.Click += MultiEdit_Click;*/
|
|
|
-
|
|
|
EditSpacer = new Label { Width = 5 };
|
|
|
|
|
|
Print = CreateButton(Properties.Resources.print.AsBitmapImage(Color.White));
|
|
@@ -653,8 +649,7 @@ namespace InABox.DynamicGrid
|
|
|
|
|
|
Add.Visibility = Options.Contains(DynamicGridOption.AddRows) ? Visibility.Visible : Visibility.Collapsed;
|
|
|
Edit.Visibility = Options.Contains(DynamicGridOption.EditRows) ? Visibility.Visible : Visibility.Collapsed;
|
|
|
- /*MultiEdit.Visibility =
|
|
|
- Visibility.Collapsed; // _Options.Contains(DynamicGridOptions.DirectEdit) ? Visibility.Visible : Visibility.Collapsed;*/
|
|
|
+
|
|
|
EditSpacer.Visibility = Options.Contains(DynamicGridOption.AddRows) || Options.Contains(DynamicGridOption.EditRows)
|
|
|
? Visibility.Visible
|
|
|
: Visibility.Collapsed;
|
|
@@ -744,7 +739,7 @@ namespace InABox.DynamicGrid
|
|
|
{
|
|
|
if (!Options.Contains(DynamicGridOption.DirectEdit))
|
|
|
return;
|
|
|
- if (!DataGrid.SelectionController.CurrentCellManager.CurrentCell.IsEditing && e.ActivationTrigger == ActivationTrigger.Keyboard)
|
|
|
+ if ((DataGrid.SelectionController.CurrentCellManager.CurrentCell?.IsEditing != true) && e.ActivationTrigger == ActivationTrigger.Keyboard)
|
|
|
DataGrid.SelectionController.CurrentCellManager.BeginEdit();
|
|
|
}
|
|
|
|
|
@@ -934,14 +929,15 @@ namespace InABox.DynamicGrid
|
|
|
|
|
|
protected void UpdateCell(int row, string colname, object value)
|
|
|
{
|
|
|
+ var datacolname = colname.Replace(".", "_");
|
|
|
var table = DataGridItems;
|
|
|
- var colno = table.Columns.IndexOf(colname);
|
|
|
+ var colno = table.Columns.IndexOf(datacolname);
|
|
|
var corecol = Data.Columns[colno].ColumnName;
|
|
|
var corerow = Data.Rows[row];
|
|
|
corerow[corecol] = value;
|
|
|
|
|
|
var datarow = table.Rows[row];
|
|
|
- datarow[colname] = value;
|
|
|
+ datarow[datacolname] = value;
|
|
|
}
|
|
|
|
|
|
private void DataGrid_CurrentCellEndEdit(object? sender, CurrentCellEndEditEventArgs e)
|
|
@@ -951,7 +947,8 @@ namespace InABox.DynamicGrid
|
|
|
return;
|
|
|
if (inplaceeditor is not null && bChanged) UpdateData(inplaceeditor, e.RowColumnIndex.ColumnIndex);
|
|
|
bChanged = false;
|
|
|
- inplaceeditor = null;
|
|
|
+ inplaceeditor = null;
|
|
|
+ DataGridItems.AcceptChanges();
|
|
|
}
|
|
|
|
|
|
private void UpdateData(T obj, int columnindex)
|
|
@@ -959,6 +956,8 @@ namespace InABox.DynamicGrid
|
|
|
var table = DataGridItems;
|
|
|
|
|
|
var iRow = SelectedRows.First().Index; //e.RowColumnIndex.RowIndex - (Options.Contains(DynamicGridOptions.FilterRows) ? 2 : 1);
|
|
|
+ if (iRow > table.Rows.Count)
|
|
|
+ return;
|
|
|
var row = table.Rows[iRow];
|
|
|
var colname = DataGrid.Columns[columnindex].MappingName;
|
|
|
var value = row[colname];
|
|
@@ -968,18 +967,46 @@ namespace InABox.DynamicGrid
|
|
|
var corerow = Data.Rows[iRow];
|
|
|
corerow[corecol] = value;
|
|
|
|
|
|
- CoreUtils.SetPropertyValue(obj, corecol, value);
|
|
|
+ Dictionary<String, object> changes = new Dictionary<string, object>();
|
|
|
+ if (DataGrid.Columns[colname] is GridComboBoxColumn combo)
|
|
|
+ {
|
|
|
+
|
|
|
+ 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)
|
|
|
+ {
|
|
|
+ var lookuprow = lookups.AsEnumerable().FirstOrDefault(x => x[field] == value);
|
|
|
+ if (lookuprow != null)
|
|
|
+ {
|
|
|
+ foreach (DataColumn lookupcol in lookups.Columns)
|
|
|
+ {
|
|
|
+ var prop = String.Join(".", new String[] { prefix, lookupcol.ColumnName });
|
|
|
+ DynamicGridUtils.UpdateEditorValue(new BaseObject[] { inplaceeditor }, prop, lookuprow[lookupcol], changes);
|
|
|
+ //CoreUtils.SetPropertyValue(obj, prop, lookuprow[lookupcol]);
|
|
|
+ }
|
|
|
+ }
|
|
|
+ }
|
|
|
+ }
|
|
|
+ else
|
|
|
+ DynamicGridUtils.UpdateEditorValue(new BaseObject[] { inplaceeditor }, corecol, value, changes);
|
|
|
+ //CoreUtils.SetPropertyValue(obj, corecol, value);
|
|
|
+
|
|
|
+
|
|
|
SaveItem(obj);
|
|
|
- Data.LoadRow(corerow, obj);
|
|
|
+ foreach (var key in changes.Keys)
|
|
|
+ UpdateCell(iRow, key, changes[key]);
|
|
|
+ //Data.LoadRow(corerow, obj);
|
|
|
|
|
|
foreach (var column in Data.Columns.Where(x => !string.Equals(corecol, x.ColumnName)))
|
|
|
{
|
|
|
var scol = column.ColumnName.Replace('.', '_');
|
|
|
- row[scol] = corerow[column.ColumnName];
|
|
|
+ row[scol] = corerow[column.ColumnName] ?? DBNull.Value;
|
|
|
}
|
|
|
|
|
|
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)
|
|
@@ -1692,7 +1719,6 @@ namespace InABox.DynamicGrid
|
|
|
lookupcol.SelectedValuePath = table.Columns[0].ColumnName;
|
|
|
lookupcol.DisplayMemberPath = "Display";
|
|
|
lookupcol.ItemsSource = table.DefaultView;
|
|
|
-
|
|
|
newcol = lookupcol;
|
|
|
}
|
|
|
else
|
|
@@ -2065,7 +2091,7 @@ namespace InABox.DynamicGrid
|
|
|
|
|
|
//IncrementalList<T> _data = null;
|
|
|
|
|
|
- private void InvalidateRow(CoreRow row)
|
|
|
+ protected void InvalidateRow(CoreRow row)
|
|
|
{
|
|
|
var rowdata = new List<object?>(row.Values);
|
|
|
foreach (var ac in ActionColumns)
|
|
@@ -2402,7 +2428,30 @@ namespace InABox.DynamicGrid
|
|
|
|
|
|
private void Add_Click(object sender, RoutedEventArgs e)
|
|
|
{
|
|
|
- DoAdd();
|
|
|
+ if (Options.Contains(DynamicGridOption.DirectEdit))
|
|
|
+ {
|
|
|
+ if (!CanCreateItems())
|
|
|
+ return;
|
|
|
+
|
|
|
+ var item = CreateItem();
|
|
|
+ SaveItem(item);
|
|
|
+
|
|
|
+ var datarow = Data.NewRow();
|
|
|
+ ObjectToRow(item, datarow);
|
|
|
+ Data.Rows.Add(datarow);
|
|
|
+
|
|
|
+ var masterrow = MasterData.NewRow();
|
|
|
+ ObjectToRow(item, masterrow);
|
|
|
+ MasterData.Rows.Add(masterrow);
|
|
|
+
|
|
|
+ _recordmap[datarow] = masterrow;
|
|
|
+
|
|
|
+ InvalidateGrid();
|
|
|
+ SelectedRows = new[] { datarow };
|
|
|
+ OnChanged?.Invoke(this);
|
|
|
+ }
|
|
|
+ else
|
|
|
+ DoAdd();
|
|
|
}
|
|
|
public virtual DynamicEditorPages LoadEditorPages(T item)
|
|
|
{
|
|
@@ -2418,6 +2467,7 @@ namespace InABox.DynamicGrid
|
|
|
|
|
|
public virtual void LoadEditorButtons(T item, DynamicEditorButtons buttons)
|
|
|
{
|
|
|
+ buttons.Clear();
|
|
|
buttons.Add(
|
|
|
"",
|
|
|
Properties.Resources.help.AsBitmapImage(),
|