Суммируйте столбцы в MVC C # Razor View - PullRequest
0 голосов
/ 09 октября 2018

Мне интересно, могу ли я суммировать десятичные числа во всех столбцах, которые динамически генерируются в виде бритвы, без необходимости изменять это в controller и viewModel.Я также буду рад попробовать вариант jQuery.

ViewModel

 public class LedgerViewModel
    {

    public LedgerViewModel(int PayCategoryCount)
    {
        PayCollection = new List<decimal>(new decimal[PayCategoryCount]);
    }
public DateTime PDate  { get; set; }


public class MonthlyPaymentsVM
{   public int PayCategoryId { get; set; }
    [DisplayFormat(DataFormatString = "{0:MMMM yyyy}")]
    public DateTime Date { get; set; }
    public IEnumerable<string> PaymentCategories { get; set; }
    public List<LedgerViewModel> Payments { get; set; }
    public List<LedgerViewModel> Member { get; set; }
} 

контроллер

public ActionResult Report(int year, int no, string nom, Guid gcode)
        {
            DateTime startdate = (new DateTime(DateTime.Now.Year - 1, 7, 1));
            DateTime enddate = (new DateTime(DateTime.Now.Year, 7, 1));
            DateTime date = DateTime.Now;

            //get all payments
            var a = from of in db.OfflinePayMents.Include(i => i.Customer).Include(i => i.PaymentCategory).ToList().Where(x => x.PDate >= startdate && x.PDate < enddate && x.POK && x.CustomerGuid=gcode) select new { of.Customer, of.PaymentCategory, of.CustomerID, of.PaymentCategoryID, of.PDate, of.TxnId, of.Pay, of.PType };

            var grouped = a.GroupBy(x => new { customer = x.CustomerID, PaymentCategory = x.PaymentCategory.PaymentCategoryID, txn = x.TxnId, pd = x.PDate, x.PType }).Select(x => new
            {
                Name = x.First().Customer.Name,
                Customer = x.First().Customer,
                PaymentCategory = x.First().PaymentCategory,
                Txn = x.First().TxnId,
                Pd = x.First().PDate,
                PType = x.First().PType,
                cid = x.First().PaymentCategoryID,
                Pay= x.Sum(y => y.Pay)

            });

            var data = grouped.GroupBy(x => x.Txn);
            var PaymentCategories = db.PaymentCategories.OrderBy(z => z.Order);
            var PayCategoryCount = PaymentCategories.Count();
            var PaymentCategoryIDs = PaymentCategories.Select(x => x.PaymentCategoryID).ToList();

            var model = new MonthlyPaymentsVM()
            {
                //Member = members,
                Date = date,
                PaymentCategories = PaymentCategories.Select(z => z.PaymentCategoryTitle),
                Payments = new List<LedgerViewModel>()
            };

            foreach (var group in data)
            {
                LedgerViewModel payment = new LedgerViewModel(PaymentCategoryCount);
                var pd = group.First().Pd;
                payment.PDate = pd;
                foreach (var item in group)
                {
                    int index = PaymentCategoryIDs.IndexOf(item.PaymentCategory.PaymentCategoryID);
                    if (index < 0)
                    {

                        payment.PayCollection[index + 1] = item.Pay;
                    }
                    else
                    {
                        payment.PayCollection[index] = item.Pay;
                    }
                    payment.Total += item.Pay;
                }
                model.Payments.Add(payment);

            }


            return View(model);
        }

Razor View

<table class="doubleborder" width="99%" border="0" align="center" cellpadding="0" cellspacing="0">
            <thead>
                <tr>
                    <th>Date</th>
                    @foreach (var payname in Model.PaymentCategories)
                    {
                        <th>@payname</th>
                    }
                </tr>
            </thead>
            <tbody>
                @foreach (var item in Model.Payments)
                {
                    <tr>
                        <td>@item.PayDate.ToString("dd/MM/yyyy")</td>

                        @foreach (var amount in item.PayCollection)
                        {
                            <td>@amount.ToString("c")</td>
                        }



                    </tr>
                }
     <tr class="doubleborder">
     <td>Total:</td>
      @foreach (var item in Model.PaymentCategories)
      {
      <td>
looking at getting sum totals of each column here
      </td>
    }

    </tr>
    </tbody>
    </table>

Так что это группы по клиенту.Платежи сгруппированы по дате транзакции и повторяются в цикле foreach в представлении.

Спасибо, если вы можете помочь.

1 Ответ

0 голосов
/ 09 октября 2018

Если я правильно понимаю вашу модель, это то, что вы ищете:

@Model.Payments.Sum(i => i.Paycollection.Sum(x => x.amount));

Обновите, основываясь на вашем комментарии: (и при условии, что все столбцы имеют значение длявсе платежиКоллекции)

@for(int i = 0 ; i < PaymentCategories.Count(); i++)
{
    <td>
        Model.Payments.Sum(x => x.PayCollection[i]); //this will throw an exception if the value at index is not defined
    </td>
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...