2017-09-30 5 views
0

私は、ストアドプロシージャを使用してSQLデータベースからデータを抽出し、テーブルのデータムに表示しています。私がしたいのは、各列の列の合計を持つことですが、同じ変数を使って(ループ内で)作成されるため、これを行う方法については混乱しています。これは、このMVCの入力と同じ変数を使用する合計の列

<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> 
} 

のように見える作成

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コードは誰でもしてください助言することはできますか? ありがとう

答えて

1

それぞれの項目にcodeというプロパティがあります。あなたのテーブルヘッダーはハードコードされているので、私はこれらが唯一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に既製のデータを取得する方が良いだろう。

+0

私はModel.Where(項目=> item.code == "AVL")@ ​​合計 ​​をloop' FOREACHの外でこのコードをしようとすると@adiga HI、私はちょうど0を取得しています。和(=> a.Column2) ' –

+0

@GeraldOakhamは' code'値 'aVL'かある' avl' – adiga

+0

こんにちは、それはふてくされ次に、あなたが他の何か間違ったことをやっているAVL –

0

これは、ビューではなくサーバーで行うことをお勧めします。データの行を表す新しいクラスを定義します(より適切な名前を選択してください)。次に、ビューモデルクラスを作成します。

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を計算します。これらの行はリスト内にあるので、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> 
関連する問題