FlexGrid for WinForms
状態の永続化

グリッドの永続化とは、グリッドの現在の状態を後から利用できるように保存し、必要に応じてそれを復元することです。たとえば、グループ化、ソート、フィルタ処理、スタイルなどを適用したグリッドを、さらに何らかの操作を施した後やアプリケーションを再度起動した後に使用したい場合があります。これは、グリッドの状態を永続化することで可能になります。

グリッド状態の永続化を実装する手順は 2 つです。最初にグリッド状態をシリアライズし、次にそれを復元します。このトピックでは、フィルタ処理、ソート、グループ化を行った FlexGrid の状態を永続化する方法について説明します。

グリッド状態の永続化を実装するには、System.XML 名前空間の XMLWriter および XMLReader クラスを使用します。グリッド状態を保存するには、WriteStartElement メソッドを使用して、指定された開始タグを書き込み、WriteAttributeString メソッドを使用して、フィルタ、ソート、およびグループ化の属性を書き込みます。最後に、WriteEndElement メソッドを呼び出して WriteStartElement メソッドを閉じ、ストリーム、文字列、またはファイルの形式で状態を保存します。

後で使用するために WinForms FlexGrid の状態をシリアライズして XML ファイルにするには、次のコードを使用します。 

//フィルタ、グループ、並べ替えの定義をファイルに書き込みます
private void WriteStateToXML(string filePath) {
    using (XmlWriter writer = XmlWriter.Create(filePath))
    {
        writer.WriteStartElement("FlexGrid");
        writer.WriteStartElement("Definition", "");
        writer.WriteAttributeString("Filter", flexGrid.FilterDefinition);
        writer.WriteAttributeString("Sort", flexGrid.SortDefinition);
        writer.WriteAttributeString("Group", flexGrid.GroupDefinition);
        writer.WriteEndElement();
        writer.WriteEndElement();
        writer.Flush();
    }
'フィルタ、グループ、並べ替えの定義をファイルに書き込みます
Private Sub WriteStateToXML(ByVal filePath As String)
    Using writer = XmlWriter.Create(filePath)
        writer.WriteStartElement("FlexGrid")
        writer.WriteStartElement("Definition", "")
        writer.WriteAttributeString("Filter", flexGrid.FilterDefinition)
        writer.WriteAttributeString("Sort", flexGrid.SortDefinition)
        writer.WriteAttributeString("Group", flexGrid.GroupDefinition)
        writer.WriteEndElement()
        writer.WriteEndElement()
        writer.Flush()
    End Using
End Sub

保存された状態をグリッドにロードし直すには、オブジェクトの GetAttribute メソッドを使用して、フィルタ属性、ソート属性、グループ属性を読み取ります。次に、それらを FlexGrid の FilterDefinition、SortDefinition、または GroupDefinition プロパティにそれぞれ割り当てます。

WinForms FlexGrid の保存された状態をロードするには、次のコードを使用します。

//保存したファイルからフィルタ、並べ替え、グループの定義を読み取り、FlexGridに適用します
private void ReadStateXML(string filePath) {

    using (XmlReader reader = XmlReader.Create(filePath)) {
        reader.ReadToFollowing("Definition");
        flexGrid.SortDefinition = reader.GetAttribute("Sort");
        flexGrid.FilterDefinition = reader.GetAttribute("Filter");
        flexGrid.GroupDefinition = reader.GetAttribute("Group");
        reader.Close();
    }
'保存したファイルからフィルタ、並べ替え、グループの定義を読み取り、FlexGridに適用します
Private Sub ReadStateXML(ByVal filePath As String)
    Using reader = XmlReader.Create(filePath)
        reader.ReadToFollowing("Definition")
        flexGrid.SortDefinition = reader.GetAttribute("Sort")
        flexGrid.FilterDefinition = reader.GetAttribute("Filter")
        flexGrid.GroupDefinition = reader.GetAttribute("Group")
        reader.Close()
    End Using