簡體   English   中英

ASP.NET對LINQ中存儲過程返回的列求和

[英]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%">&nbsp</td>
                <td style="width:3%">&nbsp</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();
}

這樣就產生了一個不錯的,簡單的轉發器:

ASP中繼器

我的問題是:在當前代碼的上下文中,我如何輕松將總預算列求和到轉發器的FooterTemplate中?

我不確定這是否必要,但是我在.NET 4.5框架上構建。

查看您的代碼,希望您能提供指導。

  1. 在其中添加一個FooterTemplate和一個Label

  2. Repeater控件上實現ItemDataBound

  3. 使用以下條件總和值

 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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM