我设法从sql数据库中提取数据(使用存储过程)并在Table Datums中显示它。我想要做的是每列有一个列总数,但它们是使用相同的变量(在循环中)创建的,所以我对如何执行此操作感到困惑。
date AVL RSU TOW BAD DEL SUP CLA SG RV TEN
2016-12-08 16 2 5 1 2 3 1 1 1 0
2016-12-09 17 2 6 1 2 3 1 1 1 0
//more data will be in here, but for now, you get the picture
Total 32 4 11 2 4 6 2 2 2 0
我创建此视图的VIEW代码如下所示
<table>
<tr>
<td>date</td>
<td>avl</td>
<td>rsu</td>
<td>tow</td>
<td>bad</td>
<td>del</td>
<td>sup</td>
<td>cla</td>
<td>sg</td>
<td>rv</td>
<td>ten</td>
</tr>
@foreach (var itemgroup in Model.GroupBy(item => item.date))
{
<tr>
<td>@itemgroup.Key.Value.ToString("dd/MM/yyyy")</td>
@foreach (var item in itemgroup)
{
string style = @item.Column2 <= 0 ? "color:Red" : null;
<td style="@style">@item.Column2</td>
}
</tr>
}
有人可以提出建议吗? 感谢
答案 0 :(得分:1)
每个项目都有一个名为code
的属性。由于您的表头是硬编码的,我假设这些是唯一可用的code
。因此,按照与标题相同的顺序,获取<tr>
<td>Total</td>
<td>@Model.Where(item => item.code == "AVL").Sum(a => a.Column2)</td>
<td>@Model.Where(item => item.code == "RSU").Sum(a => a.Column2)</td>
// And so on ....
</tr>
的总计。
controller
但最好在View
中包含所有这些逻辑并将现成数据传送到{{1}}。
答案 1 :(得分:0)
我建议你在服务器上而不是在视图中执行此操作。定义一个表示一行数据Row
的新类(选择一个更合适的名称)。然后创建一个视图模型类。
public class Row
{
public DateTime Date { get; set; }
public int AVL { get; set; }
public int RSU { get; set; }
...
}
public class TableViewModel
{
public List<Row> DataRows { get; set; }
public Row TotalRow { get; set; }
}
您可以像在视图中一样累积和分组行,然后计算TotalRow。由于这些行位于List中,因此您可以使用Linq聚合函数。
totalRow.AVL = rows.Sum(r => r.AVL)
totalRow.RSU = rows.Sum(r => r.RSU)
这将从视图中提取所有计算代码。
@model TableViewModel
<table>
@foreach(var row in Model.DataRows)
{
<tr>
<td>@row.Date</td>
<td>@row.AVL</td>
<td>@row.RSU</td>
</tr>
}
<tr>
<td>@Model.TotalRow.Date</td>
<td>@Model.TotalRow.AVL</td>
<td>@Model.TotalRow.RSU</td>
</tr>
</table>