This question is locked. New answers and comments are not allowed.
Hi,
I have a problem with the customization of the format in a calculated measure.
I want to reach this behaviour: if a user doesn't select any custom format by the control RadPivotFieldList, I set a default format for this value (the same of the other measures).
In my opinion, I could reach this goal with a different visibility of the field formattedValue of your abstract class AggregateaValue, but the visibility is internal and I can't read the value in the overriden method toString().
Any suggestion?
Thanks in advance.
Cris
I have a problem with the customization of the format in a calculated measure.
I want to reach this behaviour: if a user doesn't select any custom format by the control RadPivotFieldList, I set a default format for this value (the same of the other measures).
In my opinion, I could reach this goal with a different visibility of the field formattedValue of your abstract class AggregateaValue, but the visibility is internal and I can't read the value in the overriden method toString().
Any suggestion?
Thanks in advance.
Cris
[DataContract]
public
class
CustomBynaryOperatorCalculatedField : CalculatedField
{
RequiredField field1;
RequiredField field2;
Func<
double
?,
double
?,
double
?> add = (a, b) =>
{
return
NullableDoubleHelper.Add(a,b);
};
Func<
double
?,
double
?,
double
?> sub = (a, b) =>
{
if
(a.HasValue && b.HasValue)
return
a.Value - b.Value;
else
return
null
;
};
Func<
double
?,
double
?,
double
?> mul = (a, b) =>
{
if
(a.HasValue && b.HasValue)
{
try
{
return
a.Value * b.Value;
}
catch
(Exception)
{
return
null
;
}
}
else
return
null
;
};
Func<
double
?,
double
?,
double
?> div = (a, b) =>
{
if
(a.HasValue && b.HasValue && b.Value!=0)
return
a.Value / b.Value;
else
return
null
;
};
//b != 0 ? a / b : 0;
Func<
double
?,
double
?,
double
?> operation;
public
CustomBynaryOperatorCalculatedField(
string
name,
int
op,
string
nameField1,
string
nameField2)
{
Name = name;
this
.field1 = RequiredField.ForProperty(nameField1);
this
.field2 = RequiredField.ForProperty(nameField2);
switch
(op)
{
case
(
int
)OperationType.Addition:
operation = add;
break
;
case
(
int
)OperationType.Subtraction:
operation = sub;
break
;
case
(
int
)OperationType.Multiplication:
operation = mul;
break
;
case
(
int
)OperationType.Division:
operation = div;
break
;
default
:
break
;
}
}
public
CustomBynaryOperatorCalculatedField()
{
}
protected
override
IEnumerable<RequiredField> RequiredFields()
{
yield
return
this
.field1;
yield
return
this
.field2;
}
protected
override
Telerik.Pivot.Core.Aggregates.AggregateValue CalculateValue(IAggregateValues aggregateValues)
{
var aggregateValue = aggregateValues.GetAggregateValue(field1);
if
(aggregateValue.IsError())
{
return
aggregateValue;
}
var aggregateValue1 = aggregateValues.GetAggregateValue(field2);
if
(aggregateValue1.IsError())
{
return
aggregateValue1;
}
try
{
double
? v1 = aggregateValue.ConvertOrDefault<
double
>();
double
? v2 = aggregateValue1.ConvertOrDefault<
double
>();
var v = operation(v1, v2);
if
(v.HasValue)
return
new
CustomDoubleAggregateValue(v.Value);
else
return
null
;
}
catch
(AggregateException)
{
return
null
;
}
}
}
...
public
class
CustomDoubleAggregateValue : CustomAggregateValueBase
{
private
double
? result;
/// <summary>
/// Initializes a new instance of the <see cref="T:Telerik.Pivot.Core.Aggregates.DoubleAggregateValue" /> class.
/// </summary>
/// <param name="value">The default value.</param>
public
CustomDoubleAggregateValue(
double
? value)
{
this
.result = value;
}
/// <inheritdoc />
protected
override
object
GetValueOverride()
{
return
this
.result;
}
//bool Telerik.Pivot.Core.Aggregates.IConvertibleAggregateValue<System.Double?>.TryConvertValue(out double? value)
//{
// if (IsError)
// {
// value = 0;
// return false;
// }
// value = this.result;
// return true;
//}
//public override string ToString()
//{
// return base.formattedValue ??
// Convert.ToString(this.GetValue(), CultureInfo.CurrentCulture);
//}
public
override
string
ToString()
{
//if formatted value is not null or empty return formattedValues else return result with a custom format
return
base
.ToString();
}
protected
override
void
AccumulateOverride(
object
value)
{
RaiseError();
}
protected
override
void
MergeOverride(Telerik.Pivot.Core.Aggregates.AggregateValue childAggregate)
{
RaiseError();
}
}
}