Example #1
0
                    public P_PUT(int id, bool deny, AGREGATE_ACTION avg)
                        : this()
                    {
                        m_iId = id;

                        m_bDeny = deny;

                        m_avg = avg;
                    }
Example #2
0
            /// <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);
                }
            }