Добавление текущей суммы в группу по дате в новой строке
Я работаю с Syncfusion DocIO с созданием таблиц в .docx с некоторыми реквизитами и не могу создавать строку с группой по дате => каждый новый год, мне нужна новая строка с текущей суммой. Я уже создал строку суммы, но эта строка возвращает всю сумму для дополнительных свойств (столбцов), поэтому все, что мне нужно, это для каждого года в новой текущей сумме строки.
Мой пример:
Мой код:
int i = 1;
foreach (var amortizationData in aAmortizationPlanLoanPayment)
{
WTableRow tableRow = tableAmortizationData.AddRow(true);
tableRow.Cells[0].AddParagraph().AppendText(i.ToString());
tableRow.Cells[1].AddParagraph().AppendText(amortizationData.Anuity.ToString());
tableRow.Cells[2].AddParagraph().AppendText(amortizationData.InterestPaid.ToString());
tableRow.Cells[3].AddParagraph().AppendText(amortizationData.PrincipalPaid.ToString());
tableRow.Cells[4].AddParagraph().AppendText(amortizationData.BalanceDue.ToString());
tableRow.Cells[5].AddParagraph().AppendText(amortizationData.Date.AddMonths(aAmortizationPlanLoanPaymentData.Moratorium).ToString("yyyy/M/dd"));
i++;
if (amortizationData.Date.Month == 12)
{
WTableRow YearSumrow = tableAmortizationData.AddRow(true);
WTableCell cell1 = YearSumrow.Cells[0];
var sumYearIWTextRange = cell1.AddParagraph().AppendText($"Sum for year {amortizationData.Date.Year}");
sumYearIWTextRange = YearSumrow.Cells[1].AddParagraph().AppendText(); // need here running sum inside appendText();
sumYearIWTextRange = YearSumrow.Cells[2].AddParagraph().AppendText(); // need here running sum inside appendText();
sumYearIWTextRange = YearSumrow.Cells[3].AddParagraph().AppendText(); // need here running sum inside appendText();
}
if (amortizationData.BalanceDue == 0.00)
{
WTableRow LastYearRow = tableAmortizationData.AddRow(true);
WTableCell cellLastYear = LastYearRow.Cells[0];
var sumLastYearIWTextRange = cellLastYear.AddParagraph().AppendText($"Sum for year {amortizationData.Date.Year}");
sumLastYearIWTextRange = LastYearRow.Cells[1].AddParagraph().AppendText(); // need here running sum inside appendText();
sumLastYearIWTextRange = LastYearRow.Cells[2].AddParagraph().AppendText(); // need here running sum inside appendText();
sumLastYearIWTextRange = LastYearRow.Cells[3].AddParagraph().AppendText(); // need here running sum inside appendText();
}
}
WTableRow tableRowSum = tableAmortizationData.AddRow(true);
WTableCell cell = tableRowSum.Cells[0];
var totalIWTextRage = cell.AddParagraph().AppendText("Sum all");
var totalAmountIWTextRage = tableRowSum.Cells[1].AddParagraph().AppendText(aAmortizationPlanLoanPayment.Sum(p => p.Anuity).ToString());
totalAmountIWTextRage = tableRowSum.Cells[2].AddParagraph().AppendText(aAmortizationPlanLoanPayment.Sum(p => p.InterestPaid).ToString());
totalAmountIWTextRage = tableRowSum.Cells[3].AddParagraph().AppendText(aAmortizationPlanLoanPayment.Sum(p => p.PrincipalPaid).ToString());
1 ответ
Если у вас есть несколько чисел (уже сгруппированных и суммированных по разным датам, но это не обязательно);
(DateTime D, int V)[] rows = new [] {
(new(1999, 12, 1), 111),
(new(2000, 1, 1), 222),
(new(2000, 2, 1), 333),
(new(2000, 3, 1), 444),
(new(2001, 1, 1), 555)
}
Тогда, конечно, вы можете сделать свою текущую сумму с LINQ:
foreach(var row in rows){
var runSum = rows.Where(r => r.D <= row.D).Sum(r => r.V);
}
Но это гораздо более расточительно, чем просто хранить переменную:
var runSum = 0;
foreach(var row in rows){
runSum += row.V;
}
Если вы хотите, чтобы ваша текущая сумма время от времени начиналась заново, просто запомните предыдущую строку (естественно, ваши строки должны быть в порядке):
var prevRow = rows[0];
var runSum = 0;
foreach(var row in rows){
if(prevRow.D.Year != row.D.Year)
runSum = 0;
runSum += row.V;
}
Сделайте свой вывод над строкой, в которой вы увеличиваете runSum, если вы не хотите, чтобы текущее значение строки отображалось в общей сумме, или под ним, если вы это делаете