在MVC中使用相同变量作为输入的总列数

时间:2017-09-30 18:35:23

标签: asp.net-mvc

我设法从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>
}

有人可以提出建议吗? 感谢

2 个答案:

答案 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>