バージョン

外部でグルーピング

トピックの概要

目的

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

前提条件

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

トピック 目的

このトピックは、 xamDataGrid コントロールをページに追加する方法をコード例を用いて説明します。

このトピックは、DataPresenter コントロールのグループ機能について説明します。

DataPresenter コントロールは、グループ化機能を提供し、ユーザーは同じ値を含むフィールドに基づいてレコードをグループ化できます。

本トピックの内容

このトピックは以下のセクションからなります。

概要

外部グルーピングの紹介

UI の視点で、外部グルーピング機能は xamDataGrid のデフォルトの機能 (内部など) と似ています。ユーザーは、フィールドのドラッグ ドロップしてグループ毎の領域からフィールド毎の領域にできます。

注:

Note

データ プレゼンターの GroupByMode および GroupByEvaluator の設定は、グループ化処理を実行するのが ICollectionView であるためサポートされません。

更に、非バインド フィールドでグループ化もサポートされていません。

外部グルーピングを使用するには、 FieldLayoutSettingsGroupByEvaluationModeUseCollectionView オプションに設定します。以下は GroupByEvaluationMode 列挙体のオプションです。

並べ替え条件タイプ 説明

Default

デフォルトは Auto に解決されます。

Auto

グループ化が内部で発生するグループ モード

UseCollectionView

ICollectionView のグループ機能の使用

xamDataGrid 外部グルーピング - コード例

説明

このコード例は、 xamDataGrid の外部グルーピング機能を使用する方法を説明します。この例は、ICollectionView を実装するため、 xamDataGrid データ ソースとして ListViewCollection を使用します。このコレクションは、 xamDataGrid にバインドされ、外部グルーピングで使用するために GroupByEvaluationModeUseCollectionView に設定する必要があります。

前提条件

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

  • 以下の NuGet パッケージへの参照:

    • Infragistics.WPF.DataGrids

  • クラス

    • Item は INotifyPropertyChanged を継承します。このクラスの全コードは、Item クラスのコード例を参照してください。

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

  • ウィンドウの開始

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

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

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

(プロジェクト の名前が ExternalOperations の場合。名前が異なる場合は、この定義を新しい名前に合わせて変更してください。)

プレビュー

以下の画像は、外部グルーピングを使用したコンパイル済みアプリケーションの描画を示します。UI の観点からすると、グループ化操作を外部で実行する場合と内部で実行する場合での違いはありません。

xamDataGrid External Grouping 1.png

コード

XAML の場合:

<Window x:Class="ExternalOperations.ExternalGrouping"
        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="ExternalGrouping" Height="768" Width="1024">
    <DockPanel LastChildFill="True">
        <StackPanel Orientation="Vertical" VerticalAlignment="Stretch" DockPanel.Dock="Top">
            <Button FontWeight="Bold" x:Name="btn100kExternal" Content="Bind to 100k items" Click="btn100kExternal_Click" Width="120" Margin="5"/>
            <Label x:Name="lblExternalTimes" />
        </StackPanel>
        <igDP:XamDataGrid x:Name="xdg100kExternal" VerticalAlignment="Stretch" Grouping="xdg100kExternal_Grouping"
                                      DataSourceResetBehavior="DiscardExistingRecords">
            <igDP:XamDataGrid.FieldLayoutSettings>
                <!-- Here GroupByEvaluationMode is set to UseCollectionView, in order to use the external grouping feature.-->
                <igDP:FieldLayoutSettings GroupByEvaluationMode="UseCollectionView" FilterUIType="FilterRecord"/>
            </igDP:XamDataGrid.FieldLayoutSettings>
            <igDP:XamDataGrid.FieldSettings>
                <igDP:FieldSettings AllowRecordFiltering="True" AllowSummaries="True" SummaryUIType="MultiSelect"
                                                SummaryDisplayArea="BottomFixed" />
            </igDP:XamDataGrid.FieldSettings>
        </igDP:XamDataGrid>
    </DockPanel>
</Window>

Visual Basic の場合:

Namespace ExternalOperations
      ''' <summary>
      ''' Interaction logic for ExternalGrouping.xaml
      ''' </summary>
      Public Partial Class ExternalGrouping
            Inherits Window
            Public Sub New()
                  InitializeComponent()
            End Sub
            Private Sub btn100kExternal_Click(sender As Object, e As RoutedEventArgs)
                  xdg100kExternal.DataSource = Utils.CreateDataSource(100000)
            End Sub
            Private Sub xdg100kExternal_Grouping(sender As Object, e As GroupingEventArgs)
                  lblExternalTimes.Content = "Grouping..."
                  Dim start As DateTime = DateTime.Now
                  Dispatcher.BeginInvoke(DispatcherPriority.Background, New Action(Function()
                  lblExternalTimes.Content = "Time to group = "(DateTime.Now - start).TotalSeconds
End Function))
            End Sub
      End Class
End Namespace

C# の場合:

namespace ExternalOperations
{
    /// <summary>
    /// Interaction logic for ExternalGrouping.xaml
    /// </summary>
    public partial class ExternalGrouping : Window
    {
        public ExternalGrouping()
        {
            InitializeComponent();
        }
        private void btn100kExternal_Click(object sender, RoutedEventArgs e)
        {
            xdg100kExternal.DataSource = Utils.CreateDataSource(100000);
        }
        private void xdg100kExternal_Grouping(object sender, GroupingEventArgs e)
        {
            lblExternalTimes.Content = "Grouping...";
            DateTime start = DateTime.Now;
            Dispatcher.BeginInvoke(DispatcherPriority.Background,
                new Action(
                    () =>
                    {
                        lblExternalTimes.Content = "Time to group = " + (DateTime.Now - start).TotalSeconds;
                    }
                    ));
        }
    }
}

トピック

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

トピック 目的

このトピックは、 XamDataGrid コントロールのレコードのフィルタリング処理を説明します。

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

このトピックは、 xamDataGrid の外部集計計算機能について説明します。

このトピックは、 xamDataGrid コントロールを使用してグループ化する際に特に役立つトピックです。