Это действительно круто, я действительно не думаю, что есть простой способ решить эту проблему. Я бы решил это, создав новый источник данных, в котором вы легко группируете все.
Это действительно сложно сделать так, чтобы это происходило динамически. Но ниже приведен пример того, как я буду обрабатывать это для вашего примера. Есть фиксированное количество строк (в вашем случае 4), поэтому я создаю новые списки для каждой строки и заполняю их динамически, заполняя пустые места пустыми строками «на лету». Таким образом, таблица будет расти горизонтально и будет содержать 4 строки.
var row1 = new List<string>();
var row2 = new List<string>();
var row3 = new List<string>();
var row4 = new List<string>();
var rowHeaders = new List<string>();
myDataList.OrderBy(p => p.MainProcess).ThenBy(p => p.SubProcess);
foreach (var proc in myDataList)
{
if (!rowHeaders.Contains(proc.MainProcess))
{
row1.Add(proc.MainProcess);
rowHeaders.Add(proc.MainProcess);
if (row2.Count == row1.Count - 2)
row2.Add("");
if (row3.Count == row1.Count - 2)
row3.Add("");
if (row4.Count == row1.Count - 2)
row4.Add("");
row2.Add(proc.SubProcess);
}
else
{
if (row2.Count == row1.Count - 1)
{
row2.Add(proc.SubProcess);
}
else
{
if (row3.Count == row2.Count - 1)
{
row3.Add(proc.SubProcess);
}
else
{
if (row4.Count == row3.Count - 1)
{
row4.Add(proc.SubProcess);
}
else
{
row1.Add(proc.SubProcess);
}
}
}
}
}
if(row2.Count < row1.Count)
row2.Add("");
if (row3.Count < row2.Count)
row3.Add("");
if (row4.Count < row3.Count)
row4.Add("");
var myDataSource = new List<List<string>>();
myDataSource.Add(row1);
myDataSource.Add(row2);
myDataSource.Add(row3);
myDataSource.Add(row4);
Возможно, есть более чистые способы фильтрации ваших данных, но это определенно сделает трюк. Чтобы получить основной процесс в жирном тексте, вы можете добавить список «rowHeader» в качестве параметра и использовать выражения.
Я надеюсь, что это поможет вам, и если кто-то знает, как очистить мой код, не стесняйтесь редактировать.
Спасибо вам большое. Если подпроцесс имеет не более трех подпроцессов. Будет ли проще? –