Smrf.NodeXL.ExcelTemplate.DynamicFilterDialog.GetRangeTrackBarRanges C# (CSharp) Метод

GetRangeTrackBarRanges() защищенный Метод

protected GetRangeTrackBarRanges ( NumericFilterParameters oNumericFilterParameters, String sTableName, Decimal &decAvailableMinimum, Decimal &decAvailableMaximum, Decimal &decSelectedMinimum, Decimal &decSelectedMaximum, String &sSelectedMinimumAddress, String &sSelectedMaximumAddress ) : void
oNumericFilterParameters NumericFilterParameters
sTableName String
decAvailableMinimum Decimal
decAvailableMaximum Decimal
decSelectedMinimum Decimal
decSelectedMaximum Decimal
sSelectedMinimumAddress String
sSelectedMaximumAddress String
Результат void
    GetRangeTrackBarRanges
    (
        NumericFilterParameters oNumericFilterParameters,
        String sTableName,
        out Decimal decAvailableMinimum,
        out Decimal decAvailableMaximum,
        out Decimal decSelectedMinimum,
        out Decimal decSelectedMaximum,
        out String sSelectedMinimumAddress,
        out String sSelectedMaximumAddress
    )
    {
        Debug.Assert(oNumericFilterParameters != null);
        Debug.Assert( !String.IsNullOrEmpty(sTableName) );
        AssertValid();

        String sColumnName = oNumericFilterParameters.ColumnName;

        // Excel values are Doubles, but NumericRangeTrackBar values are
        // Decimal.  (That's because NumericRangeTrackBar uses a NumericUpDown
        // control, which can only handle Decimals.)  This can cause problems
        // with very small and very large numbers.
        //
        // For example, the available minimum number 1.54768660209645E-22
        // becomes 1.547687E-22 when converted to a Decimal, and because the
        // Decimal is greater than the Double, using that Decimal for the
        // available minimum would always filter out the edge or vertex row
        // that the 1.54768660209645E-22 came from.
        //
        // Fix this by rounding the available minimum down and the available
        // maximum up if necessary.

        Double dAvailableMinimum = oNumericFilterParameters.MinimumCellValue;
        decAvailableMinimum = (Decimal)dAvailableMinimum;

        if ( (Double)decAvailableMinimum > dAvailableMinimum)
        {
            decAvailableMinimum = Math.Floor(decAvailableMinimum);
        }

        Double dAvailableMaximum = oNumericFilterParameters.MaximumCellValue;
        decAvailableMaximum = (Decimal)dAvailableMaximum;

        if ( (Double)decAvailableMaximum < dAvailableMaximum)
        {
            decAvailableMaximum = Math.Ceiling(decAvailableMaximum);
        }

        // DynamicFilterUtil.GetDynamicFilterParameters() skips zero-width
        // ranges, so this should always be true.

        Debug.Assert(decAvailableMaximum > decAvailableMinimum);

        // If there are already saved selected range settings for this filter
        // and they don't exceed the actual cell values, use them.

        if (
            !m_oDynamicFilterSettings.TryGetSettings(sTableName, sColumnName,
                out decSelectedMinimum, out decSelectedMaximum,
                out sSelectedMinimumAddress, out sSelectedMaximumAddress)
            ||
            decSelectedMinimum < decAvailableMinimum
            ||
            decSelectedMinimum > decAvailableMaximum
            ||
            decSelectedMaximum < decAvailableMinimum
            ||
            decSelectedMaximum > decAvailableMaximum
            )
        {
            // There were no saved selected range settings, or they can't be
            // used.  Set the selected range to the entire available range,
            // then save the settings.

            decSelectedMinimum = decAvailableMinimum;
            decSelectedMaximum = decAvailableMaximum;

            m_oDynamicFilterSettings.SetSettings(sTableName, sColumnName,
                decSelectedMinimum, decSelectedMaximum,
                out sSelectedMinimumAddress, out sSelectedMaximumAddress);
        }

        Debug.Assert(decSelectedMaximum >= decSelectedMinimum);
        Debug.Assert( !String.IsNullOrEmpty(sSelectedMinimumAddress) );
        Debug.Assert( !String.IsNullOrEmpty(sSelectedMaximumAddress) );
    }