public P_PUT(int id, bool deny, AGREGATE_ACTION avg) : this() { m_iId = id; m_bDeny = deny; m_avg = avg; }
/// <summary> /// Заполнение датагрида /// </summary> /// <param name="inValues">Список входных значений</param> /// <param name="outValues">Список выходных значений</param> public void ShowValues(IEnumerable <HandlerDbTaskCalculate.VALUE> inValues , IEnumerable <HandlerDbTaskCalculate.VALUE> outValues) { int idAlg = -1 , idPut = -1 , idPutCell = -1 , iCol = 0; float fltVal = -1F, fltColumnAgregateValue = 0; AGREGATE_ACTION columnAction = AGREGATE_ACTION.UNKNOWN; HandlerDbTaskCalculate.IPUT_PARAMETERChange putPar = new HandlerDbTaskCalculate.PUT_PARAMETER(); IEnumerable <HandlerDbTaskCalculate.VALUE> columnValues = null; IEnumerable <HandlerDbTaskCalculate.VALUE> cellValues = null; DataGridViewRow row; #region делегат для поиска значений во входных аргументах (для столбца; для ячейки) Func <HandlerDbTaskCalculate.VALUE, int, bool> get_values = (HandlerDbTaskCalculate.VALUE value, int id_put) => { return((value.m_IdPut == id_put) && (((value.stamp_value - DateTime.MinValue).TotalDays > 0) || ((!((value.stamp_value - DateTime.MinValue).TotalDays > 0))) )); }; #endregion #region делегат для отображения значений с попутной установкой значений свойств ячейки, локальных переменных Action <DataGridViewCell, HandlerDbTaskCalculate.VALUE, AGREGATE_ACTION> show_value = (DataGridViewCell cell, HandlerDbTaskCalculate.VALUE value, AGREGATE_ACTION c_action) => { fltVal = value.value; if ((c_action == AGREGATE_ACTION.UNKNOWN)) { fltColumnAgregateValue += fltVal; } else { ; } //cell.Tag = new CELL_PROPERTY() { m_Value = fltVal, m_iQuality = value.m_iQuality }; cell.ReadOnly = Columns[iCol].ReadOnly || double.IsNaN(fltVal); // отобразить с количеством знаков в соответствии с настройками cell.Value = fltVal; cell.ToolTipText = fltVal.ToString(); }; #endregion // Т.к. предполагается, что в наличии минимальный набор: "строка с данными" + "итоговая строка" if (RowCount > 1) { // отменить обработку события - изменение значения в ячейке представления //activateCellValue_onChanged(false); // возможно, цикл по строкам? foreach (DataGridViewColumn col in Columns) { iCol = col.Index; fltColumnAgregateValue = 0F; try { // получаем id колонки, по логике = id станции putPar = (HandlerDbTaskCalculate.PUT_PARAMETER)((COLUMN_TAG)col.Tag).value; idPut = putPar.m_Id; // все значения, относящиеся к выбранному id (общестанц.) ??? перенести columnValues = inValues.Where(value => get_values(value, idPut)); columnValues = columnValues.Union(outValues.Where(value => get_values(value, idPut))); idAlg = putPar.m_idNAlg; // получить тип действия над переменной (суммирование/усреднение) columnAction = ((COLUMN_TAG)col.Tag).ActionAgregateCancel == true ? AGREGATE_ACTION.UNKNOWN : getColumnAction(idAlg); for (int ind = 0; ind < Rows.Count - 1; ind++) // исключая строку "Итого" { row = Rows[ind]; // id параметра для конкретной ТГ idPutCell = (Int32)row.Cells[iCol].Tag; // все значения, относящиеся к выбранному id (конкр. оборуд.) cellValues = inValues.Where(value => get_values(value, idPutCell)); cellValues = columnValues.Union(outValues.Where(value => get_values(value, idPutCell))); if (columnValues.Count() > 0) { // есть значение хотя бы для одной строки foreach (HandlerDbTaskCalculate.VALUE value in cellValues) { show_value(row.Cells[iCol], value, columnAction); } } else { // нет значений ни для одной строки Logging.Logg().Error(string.Format(@"DataGridViewValues::ShowValues () - нет строк для отображения..."), Logging.INDEX_MESSAGE.NOT_SET); } } // вывод суммарных значений (строка "Итого") ??? необходим отдельный метод для усреднения, зачем??? if ((fltColumnAgregateValue > float.MinValue) && (!(columnAction == AGREGATE_ACTION.UNKNOWN))) { Rows[Rows.Count - 1].Cells[iCol].Value = columnAction == AGREGATE_ACTION.SUMMA ? fltColumnAgregateValue : fltColumnAgregateValue / (Rows.Count - 1); } else { ; } } catch (Exception e) { Logging.Logg().Exception(e, @"DataGridViewValues::ShowValues () - ...", Logging.INDEX_MESSAGE.NOT_SET); } } // восстановить обработку события - изменение значение в ячейке //activateCellValue_onChanged(true); } else { Logging.Logg().Error(string.Format(@"DataGridViewValues::ShowValues () - нет строк для отображения..."), Logging.INDEX_MESSAGE.NOT_SET); } }