Ниже моя структура JSON:Создание HTML таблицы динамически с некоторой сложностью
{
"list": [
{
"Variant": "V1",
"Id": 1,
"TestList": [
{
"SubVariantList": [
{
"Id": 10,
"Name": "A",
"Fluctuation":100
},
{
"Id": 20,
"Name": "B",
"Fluctuation":100
},
{
"Id": 30,
"Name": "C",
"Fluctuation":200
}
]
}
]
},
{
"Variant": "V2",
"Id": 2,
"TestList": [
{
"SubVariantList": [
{
"Id": 40,
"Name": "A",
"Fluctuation":1100
},
{
"Id": 50,
"Name": "B",
"Fluctuation":1200
},
{
"Id": 60,
"Name": "C",
"Fluctuation":1300
}
]
}
]
},
{
"Variant": "V3",
"Id": 3,
"TestList": [
{
"SubVariantList": [
{
"Id": 40,
"Name": "A",
"Fluctuation":500
},
{
"Id": 50,
"Name": "C",
"Fluctuation":600
}
]
}
]
}
]
}
Теперь со структурой JSon У меня есть 2 ниже путешествия:
V1:A - B - C
V2:A - C
Основываясь на приведенной выше структуре JSon я создаю динамический стол, как показано ниже:
Table1:
A - B | B - C (Headers)
VariantName AValue BValue CValue (Columns)
V1 100 100 200
V2 1100 1200 1300
Table2:
A - C (Headers)
VariantName AValue CValue (columns)
V3 500 600
Я всегда буду h пр субварианты в установленном порядке, начиная с 1 точки, как показано ниже:
A - B - C - D
Сначала будут исправлены, а остальной я могу иметь такие комбинации, как это:
A - B - C - D
A - B - C
A - C
A- D
A - B - C - D
A - B - C
A - D
A- C
Проблема поставляется с некоторыми комбинациями подвариантов потока, как показано ниже:
V1: A - B - C
V2 : A - B - C - D
С выше данных я получаю структуру таблицы, как это:
Table1 : <thead>
A - B | B - C
Table2:<thead>
A - B | B - C | C - D
Но уже A - B и B - C структура создается в таблице как последовательность правильно, так что будет только одна таблица, как показано ниже:
Table1 : <thead>
A - B | B - C | C - D
Новая таблица будет создана только тогда, когда будет прыгать, как показано ниже:
A - C
A - D
Это мой код:
<div>
@{
var tableHeaders = new List<string>();
for (int i = 0; i < Model.Count; i++)
{
var subvariants = string.Join(",", Model[i].TestList[0].SubVariantList.Select(cd => cd.Name)); //creating unique combination
if (tableHeaders.Count == 0)
{
tableHeaders.Add(subvariants);
}
else if (!tableHeaders.Contains(subvariants))
{
tableHeaders.Add(subvariants);
}
}
}
@for (int i = 0; i < tableHeaders.Count; i++)
{
string[] subvariants = tableHeaders[i].Split(',');
<table>
<thead>
<tr>
@for (int cnt = 0; cnt < tableHeaders.Count() - 1; cnt++) // for 2 subvariants
{
<td>
@subvariants[cnt] <span>-</span> @subvariants[cnt + 1]
</td>
}
</tr>
<tr>
<th style="border: 1px solid black;">VariantName</th>
@for (int cnt = 0; cnt < subvariants.Count() - 1; cnt++)
{
if (cnt == 0)
{
<th style="border: 1px solid black;">@subvariants[cnt]</th>
}
<th style="border: 1px solid black;">@subvariants[cnt + 1]</th>
}
</tr>
</thead>
<tbody>
@for (int m = 0; m < Model.Count; m++)
{
string subvariants = string.Join(",", Model[m].TestList[0].SubVariantList.Select(cd => cd.Name));
var headers = tableHeaders[i];
if (headers.Contains(subvariants))
{
<tr>
<td>@Model[m].Variant</td>
<td>@Model[m].TestList[0].SubVariantList[0].Value</td>
@for (int j = 1; j < Model[m].TestList[0].SubVariantList.Count; j++)
{
<td>@Model[m].TestList[0].SubVariantList[j].Value</td>
}
</tr>
}
}
</tbody>
</table>
}
</div>
Интересно, не застрял ли я в этой сложной логике из-за различных сценариев и комбинации подвариантов.
@StephenMuecke: Прежде всего, спасибо вам за проявленный интерес к моему вопросу. Для подвариантов у меня есть поток вроде: A-B-C-D и т. Д. Если вы увидите список подвариантов в json-структуре, у меня есть я всегда имел бы подварианты, текущие из всегда A-BC или A-C или A-D и т. д., и да, вы правы, я имею в виду V1, а не вариант. Предположим, что существует ошибка опечатки. V1 имеет A, B, C (структура json) Я хочу иметь заголовки в таблице, как AB | B - C, чтобы показать поток, который от A до B и B до C и V3 имеет A и C, что означает от A до C –
Так что в фрагменте кода под _First A будет исправлено ..._ вы хотите, чтобы из этого список, вы создадите только 3 таблицы - «A - B - C - D» и «A - C» и «A - D»? –
И у вас есть последовательность, например 'B - D', и если да, вам нужна таблица для этого? –