문제

DeVexpress 그리드 (Xtragrid)를 통해 그리드와 그 그룹은 요약 계산을 가질 수 있습니다. 사용 가능한 옵션은 Count, Max, Min, Avg, Sum, None 및 Custom입니다.

다른 열의 값으로 제공된 가중치를 기준으로 가중 평균 열을 계산하는 방법을 보여주는 샘플 코드가 있습니까?

도움이 되었습니까?

해결책

나는 이것을 해결했고 다른 사람들이 유용하다고 생각할 경우 내 솔루션을 여기에 게시 할 것입니다.

가중 평균이 행당 값과 가중치로 구성된 경우 값이 포함 된 열에는 무게 GridColumn 객체가 태그 속성에 할당되어 있어야합니다. 그런 다음이 이벤트 핸들러가 나머지 작업을 수행합니다.

private static void gridView_CustomSummaryCalculate(object sender, CustomSummaryEventArgs e)
{
    GridColumn weightColumn = ((GridSummaryItem)e.Item).Tag as GridColumn;

    if (weightColumn == null)
        return;

    switch (e.SummaryProcess)
    {
        case CustomSummaryProcess.Start:
        {
            e.TotalValue = new WeightedAverageCalculator();
            break;
        }
        case CustomSummaryProcess.Calculate:
        {
            double size = Convert.ToDouble(e.FieldValue);
            double weight = Convert.ToDouble(((GridView)sender).GetRowCellValue(e.RowHandle, weightColumn));

            ((WeightedAverageCalculator)e.TotalValue).Add(weight, size);
            break;
        }
        case CustomSummaryProcess.Finalize:
        {
            e.TotalValue = ((WeightedAverageCalculator)e.TotalValue).Value;
            break;
        }
    }
}

private sealed class WeightedAverageCalculator
{
    private double _sumOfProducts;
    private double _totalWeight;

    public void Add(double weight, double size)
    {
        _sumOfProducts += weight * size;
        _totalWeight += weight;
    }

    public double Value
    {
        get { return _totalWeight==0 ? 0 : _sumOfProducts / _totalWeight; }
    }
}

코드는 기본 열 값을 통해 복식으로 변환 할 수 있다고 가정합니다. Convert.ToDouble(object).

다른 팁

합 내에 자신의 람다 표현식을 제공하는 경우 표준 합계로 그룹화 할 수 있어야합니다. 나는 이것이 효과가 있다고 생각한다 :

var grouped = from item in items
orderby item.Group
group item by item.Group into grp
select new
{
Average= grp.Sum(row => row.Value * row.Weight)
};
라이센스 : CC-BY-SA ~와 함께 속성
제휴하지 않습니다 StackOverflow
scroll top