|
public class CustomAggregate : ISummaryAggregate
{
public CustomAggregate()
{
}
public double StdDev { get; set; }
public Action<System.Collections.IEnumerable, string, PropertyInfo> CalculateAggregateFunc()
{
return (items, property, pd) =>
{
var enumerableItems = items as IEnumerable<OrderInfo>;
if (pd.Name == "StdDev")
{
this.StdDev = enumerableItems.StdDev<OrderInfo>(q => q.OrderID);
}
};
}
}
public static class LinqExtensions
{
public static double StdDev<T>(this IEnumerable<T> values, Func<T, double?> selector)
{
double value = 0;
var count = values.Count();
if (count > 0)
{
double? avg = values.Average(selector);
double sum = values.Select(selector).Sum(d =>
{
if (d.HasValue)
{
return Math.Pow(d.Value - avg.Value, 2);
}
return 0.0;
});
value = Math.Sqrt((sum) / (count - 1));
}
return value;
}
} |
|
<sfGrid:SfDataGrid.CaptionSummaryRow>
<sfGrid:GridSummaryRow Title="Standard Deviation:{CaptionSummary}" ShowSummaryInRow = "True">
<sfGrid:GridSummaryRow.SummaryColumns>
<sfGrid:GridSummaryColumn Name="CaptionSummary"
CustomAggregate="{StaticResource customAggregate}"
Format="{}{StdDev}"
MappingName="OrderID"
SummaryType="Custom" />
</sfGrid:GridSummaryRow.SummaryColumns>
</sfGrid:GridSummaryRow>
</sfGrid:SfDataGrid.CaptionSummaryRow> |
|
Member |
Description |
|
AllowDataShaping |
Specifies that data operations sorting, grouping, filtering and summaries are updated based on data manipulation changes. |
|
AllowSummaryUpdate |
Specifies that summaries are updated based on data manipulation changes. |
|
Default |
Specifies that data operations are not updated during data manipulation. |