public MakerPivotTable(DataTable dataTable, ConditionForMakingPivotTable condition) { _condition = ExpandOrderColumnsInConditionWithNewColumns(condition); _source = SetInternetTrafic( AddNewColumnsAtDataTable(dataTable, _condition) .SetColumnsOrder(condition.ColumnsCollectionAtRightOrder), _condition); }
/// <summary> /// Filter DataTable /// </summary> /// <param name="source">DataTable with Data</param> /// <returns></returns> public DataTable Filter(DataTable source, ConditionForMakingPivotTable condition) { DataTable result = source .AsEnumerable() .Where(myRow => myRow.Field <string>(condition.NameColumnWithFilteringService) .Contains(condition.FilteringService)) ?.CopyToDataTable(); return(result); }
public ConditionForMakingPivotTable ExpandOrderColumnsInConditionWithNewColumns(ConditionForMakingPivotTable condition) { ConditionForMakingPivotTable result = condition; if (condition?.NameNewColumnWithSummary?.Length > 0 && condition?.NameNewColumnWithCount?.Length > 0) { string[] orderColumns = condition.ColumnsCollectionAtRightOrder .ExpandArray(condition.NameNewColumnWithSummary) .ExpandArray(condition.NameNewColumnWithCount); result.ColumnsCollectionAtRightOrder = orderColumns; } return(result); }
private DataTable AddNewColumnsAtDataTable(DataTable dataTable, ConditionForMakingPivotTable condition) { DataTable dt = dataTable.Copy(); // DataColumn column = dt.Columns.Add(condition.NameNewColumnWithSummary, System.Type.GetType("System.Decimal")); dt.Columns.Add(condition.NameNewColumnWithCount, System.Type.GetType("System.Int32")); foreach (System.Data.DataColumn col in dt.Columns) { col.ReadOnly = false; } //column.Expression = $"{_condition.NameColumnWithFilteringServiceValue } * Quantity"; dt.AcceptChanges(); return(dt); }
public DataTable SetInternetTrafic(DataTable dataTable, ConditionForMakingPivotTable condition) { DataTable dt = dataTable.Copy(); foreach (DataRow row in dt.Rows) { string cell = row[condition.NameColumnWithFilteringService]?.ToString()?.Trim()?.ToUpper(); if (cell != null && cell.Contains(condition.FilteringService.ToUpper())) { row[condition.NameNewColumnWithSummary] = row[condition.NameColumnWithFilteringServiceValue]?.ToString()?.ToInternetTrafic("Mb"); // ?? 0; row[condition.NameNewColumnWithCount] = row[condition.NameColumnWithFilteringServiceValue]?.ToString()?.ToInternetTrafic("Mb") > 0 ? 1 : 0; //только для тех у кого был трафик будет отличный от нуля результат } // иначе при генерации сводной таблицы в линк-запросе в MakePivot() будет ошибка (не обрабатывает данные) // или же предварительно перед MakePivot() выполнять фильтрование записей в Filter() - будут отсутствовать записи с отсутствующим значением, т.е. там где был не трафик, а звонки или смс else { row[condition.NameNewColumnWithSummary] = 0; row[condition.NameNewColumnWithCount] = 0; } } dt.AcceptChanges(); return(dt); }