计算表格列中值的总和

时间:2014-05-08 09:09:57

标签: c# asp.net-mvc

我正在尝试在MVC中添加表的任何数字列的总值,并在标题行中显示总计。例如,我想在TotalCashStake列中添加所有值,并将该数字显示在标题行中。我完全不熟悉MVC,我不知道如何实现它。

这是index.cshtml页面:

这是index.cshtml页面的源代码:

@model IEnumerable<DailyReport>

@{
    ViewBag.Title = "Index";
}

<h2>Index</h2>

<p>
    @Html.ActionLink("Create New", "Create")

    @using (Html.BeginForm())
    {
    <p>
        Start Date: @Html.TextBox("StartDate") <br />
        <br />
        End Date: @Html.TextBox("EndDate") <br />
        <br />
        <input type="submit" value="Filter" />
    </p>
    }



</p>
<table class="table">
    <tr>
        <th>
            @Html.DisplayNameFor(model => model.DailyReportDate)
        </th>
        <th>
            @Html.DisplayNameFor(model => model.BettingShop)
        </th>
        <th>
            @Html.DisplayNameFor(model => model.Estate)
        </th>
        <th>
            @Html.DisplayNameFor(model => model.SisSrNumber)
        </th>
        <th>
            @Html.DisplayNameFor(model => model.ShopBalance)
        </th>
        <th>
            @Html.DisplayNameFor(model => model.TotalCashStake)
        </th>
        <th>
            @Html.DisplayNameFor(model => model.TotalOtherCashOut)
        </th>
    </tr>

@foreach (var item in Model) {
    <tr>
        <td>
            @Html.DisplayFor(modelItem => item.DailyReportDate)
        </td>
        <td>
            @Html.DisplayFor(modelItem => item.BettingShop)
        </td>
        <td>
            @Html.DisplayFor(modelItem => item.Estate)
        </td>
        <td>
            @Html.DisplayFor(modelItem => item.SisSrNumber)
        </td>
        <td>
            @Html.DisplayFor(modelItem => item.ShopBalance)
        </td>
        <td>
            @Html.DisplayFor(modelItem => item.TotalCashStake)
        </td>
        <td>
            @Html.DisplayFor(modelItem => item.TotalOtherCashOut)
        </td>
        <td>
            @Html.ActionLink("Edit", "Edit", new { id=item.DailyReportId }) |
            @Html.ActionLink("Details", "Details", new { id=item.DailyReportId }) |
            @Html.ActionLink("Delete", "Delete", new { id=item.DailyReportId })
        </td>
    </tr>
}
</table>

这是我的控制器的代码:

namespace Reporting.Controllers
{
    public class DailyReportController : Controller
    {
        private RiskEntities db = new RiskEntities();

        // GET: /DailyReport/
        public ActionResult Index(DateTime? startDate, DateTime? endDate)
        {


            if (startDate == null || endDate == null)
            {
                return View(db.DailyReports.ToList());
            }
            var endDateToUse = (DateTime) endDate;
            endDateToUse = endDateToUse.AddDays(+1);
            var dailyReports = (from dr in db.DailyReports
                                where dr.DailyReportDate >= startDate
                                && dr.DailyReportDate <= endDateToUse
                                select dr);



            return View(dailyReports.ToList());
        }

        // GET: /DailyReport/Details/5
        public ActionResult Details(Guid? id)
        {
            if (id == null)
            {
                return new HttpStatusCodeResult(HttpStatusCode.BadRequest);
            }
            DailyReport dailyreport = db.DailyReports.Find(id);
            if (dailyreport == null)
            {
                return HttpNotFound();
            }
            return View(dailyreport);
        }

        // GET: /DailyReport/Create
        public ActionResult Create()
        {
            return View();
        }

        // POST: /DailyReport/Create
        // To protect from overposting attacks, please enable the specific properties you want to bind to, for 
        // more details see http://go.microsoft.com/fwlink/?LinkId=317598.
        [HttpPost]
        [ValidateAntiForgeryToken]
        public ActionResult Create([Bind(Include="DailyReportId,DailyReportDate,BettingShop,Estate,SisSrNumber,ShopBalance,TotalCashStake,TotalOtherCashOut,TotalPhoneAccountCashDeposit,TotalPhoneAccountCashWithdrawl,TotalCashFromBank,TotalTransfersFromOtherShops,TotalPaidByOtherShops,TotalCashToBank,TotalTransfersToOtherShops,TotalPaidHereForOtherShops,TotalExpenses,TotalOtherCashIn,TotalPayoutCancellations,TotalStakes,TotalStakeLessVoids,TotalVoid,TotalPayouts,TotalCreditPayouts,TotalCreditStakes,TotalCreditVoids,TotalEndFloatActual,PendingPayouts6Days,PendingPayouts1Day,TotalCashIn,TotalCashPayoutIncludingVoids,TotalCashPayoutExcludingVoids,TotalCashPayoutForHere,NumberCashSlips,NumberAccountSlips,NumberCashSlipsPaidForOtherDays,NumberCashSlipsPaidForToday,TotalTillTransferIn,TotalTillTransferOut,TotalCashOut,TotalCashLeftHandSide,TotalCashRightHandSide")] DailyReport dailyreport)
        {
            if (ModelState.IsValid)
            {
                dailyreport.DailyReportId = Guid.NewGuid();
                db.DailyReports.Add(dailyreport);
                db.SaveChanges();
                return RedirectToAction("Index");
            }

            return View(dailyreport);
        }

        // GET: /DailyReport/Edit/5
        public ActionResult Edit(Guid? id)
        {
            if (id == null)
            {
                return new HttpStatusCodeResult(HttpStatusCode.BadRequest);
            }
            DailyReport dailyreport = db.DailyReports.Find(id);
            if (dailyreport == null)
            {
                return HttpNotFound();
            }
            return View(dailyreport);
        }

        // POST: /DailyReport/Edit/5
        // To protect from overposting attacks, please enable the specific properties you want to bind to, for 
        // more details see http://go.microsoft.com/fwlink/?LinkId=317598.
        [HttpPost]
        [ValidateAntiForgeryToken]
        public ActionResult Edit([Bind(Include="DailyReportId,DailyReportDate,BettingShop,Estate,SisSrNumber,ShopBalance,TotalCashStake,TotalOtherCashOut,TotalPhoneAccountCashDeposit,TotalPhoneAccountCashWithdrawl,TotalCashFromBank,TotalTransfersFromOtherShops,TotalPaidByOtherShops,TotalCashToBank,TotalTransfersToOtherShops,TotalPaidHereForOtherShops,TotalExpenses,TotalOtherCashIn,TotalPayoutCancellations,TotalStakes,TotalStakeLessVoids,TotalVoid,TotalPayouts,TotalCreditPayouts,TotalCreditStakes,TotalCreditVoids,TotalEndFloatActual,PendingPayouts6Days,PendingPayouts1Day,TotalCashIn,TotalCashPayoutIncludingVoids,TotalCashPayoutExcludingVoids,TotalCashPayoutForHere,NumberCashSlips,NumberAccountSlips,NumberCashSlipsPaidForOtherDays,NumberCashSlipsPaidForToday,TotalTillTransferIn,TotalTillTransferOut,TotalCashOut,TotalCashLeftHandSide,TotalCashRightHandSide")] DailyReport dailyreport)
        {
            if (ModelState.IsValid)
            {
                db.Entry(dailyreport).State = EntityState.Modified;
                db.SaveChanges();
                return RedirectToAction("Index");
            }
            return View(dailyreport);
        }

        // GET: /DailyReport/Delete/5
        public ActionResult Delete(Guid? id)
        {
            if (id == null)
            {
                return new HttpStatusCodeResult(HttpStatusCode.BadRequest);
            }
            DailyReport dailyreport = db.DailyReports.Find(id);
            if (dailyreport == null)
            {
                return HttpNotFound();
            }
            return View(dailyreport);
        }

        // POST: /DailyReport/Delete/5
        [HttpPost, ActionName("Delete")]
        [ValidateAntiForgeryToken]
        public ActionResult DeleteConfirmed(Guid id)
        {
            DailyReport dailyreport = db.DailyReports.Find(id);
            db.DailyReports.Remove(dailyreport);
            db.SaveChanges();
            return RedirectToAction("Index");
        }

        protected override void Dispose(bool disposing)
        {
            if (disposing)
            {
                db.Dispose();
            }
            base.Dispose(disposing);
        }
    }
}

2 个答案:

答案 0 :(得分:5)

我建议您计算控制器内的总和,然后扩展模型以将该值分别包含在表数据中。这样,您的视图仅关注显示从服务器发送的数据,而不是动态计算值。这也将提高您网页的效果。

答案 1 :(得分:1)

我建议使用DataTables |用于jQuery的表插件,它是一个开源插件,或类似的东西,而不是为每个控制器重新发明轮子。 http://datatables.net/

这适用于所有类型的表格数据

你可以在这里看到他们如何进行总计: http://datatables.net/examples/advanced_init/footer_callback.html

这也将为您提供开箱即用的分页和排序等其他好处。