好的,所以这可能是一个非常简单的问题,我有一个难以置信的困难时间提出解决方案。
我有一个简单的ASP.Net Web应用程序,它根据用户选择的属性向/从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框架。
答案 0 :(得分:0)
查看您的代码,我希望您可以通过提供指导来完成;
在其中添加FooterTemplate
和Label
在ItemDataBound
控件
Repeater
使用以下条件总和值
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 } }
答案 1 :(得分:0)
在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");
}
}