2

DevExpress グリッド (XtraGrid) を使用すると、グリッドとそのグループで集計計算を行うことができます。使用可能なオプションは、カウント、最大、最小、平均、合計、なし、およびカスタムです。

別の列の値として提供された加重に基づいて、加重平均列を計算する方法を示すサンプルコードを誰かが持っていますか?

4

2 に答える 2

3

私はこれを解決することになり、他の人が役に立つと思った場合に備えて、ここに私の解決策を投稿します。

加重平均が値と行ごとの重みの両方で構成される場合、値を含む列の Tag プロパティに重み 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; }
    }
}

このコードは、基になる列の値が を介して double に変換できることを前提としていますConvert.ToDouble(object)

于 2009-02-20T14:38:32.020 に答える