バージョン

外部集計計算 (xamDataGrid)

トピックの概要

目的

このトピックでは、xamDataGrid コントロールの外部集計計算機能についての説明とそのデモを提供します。

前提条件

このトピックの本題に入る前に、以下のトピックをお読みください。

トピック 目的

このトピックでは、ユーザーがすばやく操作に慣れることができるよう xamDataGrid コントロールを追加するために必要な基本手順について説明します。

xamDataPresenter でフィールドの行集計を選択する機能をユーザーに提供します。

主要機能の概要

SummaryEvaluationMode

FieldLayoutSettings SummaryEvaluationMode プロパティは以下の列挙体を持ちます。

設定 説明

Default

SummaryEvaluationMode のデフォルト設定は、Auto です。

Auto

グループ化モード、内部集計計算を使用します。

Manual

データ プレゼンターは、集計値を計算しません。データ プレゼンターの QuerySummaryResult イベントを介して計算を実行し、結果を提供します。

UseLINQ

LINQ を使用した集計の計算

Note

フィルタリングは xamDataGrid で表示されるデータに影響しますが、データ ソースは変更されません。集計は、データ ソースのフィルターで表示されるデータに限らず、データ ソース全体に基づきます。データ ソースのフィルターで表示されるデータに基づいて計算される集計を実行するには、CollectionView に基づくデータ ソースを使用し、FilterEvaluationMode プロパティを UseCollectionView に設定します。

XAML の場合:

<igDP:XamDataGrid x:Name="xamDataGrid">
    <igDP:XamDataGrid.FieldLayoutSettings>
        <igDP:FieldLayoutSettings
            FilterEvaluationMode="UseCollectionView"
            SummaryEvaluationMode="UseLinq" />
    </igDP:XamDataGrid.FieldLayoutSettings>
</igDP:XamDataGrid>

C# の場合:

ObservableCollection<Item> Items;
var View = CollectionViewSource.GetDefaultView(Items);
this.xamDataGrid.DataSource = View;

Visual Basic の場合:

Dim Items As ObservableCollection(Of Item)
Dim View = CollectionViewSource.GetDefaultView(Items)
Me.xamDataGrid.DataSource = View

QuerySummaryResult

このイベントは、データ プレゼンターが集計結果を計算するときに発生されます。

QuerySummaryResultEventArgs

QuerySummaryResultEventArgs クラスは、プロパティとメソッドを公開し、カスタム ロジックを使用して集計結果を計算する際に便利です。

評価モードの概要

FieldLayoutSettingsSummaryEvaluationMode を設定し、UseLINQ を外部集計計算で使用します。

Note
注:

基になるデータ項目およびソースは、LINQ.をサポートする必要があります。

クエリ集計結果

DataPresenterBase のイベント QuerySummaryResult は、SummaryEvaluationMode の設定に関係なく発生します。

カスタム ロジック使用して集計値を計算し、集計結果値をデータ プレゼンターに提供できます。

クエリ集計結果 EventArgs

QuerySummaryResultEventArgs クラスは、以下のプロパティとメソッドを公開し、カスタム ロジックを使用して集計結果を計算する際に便利です。

プロパティまたはメソッド 説明

SummaryResult オブジェクトを取得します。計算されるとレコードコレクションにコンテキストを提供します。

メソッド 説明

SetSummaryValue(Object value)

カスタム計算結果を提供することにより、データ プレゼンターが独自の計算ロジックをバイパスし、代わりの結果として提供する値を使用します。

このメソッドは、null 以外の引数がデータ プレゼンターの計算ロジックをバイパスします。

xamDataGrid 外部集計計算 - コード例

説明

この例は、 xamDataGrid コントロールの外部集計計算を実行するための基本をICollectionView を使用して説明します。そのデータ ソースと LINQ を使用して集計を計算します。

前提条件

以下が含まれる新しい WPF アプリケーション プロジェクト タイプ ExternalOperations を開始します。

  • Infragistics NuGet パッケージ参照:

    • Infragistics.WPF.DataGrids

  • クラス

    • Item は INotifyPropertyChanged を継承します。このクラスの全コードは、項目クラスのコード例を参照します。

    • Utils クラス、ランダム項目の ListCollectionView を作成します。これはデータ ソースで、 xamDataGrid がバインドされます。このクラスの完全なコードについては、 ListCollectionView コード例の作成 を参照してください。

  • ウィンドウの開始

    • ExternalSummaries.xaml ウィンドウは、アプリケーションの開始ウィンドウとして設定します。

  • 名前空間の定義を xamDataGrid にマークアップを配置する、ウィンドウの XAML 部分に追加します。

xmlns:igDP=http://infragistics.com/DataPresenter
xmlns:local="clr-namespace:ExternalOperations"

プレビュー

これは集計計算の表示のプレビューです。

xamDataGrid External Summary Calculations 1.png

コード

XAML の場合:

<Window x:Class="ExternalOperations.ExternalSummaries"
        xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
        xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
        xmlns:igDP="http://infragistics.com/DataPresenter"
        xmlns:local="clr-namespace:ExternalOperations"
        Title="ExternalSummaries" Height="768" Width="1024">
    <DockPanel LastChildFill="True">
        <StackPanel Orientation="Vertical" VerticalAlignment="Stretch" DockPanel.Dock="Top">
            <Button FontWeight="Bold" x:Name="btnManyRecordsExternal" Content="Bind to 5 000 000 items" Click="btnManyRecordsExternal_Click"  Width="150" Margin="5"/>
            <Label x:Name="lblExternalTimes" />
        </StackPanel>
        <igDP:XamDataGrid x:Name="xdg5mlExternal" VerticalAlignment="Stretch" QuerySummaryResult="xdg5mlExternal_QuerySummaryResult"
                          DataSourceResetBehavior="DiscardExistingRecords">
            <igDP:XamDataGrid.FieldLayoutSettings>
                <!-- Here SummaryEvaluationMode is set to UseLinq in order to use external summaries feature.-->
                <igDP:FieldLayoutSettings SummaryEvaluationMode="UseLinq"/>
            </igDP:XamDataGrid.FieldLayoutSettings>
            <igDP:XamDataGrid.FieldSettings>
                <igDP:FieldSettings AllowSummaries="True" SummaryUIType="MultiSelect" SummaryDisplayArea="Top" />
            </igDP:XamDataGrid.FieldSettings>
        </igDP:XamDataGrid>
    </DockPanel>
</Window>

Visual Basic の場合:

Namespace ExternalOperations
      Public Partial Class ExternalSummaries
            Inherits Window
            Public Sub New()
                  InitializeComponent()
            End Sub
            Private Sub btnManyRecordsExternal_Click(sender As Object, e As RoutedEventArgs)
                  xdg5mlExternal.DataSource = Utils.CreateDataSource(5000000)
            End Sub
            Private Sub xdg5mlExternal_QuerySummaryResult(sender As Object, e As Infragistics.Windows.DataPresenter.Events.QuerySummaryResultEventArgs)
                  lblExternalTimes.Content = "Calculating summaries..."
                  Dim start As DateTime = DateTime.Now
                  Dispatcher.BeginInvoke(DispatcherPriority.Background, New Action(Function()
                  lblExternalTimes.Content = "Time to calculate = " + (DateTime.Now - start).TotalSeconds
End Function))
            End Sub
      End Class
End Namespace

C# の場合:

namespace ExternalOperations
{
    public partial class ExternalSummaries : Window
    {
        public ExternalSummaries()
        {
            InitializeComponent();
        }
        private void btnManyRecordsExternal_Click(object sender, RoutedEventArgs e)
        {
            xdg5mlExternal.DataSource = Utils.CreateDataSource(5000000);
        }
        private void xdg5mlExternal_QuerySummaryResult(object sender, Infragistics.Windows.DataPresenter.Events.QuerySummaryResultEventArgs e)
        {
            lblExternalTimes.Content = "Calculating summaries...";
            DateTime start = DateTime.Now;
            Dispatcher.BeginInvoke(DispatcherPriority.Background,
                new Action(
                    () =>
                    {
                        lblExternalTimes.Content = "Time to calculate = " + (DateTime.Now - start).TotalSeconds;
                    }
                    ));
        }
    }
}

トピック

このトピックについては、以下のトピックも参照してください。

トピック 目的

このトピックは、 xamDataGrid で外部フィルタリングを使用する方法について説明します。

このトピックは、外部グルーピングを XamDataGrid で使用する方法について説明します。

このトピックは、 XamDataGrid コントロールのレコードの外部処理を説明します。

このトピックは、外部ソート、フィルタリング、グループ化、集計を含む XamDataGrid の機能の概要について説明します。