[英]ASP.NET Sum a column returned from stored procedure in LINQ
好的,所以這可能是一個非常簡單的問題,我很難解決這個問題。
我有一個簡單的ASP.Net Web應用程序,該應用程序根據用戶選擇的屬性向SQL Server數據庫提交和從SQL Server數據庫檢索基本項目。
在此項目中,我有許多內置於SQL Server中的存儲過程,用於處理從應用程序到數據庫的數據傳輸。 我在ASP.NET項目中使用LINQ連接到存儲過程。
特別是,我有一個ASP.NET Repeater
設置,它是所選公司所有已提交的資本項目的填充列表。 我的代碼很簡單:
中繼器:
<asp:Repeater ID="rptProjects" runat="server" OnItemCommand="rptProjects_ItemCommand">
<HeaderTemplate>
<table style="table-layout:auto; width:100%">
<tr>
<td style="width:2%"><b>Item #</b></td>
<td style="width:2%"><b>Priority</b> </td>
<td style="width:10%"><b>Project Name</b></td>
<td style="width:20%"><b>Description</b></td>
<td style="width:4%"><b>Reason</b></td>
<td style="width:3%"><b>Category</b></td>
<td style="width:2%"><b>Asset Age</b></td>
<td style="width:3%"><b>Est. Useful Life</b></td>
<td style="width:2%"><b>Qty</b></td>
<td style="width:2%"><b>Unit Type</b></td>
<td style="width:3%"><b>Unit Cost</b></td>
<td style="width:3%"><b>Total Budget</b></td>
<td style="width:20%"><b>Owner Comments</b></td>
<td style="width:3%"> </td>
<td style="width:3%"> </td>
</tr>
</table>
</HeaderTemplate>
<ItemTemplate>
<table style="width:100%">
<tr>
<td style="width:2%">R#</td>
<td style="width:2%"><%#Eval("Priority") %> </td>
<td style="width:10%"><%#Eval("ProjectName") %></td>
<td style="width:20%"><%#Eval("Description") %> </td>
<td style="width:4%"><%#Eval("Reason") %> </td>
<td style="width:3%"><%#Eval("Category") %></td>
<td style="width:2%"><%#Eval("AssetAge") %> </td>
<td style="width:3%"><%#Eval("AssetUsefulLife") %></td>
<td style="width:2%"><%#Eval("Quantity") %> </td>
<td style="width:2%"><%#Eval("UnitType") %></td>
<td style="width:3%"><%#Eval("UnitCost", "{0:C0}") %></td>
<td style="width:3%"><%#Eval("TotalAmount", "{0:C0}") %></td>
<td style="width:20%"><%#Eval("OwnerNotes") %></td>
<td style="width:3%">
<asp:Button ID="btnDelete" runat="server" Text="X"
ToolTip="Delete the selected project."
CommandName="Delete" CommandArgument='<%# DataBinder.Eval(Container.DataItem, "ItemCode") %>'
CausesValidation="False" />
</td>
<td style="width:3%">
<asp:Button ID="btnUpdate" runat="server" Text="Edit"
ToolTip="Update the selected project."
CommandName="Update" CommandArgument='<%# DataBinder.Eval(Container.DataItem, "ItemCode") %>'
CausesValidation="False" />
</td>
</tr>
</table>
</ItemTemplate>
</asp:Repeater>
使用dataContext在C#中非常簡單地填充該轉發器,該dataContext執行一個存儲過程,該存儲過程返回該屬性的所有項目。
C#代碼:
//Load any projects submitted for the property
using(var dataContext = new CAPEXDataConnDataContext())
{
rptProjects.DataSource = dataContext.web_CAPEXProjectsByCompany(Session["PropertyNumber"].ToString());
rptProjects.DataBind();
}
這樣就產生了一個不錯的,簡單的轉發器:
我的問題是:在當前代碼的上下文中,我如何輕松將總預算列求和到轉發器的FooterTemplate
中?
我不確定這是否必要,但是我在.NET 4.5框架上構建。
查看您的代碼,希望您能提供指導。
在其中添加一個FooterTemplate
和一個Label
在Repeater
控件上實現ItemDataBound
使用以下條件總和值
protected void repeater_ItemDataBound(object sender, RepeaterItemEventArgs e) { if (e.Item.ItemType == ListItemType.Footer) { //Write your logic to retrieve each value from the collection //YourRepeaterName.Items and add it to Label at the end } }
在C#中定義一個全局變量,並在ItemDataBound
處理程序中求和。 這樣的事情。
decimal grandTotal = 0;
//...
using(var dataContext = new CAPEXDataConnDataContext())
{
rptProjects.DataSource = dataContext.web_CAPEXProjectsByCompany(Session["PropertyNumber"].ToString());
grandTotal = 0;
rptProjects.DataBind();
}
//...
protected void rptProjects_ItemDataBound(object sender, RepeaterItemEventArgs e)
{
if(e.Item.ItemType == ListItemType.Item || e.Item.ItemType == ListItemType.AlternatingItem)
{
grandTotal += (decimal)e.Item.DataItem["TotalAmount"];
}
if(e.Item.ItemType == ListItemType.Footer)
{
((Literal)e.Item.FindControl("grandTotal")).Text = grandTotal.ToString("C");
}
}
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.