Fix combined view column alignment

This commit is contained in:
dedicraf committed 2026-10-17 13:52:38 +03:00
1 parent fa9ae8ed6f
commit f5b659061c
1 file changed
+50 -7
+50 -7
View File
@@ -1081,16 +1081,59 @@ private Control BuildFilePanel(TextBox tb, Button browse, ComboBox cb, StackPane
break; break;
default: default:
headers = main.Columns; // Build a union of both schemas. Columns with the same header are
foreach (var r in result.Matches) data.Add(r); // 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>(); 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) foreach (var r in result.OnlySecondary)
{ {
var row = new string[main.Columns.Count]; data.Add(CombineRows(Array.Empty<string>(), r));
Array.Fill(row, "");
for (int c = 0; c < row.Length && c < r.Length; c++) row[c] = r[c];
data.Add(row);
sources.Add("B"); sources.Add("B");
} }
break; break;