FlexPivot for WinForms
定義済みビューの追加
タスク別ヘルプ > コードによるカスタム FlexPivot アプリケーションの作成 > 定義済みビューの追加

ユーザーは、XML ファイルにビューを定義し、プロジェクトデザイナにリソースとして追加することで、FlexPivot アプリケーションに定義済みビューを追加できます。FlexPivotPage クラスには、ファイルをストリームとして追加する ReadXml メソッドと WriteXml メソッドがあります。これらのメソッドは、定義済みビューを適用するために FlexPivotPage コントロールによって自動的に呼び出されます。

  1. 新しい XML ファイル(ここでは FlexPivotViews.xml)を作成し、次のコードを追加して5つのビュー定義を作成します。それぞれは、Extended Price (Nwind_ja.mdb データベースファイルの Invoices ビューのフィールド)を次のディメンションに基づいて表示します。
    • Product/Country
    • Salesperson/Country
    • Salesperson/Month
    • Salesperson/Weekday
    • Salesperson/Year
      XML
      コードのコピー
        <FlexPivotViews>
        
        <FlexPivotPage id="Product vs Country">
          <C1FlexPivotEngine>
            <Fields>
              <Field name="Address" subtotal="Count" />
              <Field name="City" subtotal="Count" />
              <Field name="Country" subtotal="Count" />
              <Field name="CustomerID" subtotal="Count" />
              <Field name="Customers_CompanyName" subtotal="Count" />
              <Field name="Discount" subtotal="Sum" format="n0" />
              <Field name="ExtendedPrice" subtotal="Sum" format="n0" />
              <Field name="Freight" subtotal="Sum" format="n0" />
              <Field name="OrderDate" subtotal="Count" format="d" />
              <Field name="OrderID" subtotal="Sum" format="n0" />
              <Field name="PostalCode" subtotal="Count" />
              <Field name="ProductID" subtotal="Sum" format="n0" />
              <Field name="ProductName" subtotal="Count" />
              <Field name="Quantity" subtotal="Sum" format="n0" />
              <Field name="Region" subtotal="Count" />
              <Field name="RequiredDate" subtotal="Count" format="d" />
              <Field name="Salesperson" subtotal="Count" />
              <Field name="ShipAddress" subtotal="Count" />
              <Field name="ShipCity" subtotal="Count" />
              <Field name="ShipCountry" subtotal="Count" />
              <Field name="ShipName" subtotal="Count" />
              <Field name="ShippedDate" subtotal="Count" format="d" />
              <Field name="Shippers_CompanyName" subtotal="Count" />
              <Field name="ShipPostalCode" subtotal="Count" />
              <Field name="ShipRegion" subtotal="Count" />
              <Field name="UnitPrice" subtotal="Sum" format="n0" />
            </Fields>
            <RowFields>
              <Field name="ProductName" />
            </RowFields>
            <ColumnFields>
              <Field name="Country" />
            </ColumnFields>
            <ValueFields>
              <Field name="ExtendedPrice" />
            </ValueFields>
          </C1FlexPivotEngine>
          <C1FlexPivotPrintDocument>
            <Header Text="&amp;[ViewTitle]&#x9;&amp;[Date]&#x9;Page &amp;[Page]" Separator="True" FontName="Arial" FontSize="9" FontStyle="Regular" />
            <Footer Text="" Separator="False" FontName="Arial" FontSize="9" FontStyle="Regular" />
            <Grid ShowGrid="True" GridOptions="1" />
            <Chart ShowChart="True" ChartFillsPage="True" />
            <RawData ShowRawData="False" RawDataOptions="1" />
            <PageSettings Landscape="False" Margins="100,100,100,100" />
          </C1FlexPivotPrintDocument>
          <FlexPivotChart ChartType="Bar" ColorGeneration="Office" ShowTitle="True" ShowLegend="Automatic" ShowGridLines="True" Stacked="True" />
        </FlexPivotPage>
      
        <FlexPivotPage id="SalesPerson vs Country">
          <C1FlexPivotEngine>
            <Fields>
              <Field name="Address" subtotal="Count" />
              <Field name="City" subtotal="Count" />
              <Field name="Country" subtotal="Count" />
              <Field name="CustomerID" subtotal="Count" />
              <Field name="Customers_CompanyName" subtotal="Count" />
              <Field name="Discount" subtotal="Sum" format="n0" />
              <Field name="ExtendedPrice" subtotal="Sum" format="n0" />
              <Field name="Freight" subtotal="Sum" format="n0" />
              <Field name="OrderDate" subtotal="Count" format="d" />
              <Field name="OrderID" subtotal="Sum" format="n0" />
              <Field name="PostalCode" subtotal="Count" />
              <Field name="ProductID" subtotal="Sum" format="n0" />
              <Field name="ProductName" subtotal="Count" />
              <Field name="Quantity" subtotal="Sum" format="n0" />
              <Field name="Region" subtotal="Count" />
              <Field name="RequiredDate" subtotal="Count" format="d" />
              <Field name="Salesperson" subtotal="Count" />
              <Field name="ShipAddress" subtotal="Count" />
              <Field name="ShipCity" subtotal="Count" />
              <Field name="ShipCountry" subtotal="Count" />
              <Field name="ShipName" subtotal="Count" />
              <Field name="ShippedDate" subtotal="Count" format="d" />
              <Field name="Shippers_CompanyName" subtotal="Count" />
              <Field name="ShipPostalCode" subtotal="Count" />
              <Field name="ShipRegion" subtotal="Count" />
              <Field name="UnitPrice" subtotal="Sum" format="n0" />
            </Fields>
            <RowFields>
              <Field name="Country" />
            </RowFields>
            <ColumnFields>
              <Field name="Salesperson" />
            </ColumnFields>
            <ValueFields>
              <Field name="ExtendedPrice" />
            </ValueFields>
          </C1FlexPivotEngine>
          <C1FlexPivotPrintDocument>
            <Header Text="&amp;[ViewTitle]&#x9;&amp;[Date]&#x9;Page &amp;[Page]" Separator="True" FontName="Arial" FontSize="9" FontStyle="Regular" />
            <Footer Text="" Separator="False" FontName="Arial" FontSize="9" FontStyle="Regular" />
            <Grid ShowGrid="True" GridOptions="1" />
            <Chart ShowChart="True" ChartFillsPage="True" />
            <RawData ShowRawData="False" RawDataOptions="1" />
            <PageSettings Landscape="False" Margins="100,100,100,100" />
          </C1FlexPivotPrintDocument>
          <FlexPivotChart ChartType="Bar" ColorGeneration="Office" ShowTitle="True" ShowLegend="Automatic" ShowGridLines="True" Stacked="True" />
        </FlexPivotPage>
      
        <FlexPivotPage id="SalesPerson vs Month">
          <C1FlexPivotEngine>
            <Fields>
              <Field name="Address" subtotal="Count" />
              <Field name="City" subtotal="Count" />
              <Field name="Country" subtotal="Count" />
              <Field name="CustomerID" subtotal="Count" />
              <Field name="Customers_CompanyName" subtotal="Count" />
              <Field name="Discount" subtotal="Sum" format="n0" />
              <Field name="ExtendedPrice" subtotal="Sum" format="n0" />
              <Field name="Freight" subtotal="Sum" format="n0" />
              <Field name="OrderDate" subtotal="Count" format="MMMM" />
              <Field name="OrderID" subtotal="Sum" format="n0" />
              <Field name="PostalCode" subtotal="Count" />
              <Field name="ProductID" subtotal="Sum" format="n0" />
              <Field name="ProductName" subtotal="Count" />
              <Field name="Quantity" subtotal="Sum" format="n0" />
              <Field name="Region" subtotal="Count" />
              <Field name="RequiredDate" subtotal="Count" format="d" />
              <Field name="Salesperson" subtotal="Count" />
              <Field name="ShipAddress" subtotal="Count" />
              <Field name="ShipCity" subtotal="Count" />
              <Field name="ShipCountry" subtotal="Count" />
              <Field name="ShipName" subtotal="Count" />
              <Field name="ShippedDate" subtotal="Count" format="d" />
              <Field name="Shippers_CompanyName" subtotal="Count" />
              <Field name="ShipPostalCode" subtotal="Count" />
              <Field name="ShipRegion" subtotal="Count" />
              <Field name="UnitPrice" subtotal="Sum" format="n0" />
            </Fields>
            <RowFields>
              <Field name="Salesperson" />
            </RowFields>
            <ColumnFields>
              <Field name="OrderDate" />
            </ColumnFields>
            <ValueFields>
              <Field name="ExtendedPrice" />
            </ValueFields>
          </C1FlexPivotEngine>
          <C1FlexPivotPrintDocument>
            <Header Text="&amp;[ViewTitle]&#x9;&amp;[Date]&#x9;Page &amp;[Page]" Separator="True" FontName="Arial" FontSize="9" FontStyle="Regular" />
            <Footer Text="" Separator="False" FontName="Arial" FontSize="9" FontStyle="Regular" />
            <Grid ShowGrid="True" GridOptions="1" />
            <Chart ShowChart="True" ChartFillsPage="True" />
            <RawData ShowRawData="False" RawDataOptions="1" />
            <PageSettings Landscape="False" Margins="100,100,100,100" />
          </C1FlexPivotPrintDocument>
          <FlexPivotChart ChartType="Bar" ColorGeneration="Office" ShowTitle="True" ShowLegend="Automatic" ShowGridLines="True" Stacked="True" />
        </FlexPivotPage>
      
        <FlexPivotPage id="SalesPerson vs Weekday">
          <C1FlexPivotEngine>
            <Fields>
              <Field name="Address" subtotal="Count" />
              <Field name="City" subtotal="Count" />
              <Field name="Country" subtotal="Count" />
              <Field name="CustomerID" subtotal="Count" />
              <Field name="Customers_CompanyName" subtotal="Count" />
              <Field name="Discount" subtotal="Sum" format="n0" />
              <Field name="ExtendedPrice" subtotal="Sum" format="n0" />
              <Field name="Freight" subtotal="Sum" format="n0" />
              <Field name="OrderDate" subtotal="Count" format="dddd" />
              <Field name="OrderID" subtotal="Sum" format="n0" />
              <Field name="PostalCode" subtotal="Count" />
              <Field name="ProductID" subtotal="Sum" format="n0" />
              <Field name="ProductName" subtotal="Count" />
              <Field name="Quantity" subtotal="Sum" format="n0" />
              <Field name="Region" subtotal="Count" />
              <Field name="RequiredDate" subtotal="Count" format="d" />
              <Field name="Salesperson" subtotal="Count" />
              <Field name="ShipAddress" subtotal="Count" />
              <Field name="ShipCity" subtotal="Count" />
              <Field name="ShipCountry" subtotal="Count" />
              <Field name="ShipName" subtotal="Count" />
              <Field name="ShippedDate" subtotal="Count" format="d" />
              <Field name="Shippers_CompanyName" subtotal="Count" />
              <Field name="ShipPostalCode" subtotal="Count" />
              <Field name="ShipRegion" subtotal="Count" />
              <Field name="UnitPrice" subtotal="Sum" format="n0" />
            </Fields>
            <RowFields>
              <Field name="Salesperson" />
            </RowFields>
            <ColumnFields>
              <Field name="OrderDate" />
            </ColumnFields>
            <ValueFields>
              <Field name="ExtendedPrice" />
            </ValueFields>
          </C1FlexPivotEngine>
          <C1FlexPivotPrintDocument>
            <Header Text="&amp;[ViewTitle]&#x9;&amp;[Date]&#x9;Page &amp;[Page]" Separator="True" FontName="Arial" FontSize="9" FontStyle="Regular" />
            <Footer Text="" Separator="False" FontName="Arial" FontSize="9" FontStyle="Regular" />
            <Grid ShowGrid="True" GridOptions="1" />
            <Chart ShowChart="True" ChartFillsPage="True" />
            <RawData ShowRawData="False" RawDataOptions="1" />
            <PageSettings Landscape="False" Margins="100,100,100,100" />
          </C1FlexPivotPrintDocument>
          <FlexPivotChart ChartType="Bar" ColorGeneration="Office" ShowTitle="True" ShowLegend="Automatic" ShowGridLines="True" Stacked="True" />
        </FlexPivotPage>
      
        <FlexPivotPage id="SalesPerson vs Year">
          <C1FlexPivotEngine>
            <Fields>
              <Field name="Address" subtotal="Count" />
              <Field name="City" subtotal="Count" />
              <Field name="Country" subtotal="Count" />
              <Field name="CustomerID" subtotal="Count" />
              <Field name="Customers_CompanyName" subtotal="Count" />
              <Field name="Discount" subtotal="Sum" format="n0" />
              <Field name="ExtendedPrice" subtotal="Sum" format="n0" />
              <Field name="Freight" subtotal="Sum" format="n0" />
              <Field name="OrderDate" subtotal="Count" format="yyyy" />
              <Field name="OrderID" subtotal="Sum" format="n0" />
              <Field name="PostalCode" subtotal="Count" />
              <Field name="ProductID" subtotal="Sum" format="n0" />
              <Field name="ProductName" subtotal="Count" />
              <Field name="Quantity" subtotal="Sum" format="n0" />
              <Field name="Region" subtotal="Count" />
              <Field name="RequiredDate" subtotal="Count" format="d" />
              <Field name="Salesperson" subtotal="Count" />
              <Field name="ShipAddress" subtotal="Count" />
              <Field name="ShipCity" subtotal="Count" />
              <Field name="ShipCountry" subtotal="Count" />
              <Field name="ShipName" subtotal="Count" />
              <Field name="ShippedDate" subtotal="Count" format="d" />
              <Field name="Shippers_CompanyName" subtotal="Count" />
              <Field name="ShipPostalCode" subtotal="Count" />
              <Field name="ShipRegion" subtotal="Count" />
              <Field name="UnitPrice" subtotal="Sum" format="n0" />
            </Fields>
            <RowFields>
              <Field name="Salesperson" />
            </RowFields>
            <ColumnFields>
              <Field name="OrderDate" />
            </ColumnFields>
            <ValueFields>
              <Field name="ExtendedPrice" />
            </ValueFields>
          </C1FlexPivotEngine>
          <C1FlexPivotPrintDocument>
            <Header Text="&amp;[ViewTitle]&#x9;&amp;[Date]&#x9;Page &amp;[Page]" Separator="True" FontName="Arial" FontSize="9" FontStyle="Regular" />
            <Footer Text="" Separator="False" FontName="Arial" FontSize="9" FontStyle="Regular" />
            <Grid ShowGrid="True" GridOptions="1" />
            <Chart ShowChart="True" ChartFillsPage="True" />
            <RawData ShowRawData="False" RawDataOptions="1" />
            <PageSettings Landscape="False" Margins="100,100,100,100" />
          </C1FlexPivotPrintDocument>
          <FlexPivotChart ChartType="Bar" ColorGeneration="Office" ShowTitle="True" ShowLegend="Automatic" ShowGridLines="True" Stacked="True" />
        </FlexPivotPage>  
        
      </FlexPivotViews>
      
  2. 上で XML(FlexPivotViews.xml)ファイルに作成したビュー定義を2つの画像ファイル CollapseAll.png()および Views_small.png()と共にフォルダ(ここでは「Resources」)に追加します。
  3. Resources フォルダをプロジェクトのフォルダ構造に追加し、ソリューションエクスプローラーからそれをプロジェクトに含めます。
  4. ソリューションエクスプローラーでプロジェクトを右クリックし、[プロパティ]を選択してプロジェクトデザイナを開きます。
  5. Resources を選択し、 [文字列] ドロップダウンメニューをクリックします。次の図のように、 ドロップダウンから[画像] オプションを選択します。

  6. [リソースの追加]ドロップダウンメニューを選択し、[既存のファイルの追加] オプションを選択します。

  7. 手順2で2つの画像ファイルを追加した Resources フォルダを参照し、それらをプロジェクトデザイナに追加します。
  8. [文字列]ドロップダウンメニューをクリックします。ドロップダウンから[ファイル]オプションを選択します。
  9. [リソースの追加]ドロップダウンメニューを選択し、[既存のファイルの追加]オプションを選択します。
  10. 手順2で FlexPivotViews.xml ファイルを追加した Resources フォルダを参照し、それをプロジェクトデザイナに追加します。
  11. コードビュー(Form1.cs)に切り替え、次のコードを追加して、定義済みビューを含むメニューを作成します。
    ' 定義済みビューのメニューをビルドします。
    Dim doc = New System.Xml.XmlDocument()
    doc.LoadXml(My.Resources.FlexPivotViews)
    Dim menuView = New C1.Win.C1Command.C1CommandMenu()
    menuView.Text = "&View"
    menuView.Image = My.Resources.Views_small
    
    // 定義済みビューのメニューをビルドします。
    var doc = new System.Xml.XmlDocument();
    doc.LoadXml(Properties.Resources.FlexPivotViews);
    var menuView = new C1.Win.C1Command.C1CommandMenu();
    menuView.Text = "&View";
    menuView.Image = Properties.Resources.Views_small;
    
  12. 上のコードスニペットの下に次のコードを追加して、ドロップダウンメニューで選択されたビューを適用します。
    For Each nd As System.Xml.XmlNode In doc.SelectNodes("FlexPivotViews/C1FlexPivotPage")
        Dim cmd = New C1.Win.C1Command.C1Command()
        cmd.Text = nd.Attributes("id").Value
        cmd.UserData = nd
        AddHandler cmd.Click, AddressOf menuView_DropDownItemClicked
        Dim link = New C1.Win.C1Command.C1CommandLink(cmd)
        menuView.CommandLinks.Add(link)
    Next nd
    
    foreach (System.Xml.XmlNode nd in doc.SelectNodes("FlexPivotViews/C1FlexPivotPage"))
    {
        var cmd = new C1.Win.C1Command.C1Command();
        cmd.Text = nd.Attributes["id"].Value;
        cmd.UserData = nd;
        cmd.Click += menuView_DropDownItemClicked;
        var link = new C1.Win.C1Command.C1CommandLink(cmd);
        menuView.CommandLinks.Add(link);
    }
    
  13. menuView_DropDownItemClicked イベントに対して作成されたイベントハンドラに次のコードを追加します。
    Private Sub menuView_DropDownItemClicked(ByVal sender As Object, ByVal e As C1.Win.C1Command.ClickEventArgs)
        Dim nd = TryCast(e.CallerLink.Command.UserData, System.Xml.XmlNode)
        If nd IsNot Nothing Then
            '  XMLからのロードビュー定義
            c1FlexPivotPage1.ViewDefinition = nd.OuterXml
    
            ' ステータスバーに現在のビュー名を表示します。
            c1FlexPivotPage1.LabelStatus.Text = nd.Attributes("id").Value
        End If
    End Sub
    
    private void menuView_DropDownItemClicked(object sender, C1.Win.C1Command.ClickEventArgs e)
    {
        var nd = e.CallerLink.Command.UserData as System.Xml.XmlNode;
        if (nd != null)
        {
            // XMLからのロードビュー定義
            c1FlexPivotPage1.ViewDefinition = nd.OuterXml;
    
            // ステータスバーに現在のビュー名を表示します。
            c1FlexPivotPage1.LabelStatus.Text = nd.Attributes["id"].Value;
        }
    }
    
  14. 次のコードを使用して、FlexPivotPage コントロールに表示されるツールストリップに新しい[ビユー]メニューを追加します。
    ' C1FlexPivotPageのツールストリップに新しいビューメニューを追加します。
    Dim menuLink = New C1.Win.C1Command.C1CommandLink(menuView)
    c1FlexPivotPage1.ToolBar.CommandLinks.Insert(3, menuLink)
    
    // C1FlexPivotPageのツールストリップに新しいビューメニューを追加します。
    var menuLink = new C1.Win.C1Command.C1CommandLink(menuView);
    c1FlexPivotPage1.ToolBar.CommandLinks.Insert(3, menuLink);
    
  15. Form1 クラスで C1Command タイプの新しい変数(ここでは collapseAllView)を初期化します。
    Dim collapseAllView As C1.Win.C1Command.C1Command
    
    C1.Win.C1Command.C1Command collapseAllView;
    
  16. 次のコードを使用して、FlexPivotPage コントロールに表示されるツールストリップに[CollapseAll]メニューを追加します。
    ' C1FlexPivotPageに「すべて折りたたむ」のメニューを追加します。
    collapseAllView = New C1.Win.C1Command.C1Command()
    collapseAllView.Text = "&CollapseAll"
    collapseAllView.Image = My.Resources.CollapseAll
    AddHandler collapseAllView.Click, AddressOf collapseAllView_Click
    Dim collapseAllViewLink = New C1.Win.C1Command.C1CommandLink(collapseAllView)
    c1FlexPivotPage1.ToolBar.CommandLinks.Add(collapseAllViewLink)
    
    // C1FlexPivotPageにすべて折りたたむ」のメニューを追加します。
    collapseAllView = new C1.Win.C1Command.C1Command();
    collapseAllView.Text = "&CollapseAll";
    collapseAllView.Image = Properties.Resources.CollapseAll;
    collapseAllView.Click += collapseAllView_Click;
    C1.Win.C1Command.C1CommandLink collapseAllViewLink 
    = new C1.Win.C1Command.C1CommandLink(collapseAllView);
    c1FlexPivotPage1.ToolBar.CommandLinks.Add(collapseAllViewLink);
    
  17. collapseAllView_Click イベントに対して作成されたイベントハンドラに次のコードを追加します。
    Private Sub collapseAllView_Click(ByVal sender As Object, ByVal e As EventArgs)
        c1FlexPivotPage1.FlexPivotGrid.CollapseAllCols()
        c1FlexPivotPage1.FlexPivotGrid.CollapseAllRows()
    End Sub
    
    private void collapseAllView_Click(object sender, C1.Win.C1Command.ClickEventArgs e)
    {
        c1FlexPivotPage1.FlexPivotGrid.CollapseAllCols();
        c1FlexPivotPage1.FlexPivotGrid.CollapseAllRows();
    }
    
  18. 次のコードを使用して c1FlexPivotPage1.Updated イベントをサブスクライブします。
    AddHandler c1FlexPivotPage1.Updated, AddressOf c1FlexPivotPage1_Updated
    
    c1FlexPivotPage1.Updated += c1FlexPivotPage1_Updated;
    
  19. c1FlexPivotPage1.Updated イベントに対して作成されたイベントハンドラに次のコードを追加します。
    Private Sub c1FlexPivotPage1_Updated(ByVal sender As Object, ByVal e As EventArgs)
        ' ユーザーの調整後にレポート名を削除します。
        c1FlexPivotPage1.LabelStatus.Text = String.Empty
    
        ' collapseAllViewの更新ボタンの状態。
        If (c1FlexPivotPage1.ShowTotalsColumns 
        = C1.FlexPivot.ShowTotals.Subtotals Or c1FlexPivotPage1.ShowTotalsRows 
        = C1.FlexPivot.ShowTotals.Subtotals) Then
            collapseAllView.Enabled = True
        Else
            collapseAllView.Enabled = False
        End If
    End Sub
    
    private void c1FlexPivotPage1_Updated(object sender, EventArgs e)
    {
        // ユーザーの調整後にレポート名を削除します。
        c1FlexPivotPage1.LabelStatus.Text = string.Empty;
    
        // collapseAllViewの更新ボタンの状態。
        if (c1FlexPivotPage1.ShowTotalsColumns == C1.FlexPivot.ShowTotals.Subtotals 
            || c1FlexPivotPage1.ShowTotalsRows == C1.FlexPivot.ShowTotals.Subtotals)
            collapseAllView.Enabled = true;
        else
            collapseAllView.Enabled = false;
    }
    
  20. [F5] キーを押してアプリケーションを実行します。ツールストリップに[ビユー]ドロップダウンメニューが表示されます。

  21. ビユー]ドロップダウンメニューをクリックし、FlexPivotViews.xml ファイルで追加された定義を持つすべてのビューがリストに表示されることを確認します。