|
@@ -480,6 +480,7 @@ namespace InABox.DynamicGrid
|
|
|
DataGrid.NavigationMode = NavigationMode.Row;
|
|
|
DataGrid.AllowEditing = false;
|
|
|
DataGrid.EditTrigger = EditTrigger.OnTap;
|
|
|
+
|
|
|
DataGrid.CurrentCellBeginEdit += DataGrid_CurrentCellBeginEdit;
|
|
|
DataGrid.CurrentCellEndEdit += DataGrid_CurrentCellEndEdit;
|
|
|
DataGrid.CurrentCellValueChanged += DataGrid_CurrentCellValueChanged;
|
|
@@ -870,6 +871,12 @@ namespace InABox.DynamicGrid
|
|
|
}
|
|
|
else if (e.Key == Key.Tab)
|
|
|
{
|
|
|
+ if (HasOption(DynamicGridOption.DirectEdit))
|
|
|
+ {
|
|
|
+ DataGrid.SelectionController.CurrentCellManager.EndEdit();
|
|
|
+ DataGrid.MoveFocus(new TraversalRequest(FocusNavigationDirection.Right));
|
|
|
+ DataGrid.SelectionController.CurrentCellManager.BeginEdit();
|
|
|
+ }
|
|
|
}
|
|
|
//throw new NotImplementedException();
|
|
|
}
|
|
@@ -1028,21 +1035,57 @@ namespace InABox.DynamicGrid
|
|
|
if (e.Column is GridCheckBoxColumn)
|
|
|
inplaceeditor = LoadItem(Data.Rows[e.RowColumnIndex.RowIndex - headerrows]);
|
|
|
if (inplaceeditor is not null)
|
|
|
- UpdateData(inplaceeditor, DataGrid.Columns[e.RowColumnIndex.ColumnIndex].MappingName);
|
|
|
+ UpdateData(DataGrid.Columns[e.RowColumnIndex.ColumnIndex].MappingName);
|
|
|
if (e.Column is GridCheckBoxColumn)
|
|
|
inplaceeditor = null;
|
|
|
if (inplaceeditor is not null)
|
|
|
bChanged = true;
|
|
|
}
|
|
|
|
|
|
- private void DataGrid_CurrentCellDropDownSelectionChanged(object? sender, CurrentCellDropDownSelectionChangedEventArgs e)
|
|
|
+ private void DataGrid_CurrentCellDropDownSelectionChanged(object? sender,
|
|
|
+ CurrentCellDropDownSelectionChangedEventArgs e)
|
|
|
{
|
|
|
var headerrows = HasOption(DynamicGridOption.FilterRows) ? 2 : 1;
|
|
|
if (e.RowColumnIndex.RowIndex < headerrows)
|
|
|
return;
|
|
|
inplaceeditor ??= LoadItem(Data.Rows[e.RowColumnIndex.RowIndex - headerrows]);
|
|
|
- if (inplaceeditor != null)
|
|
|
- bChanged = true;
|
|
|
+ if ((inplaceeditor is not null) && (e.SelectedItem is Tuple<object?, string> tuple))
|
|
|
+ {
|
|
|
+
|
|
|
+ var iRow = SelectedRows.First().Index;
|
|
|
+
|
|
|
+ var mappedname = DataGrid.Columns[e.RowColumnIndex.ColumnIndex].MappingName;
|
|
|
+
|
|
|
+ var colno = DataGridItems.Columns.IndexOf(mappedname);
|
|
|
+ var corecol = Data.Columns[colno].ColumnName;
|
|
|
+
|
|
|
+ Dictionary<CoreColumn, object> updates = new Dictionary<CoreColumn, object>();
|
|
|
+
|
|
|
+ var prefix = String.Join(".", corecol.Split(".").Reverse().Skip(1).Reverse());
|
|
|
+ var field = corecol.Split(".").Last();
|
|
|
+
|
|
|
+ var prop = CoreUtils.GetProperty(typeof(T), corecol);
|
|
|
+ if (prop.GetEditor() is ILookupEditor editor)
|
|
|
+ {
|
|
|
+ var data = editor.Values(corecol);
|
|
|
+ var lookuprow = data.Rows.FirstOrDefault(r => Equals(r[field], tuple.Item1));
|
|
|
+ if (lookuprow == null)
|
|
|
+ lookuprow = data.NewRow(true);
|
|
|
+
|
|
|
+ foreach (CoreColumn lookupcol in data.Columns)
|
|
|
+ {
|
|
|
+ var columnname = String.IsNullOrWhiteSpace(prefix)
|
|
|
+ ? lookupcol.ColumnName
|
|
|
+ : String.Join(".", prefix, lookupcol.ColumnName);
|
|
|
+ var updatecol = Data.Columns.FirstOrDefault(x => String.Equals(x.ColumnName, columnname));
|
|
|
+ if (updatecol != null)
|
|
|
+ updates[updatecol] = lookuprow[lookupcol.ColumnName];
|
|
|
+ }
|
|
|
+ UpdateData(updates);
|
|
|
+ bChanged = true;
|
|
|
+
|
|
|
+ }
|
|
|
+ }
|
|
|
}
|
|
|
|
|
|
protected void UpdateCell(int row, string colname, object value)
|
|
@@ -1066,7 +1109,7 @@ namespace InABox.DynamicGrid
|
|
|
if (e.RowColumnIndex.RowIndex < headerrows)
|
|
|
return;
|
|
|
if (inplaceeditor is not null && bChanged)
|
|
|
- UpdateData(inplaceeditor, DataGrid.Columns[e.RowColumnIndex.ColumnIndex].MappingName);
|
|
|
+ UpdateData(DataGrid.Columns[e.RowColumnIndex.ColumnIndex].MappingName);
|
|
|
if (bChanged)
|
|
|
DoChanged();
|
|
|
bChanged = false;
|
|
@@ -1075,69 +1118,55 @@ namespace InABox.DynamicGrid
|
|
|
|
|
|
}
|
|
|
|
|
|
- private void UpdateData(T obj, String mappedname)
|
|
|
+ private void UpdateData(Dictionary<CoreColumn,object> updates)
|
|
|
{
|
|
|
if (!SelectedRows.Any())
|
|
|
return;
|
|
|
- var table = DataGridItems;
|
|
|
-
|
|
|
- var iRow = SelectedRows.First().Index; //e.RowColumnIndex.RowIndex - (HasOption(DynamicGridOptions.FilterRows) ? 2 : 1);
|
|
|
- if (table is null || iRow > table.Rows.Count)
|
|
|
- return;
|
|
|
- var row = table.Rows[iRow];
|
|
|
- var value = row[mappedname];
|
|
|
|
|
|
- var colno = table.Columns.IndexOf(mappedname);
|
|
|
- var corecol = Data.Columns[colno].ColumnName;
|
|
|
+ var iRow = SelectedRows.First().Index;
|
|
|
var corerow = Data.Rows[iRow];
|
|
|
- corerow[corecol] = value;
|
|
|
+ var row = DataGridItems.Rows[iRow];
|
|
|
|
|
|
Dictionary<String, object> changes = new Dictionary<string, object>();
|
|
|
- if (DataGrid.Columns[mappedname] is GridComboBoxColumn combo)
|
|
|
+ foreach (var col in updates.Keys)
|
|
|
{
|
|
|
-
|
|
|
- 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.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]);
|
|
|
- }
|
|
|
- }
|
|
|
- }
|
|
|
+ corerow[col.ColumnName] = updates[col];
|
|
|
+ DynamicGridUtils.UpdateEditorValue(new BaseObject[] { inplaceeditor }, col.ColumnName, updates[col], changes);
|
|
|
}
|
|
|
- else
|
|
|
- DynamicGridUtils.UpdateEditorValue(new BaseObject[] { inplaceeditor }, corecol, value, changes);
|
|
|
- //CoreUtils.SetPropertyValue(obj, corecol, value);
|
|
|
-
|
|
|
-
|
|
|
- SaveItem(obj);
|
|
|
+
|
|
|
+ SaveItem(inplaceeditor);
|
|
|
+
|
|
|
foreach (var key in changes.Keys)
|
|
|
UpdateCell(iRow, key, changes[key]);
|
|
|
- //Data.LoadRow(corerow, obj);
|
|
|
-
|
|
|
- foreach (var c in Data.Columns.Where(x => !string.Equals(corecol, x.ColumnName)))
|
|
|
- {
|
|
|
- var scol = c.ColumnName.Replace('.', '_');
|
|
|
- row[scol] = corerow[c.ColumnName] ?? DBNull.Value;
|
|
|
- }
|
|
|
+
|
|
|
+ // foreach (var c in Data.Columns.Where(x => !string.Equals(column.ColumnName, x.ColumnName)))
|
|
|
+ // {
|
|
|
+ // var scol = c.ColumnName.Replace('.', '_');
|
|
|
+ // row[scol] = corerow[c.ColumnName] ?? DBNull.Value;
|
|
|
+ // }
|
|
|
|
|
|
for (var i = 0; i < ActionColumns.Count; i++)
|
|
|
row[string.Format("ActionColumn{0}", i)] = ActionColumns[i].Data(corerow);
|
|
|
+
|
|
|
+ }
|
|
|
|
|
|
+ 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 colno = DataGridItems.Columns.IndexOf(mappedname);
|
|
|
+ var column = Data.Columns[colno];
|
|
|
+ var value = DataGridItems.Rows[iRow][mappedname];
|
|
|
+
|
|
|
+ UpdateData(new Dictionary<CoreColumn, object>() { { column, value } });
|
|
|
+
|
|
|
}
|
|
|
|
|
|
-
|
|
|
-
|
|
|
private void DataGrid_QueryRowHeight(object? sender, QueryRowHeightEventArgs e)
|
|
|
{
|
|
|
if (e.RowIndex > 0)
|
|
@@ -1946,7 +1975,7 @@ namespace InABox.DynamicGrid
|
|
|
{
|
|
|
var colno = DataGridItems.Columns.IndexOf(col.MappingName);
|
|
|
view[col.MappingName] = list.ID;
|
|
|
- UpdateData(inplaceeditor,col.MappingName);
|
|
|
+ UpdateData(col.MappingName);
|
|
|
|
|
|
var prefix = String.Join(".", Data.Columns[colno].ColumnName.Split('.').Reverse().Skip(1).Reverse());
|
|
|
foreach (var key in list.OtherValues.Keys)
|
|
@@ -1956,7 +1985,7 @@ namespace InABox.DynamicGrid
|
|
|
: $"{prefix}.{key}";
|
|
|
othercol = othercol.Replace('.', '_');
|
|
|
view[othercol] = list.OtherValues[key] ?? DBNull.Value;
|
|
|
- UpdateData(inplaceeditor,othercol);
|
|
|
+ UpdateData(othercol);
|
|
|
}
|
|
|
|
|
|
DataGrid.SelectionController.CurrentCellManager.EndEdit();
|
|
@@ -1986,7 +2015,7 @@ namespace InABox.DynamicGrid
|
|
|
else if (prop.Editor is ILookupEditor lookupEditor)
|
|
|
{
|
|
|
var lookupcol = new GridComboBoxColumn();
|
|
|
-
|
|
|
+
|
|
|
//var lookups = editor.Values(column.ColumnName).ToDictionary(column.ColumnName, "Display");
|
|
|
//lookupcol.SelectedValuePath = "Key";
|
|
|
//lookupcol.DisplayMemberPath = "Value";
|
|
@@ -1997,7 +2026,7 @@ namespace InABox.DynamicGrid
|
|
|
//row["Display"] = "";
|
|
|
//table.Rows.InsertAt(row, 0);
|
|
|
|
|
|
- /*var data = lookupEditor.Values(column.ColumnName);
|
|
|
+ var data = lookupEditor.Values(column.ColumnName);
|
|
|
|
|
|
var items = new List<Tuple<object?, string>>();
|
|
|
if (!lookupEditor.IsEnumEditor())
|
|
@@ -2005,13 +2034,13 @@ namespace InABox.DynamicGrid
|
|
|
items.Add(new(null, ""));
|
|
|
}
|
|
|
foreach(var row in data.Rows)
|
|
|
- {
|
|
|
items.Add(new(row[data.Columns[0].ColumnName], (row["Display"] ?? "").ToString() ?? ""));
|
|
|
- }*/
|
|
|
+
|
|
|
+ lookupcol.SelectedValuePath = "Item1";
|
|
|
+ lookupcol.DisplayMemberPath = "Item2";
|
|
|
+ lookupcol.ItemsSource = items;
|
|
|
+ lookupcol.UpdateTrigger = UpdateSourceTrigger.PropertyChanged;
|
|
|
|
|
|
- lookupcol.SelectedValuePath = table.Columns[0].ColumnName;
|
|
|
- lookupcol.DisplayMemberPath = "Display";
|
|
|
- lookupcol.ItemsSource = table.DefaultView;
|
|
|
newcol = lookupcol;
|
|
|
}
|
|
|
else
|