Fix combined view column alignment
This commit is contained in:
1 parent
fa9ae8ed6f
commit
8fa4a3d7b3
1 file changed
+51
-8
+51
-8
@@ -1081,16 +1081,59 @@ private Control BuildFilePanel(TextBox tb, Button browse, ComboBox cb, StackPane
|
||||
break;
|
||||
|
||||
default:
|
||||
headers = main.Columns;
|
||||
foreach (var r in result.Matches) data.Add(r);
|
||||
// Build a union of both schemas. Columns with the same header are
|
||||
// aligned; B-only columns get their own position in the result.
|
||||
headers = new List<string>(main.Columns);
|
||||
var mainColumnMap = Enumerable.Range(0, main.Columns.Count).ToArray();
|
||||
var secondaryColumnMap = new int[sec.Columns.Count];
|
||||
var matchedSecondaryColumns = new HashSet<int>();
|
||||
|
||||
for (int b = 0; b < sec.Columns.Count; b++)
|
||||
{
|
||||
int matchingMain = -1;
|
||||
for (int a = 0; a < main.Columns.Count; a++)
|
||||
{
|
||||
if (!matchedSecondaryColumns.Contains(a) &&
|
||||
string.Equals(main.Columns[a].Trim(), sec.Columns[b].Trim(), StringComparison.OrdinalIgnoreCase))
|
||||
{
|
||||
matchingMain = a;
|
||||
break;
|
||||
}
|
||||
}
|
||||
|
||||
if (matchingMain >= 0)
|
||||
{
|
||||
secondaryColumnMap[b] = matchingMain;
|
||||
matchedSecondaryColumns.Add(matchingMain);
|
||||
}
|
||||
else
|
||||
{
|
||||
var header = sec.Columns[b];
|
||||
if (headers.Contains(header, StringComparer.OrdinalIgnoreCase))
|
||||
header = $"B: {header}";
|
||||
secondaryColumnMap[b] = headers.Count;
|
||||
headers.Add(header);
|
||||
}
|
||||
}
|
||||
|
||||
string[] CombineRows(string[] rowA, string[] rowB)
|
||||
{
|
||||
var combined = new string[headers.Count];
|
||||
Array.Fill(combined, "");
|
||||
for (int a = 0; a < mainColumnMap.Length && a < rowA.Length; a++)
|
||||
combined[mainColumnMap[a]] = rowA[a];
|
||||
for (int b = 0; b < secondaryColumnMap.Length && b < rowB.Length; b++)
|
||||
combined[secondaryColumnMap[b]] = rowB[b];
|
||||
return combined;
|
||||
}
|
||||
|
||||
foreach (var pair in result.Pairs)
|
||||
data.Add(CombineRows(pair.RowA, pair.RowB));
|
||||
sources = new List<string>();
|
||||
foreach (var _ in result.Matches) sources.Add("A");
|
||||
foreach (var _ in result.Pairs) sources.Add("A+B");
|
||||
foreach (var r in result.OnlySecondary)
|
||||
{
|
||||
var row = new string[main.Columns.Count];
|
||||
Array.Fill(row, "");
|
||||
for (int c = 0; c < row.Length && c < r.Length; c++) row[c] = r[c];
|
||||
data.Add(row);
|
||||
data.Add(CombineRows(Array.Empty<string>(), r));
|
||||
sources.Add("B");
|
||||
}
|
||||
break;
|
||||
@@ -1321,4 +1364,4 @@ private Control BuildFilePanel(TextBox tb, Button browse, ComboBox cb, StackPane
|
||||
_lblStatus.Text = message;
|
||||
_lblStatus.Foreground = isError ? Ui.Danger : Ui.Success;
|
||||
}
|
||||
}
|
||||
}
|
||||
Reference in new issue
Block a user