Q110. XamDataGrid でユーザーが設定したレイアウトを保存したい

A.XamDataGrid でユーザーが操作した列の移動や並び替え、グループ化やソートを次回起動時用に保存したいというケースがあります。その場合、XamDataGrid.SaveCustomizations メソッドやXamDataGrid.LoadCustomizations メソッドを使えば、レイアウトの保存・読み込みが可能です。


以下、サンプルです。まず XamDataGrid と Button を配置した Window を用意します。


次に Loaded・Closed・Button_Click の各イベントを以下のように実装します。Button_Click イベントでは列状態を初期化するよう XamDataGrid.ClearCustomizations メソッドを実装しています。

using System.IO;
using Infragistics.Windows.DataPresenter;

public class MainWindow {
    private void Window_Loaded(object sender, RoutedEventArgs e) {
        using(var fs = new FileStream("layout.xml", FileMode.Open, FileAccess.Read)) {
            this.XamDataGrid1.LoadCustomizations(fs);
        }
    }

    private Sub Window_Closed(object sender, EventArgs e) {
        using(var fs = new FileStream("layout.xml", FileMode.OpenOrCreate, FileAccess.Write)) {
            this.XamDataGrid1.SaveCustomizations(fs);
        }
    }

    private Sub Button_Click(object sender, RoutedEventArgs e) {
        this.XamDataGrid1.ClearCustomizations(CustomizationType.All);
    }
}
' VB.NET
Imports System.IO
Imports Infragistics.Windows.DataPresenter

Public Class MainWindow
    Private Sub Window_Loaded(sender As Object, e As RoutedEventArgs)
        Using fs As New FileStream("layout.xml", FileMode.Open, FileAccess.Read)
            Me.XamDataGrid1.LoadCustomizations(fs)
        End Using
    End Sub

    Private Sub Window_Closed(sender As Object, e As EventArgs)
        Using fs As New FileStream("layout.xml", FileMode.OpenOrCreate, FileAccess.Write)
            Me.XamDataGrid1.SaveCustomizations(fs)
        End Using
    End Sub

    Private Sub Button_Click(sender As Object, e As RoutedEventArgs)
        Me.XamDataGrid1.ClearCustomizations(CustomizationType.All)
    End Sub
End Class


上記実装により、グリッドをグループ化した状態で画面を終了すると、次回起動時にグループ化された状態で起動します。


「レイアウトの初期化」ボタンをクリックすると、XamDataGrid がデザイン時の状態に復帰します。


なお上記一連のメソッドの問題点ですが、FieldLayoutSettings で HeaderPrefixAreaDisplayMode プロパティを FieldChooserButton に設定しフィールドの表示項目を選択できるようにした場合、フィールドの表示/非表示の設定を保存したり、非表示にしたフィールドを ClearCustomizations メソッドで復帰することはできません。現状、表示状態の保存は独自に実装するしかないので、この辺りもう少し何とかして欲しいところです。
また、ClearCustomizations メソッドで FieldPosition を初期化すると、FixedLocation=FixedToNearEdge にしたフィールドが FixedLocation=None になってしまうのも問題です。

#2017/02/17 追記: 以下、上記問題に対応した記事になります
Q110. XamDataGrid でユーザーが設定したレイアウトを保存したい(其の弐)


関連項目:XamDataGrid でユーザーが列の表示状態を任意に設定できるようにするには?



WPF FAQ の目次に戻る