|
|
@@ -145,9 +145,13 @@ namespace InABox.Wpf.Reports
|
|
|
{
|
|
|
var modelTable = data.GetDataModelTable(tableName);
|
|
|
var dataSource = report.GetDataSource(tableName);
|
|
|
+ var childkeys = data.Relations.Where(x => x.ChildTable.Equals(tableName))?.Select(x=>x.ChildColumn).ToArray() ?? [];
|
|
|
+ var parentkeys = data.Relations.Where(x => x.ParentTable.Equals(tableName))?.Select(x=>x.ParentColumn).ToArray() ?? [];
|
|
|
+
|
|
|
if (dataSource != null && modelTable.Type is not null)
|
|
|
{
|
|
|
- var columnNames = CoreUtils.GetColumnNames(modelTable.Type, x => true);
|
|
|
+ var allcolumns = CoreUtils.GetColumnNames(modelTable.Type, x => true);
|
|
|
+ var columnNames = allcolumns.ToList();
|
|
|
if (template.OptimiseData)
|
|
|
{
|
|
|
// DataColumn="(table).(field)" or [(table).(field)]
|
|
|
@@ -155,12 +159,32 @@ namespace InABox.Wpf.Reports
|
|
|
var matches = Regex.Matches(templaterdl, pattern);
|
|
|
var usedcolumns = matches
|
|
|
.Cast<Match>()
|
|
|
- .Select(m => m.Groups["value"].Value)
|
|
|
+ .Select(m => m.Groups["value"].Value.Split('.').TakeLast(2))
|
|
|
+ .Where(x=>x.Count() == 2 && x.First().Equals(tableName))
|
|
|
+ .Select(x=>string.Join('.',x))
|
|
|
.ToList();
|
|
|
columnNames = columnNames
|
|
|
- .Where(x=>x.Equals("ID") || usedcolumns.Contains($"{modelTable.Type.Name}.{x.Replace(".","_")}"))
|
|
|
+ .Where(x=>usedcolumns.Contains($"{tableName}.{x.Replace(".","_")}"))
|
|
|
.ToList();
|
|
|
-
|
|
|
+ if (columnNames.Count > 0)
|
|
|
+ {
|
|
|
+ if (!columnNames.Contains("ID"))
|
|
|
+ columnNames.Add("ID");
|
|
|
+ foreach (var childkey in childkeys)
|
|
|
+ {
|
|
|
+ var childcol = allcolumns.FirstOrDefault(x => x.Replace('.', '_').Equals(childkey));
|
|
|
+ if (childcol != null && !columnNames.Contains(childcol))
|
|
|
+ columnNames.Add(childcol);
|
|
|
+ }
|
|
|
+
|
|
|
+ foreach (var parentkey in parentkeys)
|
|
|
+ {
|
|
|
+ var parentcol = allcolumns.FirstOrDefault(x => x.Replace('.', '_').Equals(parentkey));
|
|
|
+ if (parentcol != null && !columnNames.Contains(parentcol))
|
|
|
+ columnNames.Add(parentcol);
|
|
|
+ }
|
|
|
+ }
|
|
|
+
|
|
|
}
|
|
|
else
|
|
|
{
|
|
|
@@ -178,6 +202,7 @@ namespace InABox.Wpf.Reports
|
|
|
}
|
|
|
}
|
|
|
modelTable.Columns = Columns.None(modelTable.Type).Add(columnNames);
|
|
|
+ modelTable.ShouldLoad = modelTable.Columns.Count > 0;
|
|
|
}
|
|
|
}
|
|
|
|