diff --git a/App_Code/modExtensiones.vb b/App_Code/modExtensiones.vb index 47a330307..854ab6997 100644 --- a/App_Code/modExtensiones.vb +++ b/App_Code/modExtensiones.vb @@ -1195,6 +1195,24 @@ Namespace Extensiones End If Return TmpDt + End Function + + + Public Function GroupByDt(dtt As DataTable, ByVal RowFilter As String, ByVal Orderby As String, ByVal GroupByColumns As String(), ByVal AggregateColumn As String) As DataTable + Dim dv As DataView = New DataView(dtt, RowFilter, Orderby, DataViewRowState.CurrentRows) + Dim dtGroup As DataTable = dv.ToTable(True, GroupByColumns) + dtGroup.Columns.Add("TotalCount", GetType(Integer)) + dtGroup.Columns.Add("TotalSum", GetType(Decimal)) + Dim filtros As New List(Of String) + For Each dr As DataRow In dtGroup.Rows + For Each col As String In GroupByColumns + filtros.Add($"{col}='{dr(col)}'") + Next + dr("TotalCount") = dtt.Compute($"Count({AggregateColumn})", String.Join(" AND ", filtros)) + dr("TotalSum") = dtt.Compute($" SUM({AggregateColumn})", String.Join(" AND ", filtros)) + Next + + Return dtGroup End Function