現在のビューを XML 文字列として取得または設定する ViewDefinition プロパティに加えて、C1OlapPage コントロールは、ビューをファイルおよびストリームに維持できる ReadXml および WriteXml メソッドも公開しています。これらのメソッドは、組み込みメニューの[ロード]および[保存]ボタンをクリックすると、C1OlapPage によって自動的に呼び出されます。
これらのメソッドを使用することで、事前定義されたビューをとても簡単に実装することができます。この場合は、最初にいくつかビューを作成し、[保存]ボタンを押してそれぞれのビューを保存します。この例では、以下の分類で売上を示す5つのビューを作成します。
すべてのビューを作成して保存したら、"OlapViews" ノードを含む "DefaultViews.xml" という名前の新しい XML ファイルを作成し、すべてのデフォルトビューをコピーしてこのドキュメントに貼り付けます。次に、各ビューに "id" タグを追加し、それぞれに一意の名前を割り当てます。この名前は、ユーザーインタフェースに表示されます(C1OlapGrid では必要ありません)。XML ファイルは次のようになります。
XAML |
コードのコピー
|
---|---|
<OlapViews> <C1OlapPage id="Product vs Country"> <!-- view definition omitted... --> C1OlapPage id="Employee vs Country"> <!-- view definition omitted... --> <C1OlapPage id="Employee vs Month"> <!-- view definition omitted... --> <C1OlapPage id="Employee vs Weekday">> <!-- view definition omitted... --> <C1OlapPage id="Employee vs Year"> <!-- view definition omitted... --> </OlapViews> |
このファイルをプロジェクトにリソースとして追加します。それには、プロジェクトに新しいフォルダを追加し、"Resources" という名前を付けます。次に、ソリューションエクスプローラーで、[Resources]フォルダを右クリックし、[既存のファイルの追加...]オプションを選択します。XML ファイルを選択し、[OK]をクリックします。
ビュー定義の準備ができたので、ユーザーが選択できるようにメニューに公開する必要があります。それには、次のコードをプロジェクトにコピーします。
C# |
コードのコピー
|
---|---|
public MainPage() { InitializeComponent(); //ここは変更しません //… // 事前定義されたビューを XML リソースから取得します var views = new Dictionary<string, string>(); using (var s = asm.GetManifestResourceStream("OlapQuickStart.Resources.OlapViews.xml")) using (var reader = XmlReader.Create(s)) { // 事前定義されたビュー定義を読み込みます while (reader.Read()) { if (reader.NodeType == XmlNodeType.Element && reader.Name == "C1OlapPage") { var id = reader.GetAttribute("id"); var def = reader.ReadOuterXml(); views[id] = def; } } } // 事前定義されたビューで新しいメニューを構築します var menuViews = new C1MenuItem(); menuViews.Header = "View"; menuViews.Icon = GetImage("Resources/views.png"); menuViews.VerticalAlignment = VerticalAlignment.Center; ToolTipService.SetToolTip(menuViews, "Select a predefined Olap view."); foreach (var id in views.Keys) { var mi = new C1MenuItem(); mi.Header = id; mi.Tag = views[id]; mi.Click += mi_Click; menuViews.Items.Add(mi); } // ページのメインメニューに新しいメニューを追加します _c1OlapPage.MainMenu.Items.Insert(6, menuViews); } |
このコードは、OLAP 定義を含む XML ドキュメントをロードし、C1Menu を使用して新しいドロップダウンメニュー項目を作成し、検出されたビューをドロップダウンに挿入します。各メニュー項目の Header プロパティにはビュー名、Tag プロパティには実際の XML ノードが含まれます。このノードは、後でユーザーが選択したビューを適用するために使用されます。
ドロップダウンの準備ができたら、このコードは、MainMenu プロパティを使用して C1OlapPage にドロップダウンを追加します。最初のいくつかのボタンの後に、新しいボタンが追加されます。
上のコードでは、新しいメニューボタンの画像をロードするために、単純なメソッド GetImage が呼び出されています。1つの画像をロードするだけであれば、このような作業は必要ありませんが、複数の画像をロードする場合いは、何度も使用できる一般的なメソッドが役立ちます。
C# |
コードのコピー
|
---|---|
// URI から画像をロードするためのユーティリティ static Image GetImage(string name) { var uri = new Uri(name, UriKind.Relative); var img = new Image(); img.Source = new BitmapImage(uri); img.Stretch = Stretch.None; img.VerticalAlignment = VerticalAlignment.Center; img.HorizontalAlignment = HorizontalAlignment.Center; return img; } |
ここまでで不足しているコードは、ユーザーがメニュー項目をクリックして選択する際に、C1OlapPage にビューを適用するコードです。これは、次のコードを使用して行います。
C# |
コードのコピー
|
---|---|
// 事前定義されたビューを適用します void mi_Click(object sender, SourcedEventArgs e) { var mi = sender as C1MenuItem; var viewDef = mi.Tag as string; _c1OlapPage.ViewDefinition = viewDef; } |
このコードは、メニューの Tag プロパティを読み込むことで、XML 文字列として OLAP 定義を取得し、それを C1OlapPage.ViewDefinition プロパティに割り当てます。
さらにカスタマイズが必要な場合は、C1OlapPage をまったく使用せずに、下位レベルの C1OlapPanel、C1OlapGrid、および C1OlapChart コントロールを使用してユーザーインタフェースを構築することもできます。C1OlapPage コントロールのソースコードがパッケージに含まれており、作業の開始点として使用できます。「カスタムユーザーインタフェースの作成」セクションの例は、この方法を示しています。