2011-06-14 115 views
0

我是使用MVC的新手,我有一個關於在表格中總結行數據的問題。在MVC中彙總表格

一些背景:

首先,我用普通的SQL語句收集大量數據。我使用DataTable來存儲數據。然後我用普通的HTML表格輸出數據。這工作非常好,我沒有問題。

我現在想總結每行的所有值並在底行顯示結果。

我知道我可以在數據層中做到這一點。循環訪問數據表,並將這些行的值彙總到一個新行中。然後最後追加「彙總行」作爲最後一行。

一些代碼:

<tr class="header"> 
     <th>Person</th> 
     <th>NrOfRows</th> 
    </tr> 
    <% foreach (System.Data.DataRow row in Model.Rows) { %> 
    <tr> 
     <td><%: row["Name"].ToString()%></td> 
     <td><%: row["NrOfRows"].ToString()%></td> 
    </tr> 

可否請你指點我,這將是這樣做

+4

我認爲首選方法是將代碼放入控制器或模型代碼中,而不是視圖。 – Zruty 2011-06-14 11:36:24

+0

我完全同意,我在控制器中有代碼。 – PKK 2011-06-15 07:29:46

回答

1

不要在ControllerAction計算的最佳/最簡單的方法。像這樣...

public ActionResult Index() 
{ 
    var rows = this.repository.GetAll(); 
    this.ViewData["total"] = rows.AsEnumerable().Select(o => o["NrOfRows"]).Select(o => int.Parse(o)).Sum(); 

    return this.View(rows); 
} 
+0

我在這裏得到了同樣的問題:不能轉換lambda表達式類型'字符串',因爲它不是一個委託類型(我已經說過:使用System.Linq;) – PKK 2011-06-14 15:13:26

+0

這是AsEnumerable()丟失。該解決方案很好地工作。謝謝! – PKK 2011-06-15 07:29:19

+0

在我的情況下,我不得不使用Convert.ToInt32(o)而不是int.Parse(o) – PKK 2011-06-15 09:02:57

1

你應該考慮,如果你不想「打包」你的數據到模型(類)。在模型部分MVC項目中添加類:

public class YourModel 
{ 
public string Name 
public int NrOfRows 
public YourModel(string name, int nrOfRows) 
{ 
    Name = name; 
    NrOfRows = nrOfRows; 
} 
} 

然後在你的控制器方法你做:

public ActionResult Summarize(/*parameters list*/) 
{ 
var rows = (get data) //In here you assign here your table content 
ViewData.Model = rows.Select(row => new YourModel(row["Name"], int.Parse(row["NrOfRows"]))); 
ViewData["nrRowCount"] = rows.Select(row => row.NrOfRows).Sum(); 
return View(); 
} 

和你去查看:

<table> 
<th>Person</th> 
<th>nrOfRows</th> 
<%: foreach(var yourModel in Model) { :%> 
    <tr> 
    <td>yourModel.Name</td> 
    <td>yourModel.NrOfRows</td> 
    </tr> 
    <%: } :%> 
    <tr> 
    <td>Summary: </td> 
    <td> <%: ViewData["nrRowCount"] %:></td> 
    </tr> 
</table> 
+0

謝謝,我在嘗試此代碼時遇到以下錯誤:無法將lambda表達式轉換爲鍵入'string',因爲它不是委託類型(我已經聲明:使用System.Linq;) – PKK 2011-06-14 15:12:46

+1

你使用「System.Data.DataSetExtensions」嗎?確保你使用了System.Data和System.Linq語句。你必須得到你的行「AsEnumerable」。本主題中的更多信息:http://social.msdn.microsoft.com/Forums/en-US/adodotnetentityframework/thread/ad34a9f1-2849-478d-9405-b07a54b09aaf/ 檢查史蒂文Killick後! – TrN 2011-06-15 06:48:56

+0

感謝這是AsEnumerable()失蹤。 – PKK 2011-06-15 07:24:19