Сводка по группам (Общая стоимость, Стоимость товара)
У меня есть сводка по сетке. Пользовательский калькулятор, содержащий итоговую сумму и по одному на элемент. Мне нужно динамически пересчитать значения в соответствии с созданной вами группой, сохраняя итоговую сумму, что уже правильно.
В Документах DevExpress я нахожу это: https://www.devexpress.com/Support/Center/Question/Details/Q273195
В SO я нахожу это: Как добавить средневзвешенную сводку в DevExpress XtraGrid?
Мой метод:
private void gdvResultados_CustomSummaryCalculate(object sender, DevExpress.Data.CustomSummaryEventArgs e)
{
#region Obtendo chave/valor para o cálculo
// Get the summary ID.
int summaryID = Convert.ToInt32((e.Item as GridSummaryItem).Tag);
GridView grid = sender as GridView;
// Chave para o agrupamento
var chaveDoAgrupamento = grid.GetGroupRowValue(e.RowHandle);
decimal vendas = 0M;
decimal meta = 0M;
decimal vlTotalVendido = 0M;
decimal vlTotalMeta = 0M;
// Initialization
if (e.SummaryProcess == CustomSummaryProcess.Start)
{
vendas = 0M;
meta = 0M;
vlTotalVendido = 0M;
vlTotalMeta = 0M;
}
#endregion
#region Calculando
// Calculation
if (e.SummaryProcess == CustomSummaryProcess.Calculate)
{
}
#endregion
#region Finalizando
if (!e.IsGroupSummary) return;
// Finalization
if (e.SummaryProcess == CustomSummaryProcess.Finalize)
{
if (Equals(((GridGroupSummaryItem)e.Item).Tag, 1))
{
e.TotalValue = grid.GetGroupRowValue(e.RowHandle, grid.GroupedColumns[e.GroupLevel]);
}
else
switch (summaryID)
{
case 0: // Total atingido da meta
foreach (var linha in lsBI)
{
vlTotalVendido += Convert.ToDecimal(linha.VlBrutoItem);
vlTotalMeta += Convert.ToDecimal(linha.ValorMGP);
}
e.TotalValue = vlTotalVendido / vlTotalMeta * 100;
break;
case 4: // meta do item
if (lsBI.Any(j => j.NmCaracteristicaPessoa == chaveDoAgrupamento.ToString()))
{
vendas = lsBI.Where(k => k.NmCaracteristicaPessoa == territorio.ToString()).Sum(v => Convert.ToDecimal(v.VlBrutoItem));
meta = lsBI.Where(t => t.NmCaracteristicaPessoa == territorio.ToString()).Sum(m => Convert.ToDecimal(m.ValorMGP));
if (vendas > 0 && meta > 0)
{
e.TotalValue = 0;
e.TotalValue = vendas / meta * 100;
}
}
else
if (lsBI.Any(j => j.NmGrupoProdutoMeta == chaveDoAgrupamento.ToString()))
{
vendas = lsBI.Where(k => k.NmGrupoProdutoMeta == chaveDoAgrupamento.ToString()).Sum(v => Convert.ToDecimal(v.VlBrutoItem));
meta = lsBI.Where(t => t.NmGrupoProdutoMeta == chaveDoAgrupamento.ToString()).Sum(m => Convert.ToDecimal(m.ValorMGP));
e.TotalValue = 0;
if (vendas > 0 && meta > 0)
{
e.TotalValue = vendas / meta * 100;
}
}
else
if (lsBI.Any(j => j.NmFamiliaProduto == chaveDoAgrupamento.ToString()))
{
vendas = lsBI.Where(k => k.NmFamiliaProduto == chaveDoAgrupamento.ToString()).Sum(v => Convert.ToDecimal(v.VlBrutoItem));
meta = lsBI.Where(t => t.NmFamiliaProduto == chaveDoAgrupamento.ToString()).Sum(m => Convert.ToDecimal(m.ValorMGP));
e.TotalValue = 0;
if (vendas > 0 && meta > 0)
{
e.TotalValue = vendas / meta * 100;
}
}
break;
}
}
#endregion
}