現在のビューを XML 文字列として取得または設定する ViewDefinition プロパティに加え、C1OlapPage コントロールは、ビューをファイルおよびストリームに維持できる ReadXml および WriteXml メソッドも公開しています。これらのメソッドは、組み込みツールストリップの[ロード]および[保存]ボタンをクリックすると、C1OlapPage によって自動的に呼び出されます。
これらのメソッドを使用することで、事前定義されたビューをとても簡単に実装することができます。この場合は、最初にいくつかビューを作成し、[保存]ボタンを押してそれぞれのビューを保存します。この例では、以下の分類で売上を示す5つのビューを作成します。
すべてのビューを作成して保存したら、"OlapViews" ノードを含む "OlapViews.xml" という名前の新しい XML ファイルを作成し、すべてのデフォルトビューをコピーしてこのドキュメントに貼り付けます。次に、各ビューに "id" タグを追加し、それぞれに一意の名前を割り当てます。この名前は、ユーザーインタフェースに表示されます(OLAP では必要ありません)。XML ファイルは次のようになります。
<OlapViews>
<C1OlapPage id="Product vs Country">
<!-- view definition omitted... -->
<C1OlapPage id="SalesPerson vs Country">
<!-- view definition omitted... -->
<C1OlapPage id="SalesPerson vs Year">
<!-- view definition omitted... -->
<C1OlapPage id="SalesPerson vs Month">>
<!-- view definition omitted... -->
<C1OlapPage id="SalesPerson vs Weekday">
<!-- view definition omitted... -->
</OlapViews>
このファイルをプロジェクトにリソースとして追加します。それには、次の手順に従います。
ビュー定義の準備ができたので、ユーザーが選択できるようにメニューに公開する必要があります。それには、次のコードをプロジェクトにコピーします。
コード |
コードのコピー
|
---|---|
private void Form1_Load(object sender, EventArgs e) { // 自動生成されます。 // このコードの行は、データを 'nWINDDataSet.Invoices' テーブルにロードします。 this.invoicesTableAdapter.Fill(this.nwindDataSet.Invoices); // 事前定義されたビューでメニューを構築します var doc = new System.Xml.XmlDocument(); doc.LoadXml(Properties.Resources.OlapViews); var menuView = new ToolStripDropDownButton("&View"); foreach (System.Xml.XmlNode nd in doc.SelectNodes("OlapViews/C1OlapPage")) { var tsi = menuView.DropDownItems.Add(nd.Attributes["id"].Value); tsi.Tag = nd; } menuView.DropDownItemClicked += menuView_DropDownItemClicked; c1OlapPage1.Updated += c1OlapPage1_Updated; // C1OlapPage ツールストリップに新しいビューメニューを追加します c1OlapPage1.ToolStrip.Items.Insert(3, menuView); } |
コードは、新しいツールストリップドロップダウンボタンを作成し、XML ドキュメントにレポート定義をロードし、検索したレポートをドロップダウンボタンに追加します。各項目の Text プロパティにはビュー名、Tag プロパティには実際の XML ノードが含まれます。このノードは、後でユーザーが選択したビューを適用するために使用されます。
ドロップダウンの準備ができたら、このコードは、ToolStrip プロパティを使用して C1OlapPage にドロップダウンを追加します。新しいボタンが、最初の2つのボタンと最初のセパレータに続く位置3に追加されます。
ここまでで不足しているコードは、ユーザーがボタンをクリックして選択する際に、C1OlapPage にビューを適用するコードです。これは、次のコードを使用して行います。
コード |
コードのコピー
|
---|---|
// 事前定義されたビューを選択します void menuView_DropDownItemClicked(object sender, ToolStripItemClickedEventArgs e) { var nd = e.ClickedItem.Tag as System.Xml.XmlNode; if (nd != null) { // XML からビュー定義をロードします c1OlapPage1.ViewDefinition = nd.OuterXml; // 現在のビュー名をステータスバーに表示します c1OlapPage1.LabelStatus.Text = nd.Attributes["id"].Value; } } void c1OlapPage1_Updated(object sender, EventArgs e) { // ユーザーが変更を行ったらレポート名をクリアします c1OlapPage1.LabelStatus.Text = string.Empty; } |
このコードは、ノードの OuterXml プロパティを読み込むことで、XML 文字列としてレポート定義を取得し、それを ViewDefinition プロパティに割り当てます。また、LabelStatus プロパティを使用して、C1OlapPage ステータスバーにビューの名前も表示します。
最後にコードは、Updated イベントを処理し、ユーザーがビューを変更するたびにステータスバーをクリアします。これは、ビューが、アプリケーションリソースからロードされた定義済みビューに一致しなくなったことを示します。
C1OlapPage では、ほとんどのコンポーネントが公開されているため、カスタマイズが容易です。TabControl のツールストリップから、要素を追加、削除、または変更し、LabelStatus プロパティを使用してステータスメッセージを表示できます。ページには、C1OlapPage のほか、他の要素も追加できます。
さらにカスタマイズが必要な場合は、C1OlapPage をまったく使用せずに、下位レベルの C1OlapPanel、C1OlapGrid、および C1OlapChart コントロールを使用してユーザーインタフェースを構築することもできます。C1OlapPage コントロールのソースコードがパッケージに含まれており、作業の開始点として使用できます。「カスタムユーザーインタフェースの作成」セクションの例は、この方法を示しています。