Как сделать сравнение HTML-таблицы с использованием Asp Repeater (ротация данных)
Мне нужно сделать таблицу сравнения в формате HTML, проблема в том, что элементы в базе данных представлены в виде столбцов, но в таблице сравнения это должны быть строки!
пример
Данные в базе данных выглядят следующим образом
ID Name Color Weight
-------------------------------
1 Ball Red 10
2 Table Black 50
3 Chair Green 30
И это должно выглядеть следующим образом в таблице сравнения
ID 1 2 3
Name Ball Table Chair
Color Red Black Green
Weight 10 50 30
Я использую ASP.NET с ретранслятором, но он не работает. Не могли бы вы помочь мне найти лучший способ сделать это.
Я должен использовать что-то вроде повторителя, потому что количество столбцов в таблице сравнения варьируется.
2 ответа
Возможное решение:
Учитывая следующее DataTable как источник данных:
protected DataTable Data
{
get
{
if (ViewState["Data"] == null)
{
DataTable table = new DataTable();
table.Columns.Add("ID", typeof(int));
table.Columns.Add("Name");
table.Columns.Add("Color");
table.Columns.Add("Weight", typeof(int));
table.Rows.Add(1, "Ball", "Red", 10);
table.Rows.Add(2, "Table", "Black", 50);
table.Rows.Add(3, "Chair", "Green", 30);
ViewState["Data"] = table;
}
return (DataTable)ViewState["Data"];
}
}
И некоторый ASP-код для циклов и построения таблицы:
<table>
<%
for (int i = 0; i < Data.Columns.Count; i++)
{
%>
<tr>
<td><%= Data.Columns[i].ColumnName %></td>
<%
for (int j = 0; j < Data.Rows.Count; j++)
{
%>
<td><%= Data.Rows[j][i] %></td>
<%
}
%>
</tr>
<%
}
%>
</table>
Так что это не для ASP.NET, но вы можете преобразовать его. Этот код я использую для создания динамических сводных таблиц в SQL Server. Это позволяет вам делать то, что вы хотите, не зная, сколько будет столбцов. Особенность сводных таблиц в том, что они требуют вычисления, поэтому вам придется сделать это, чтобы заставить его работать. Надеюсь это поможет.
DECLARE @columns varchar(500)
Select @columns = STUFF(( select distinct
'],[' + cast(Name as varchar)
from table_name as t1
order by '],[' + cast(Name as varchar)
for XML path('')
), 1, 2, '') + ']'
DECLARE @query varchar(max)
SET @query = 'select *
from table_name
pivot
(
count(Name)
for Name in (' +@columns+ ')
)as pvt'
execute(@query)