OLAP for WPF /Silverlight
定義済みビューの作成
C1Olap クイックスタート > C1OlapPage のカスタマイズ > 定義済みビューの作成

現在のビューを XML 文字列として取得または設定する ViewDefinition プロパティに加えて、C1OlapPage コントロールは、ビューをファイルおよびストリームに維持できる ReadXml および WriteXml メソッドも公開しています。これらのメソッドは、組み込みメニューの[ロード]および[保存]ボタンをクリックすると、C1OlapPage によって自動的に呼び出されます。

これらのメソッドを使用することで、事前定義されたビューをとても簡単に実装することができます。この場合は、最初にいくつかビューを作成し、[保存]ボタンを押してそれぞれのビューを保存します。この例では、以下の分類で売上を示す5つのビューを作成します。

  1. 製品と国
  2. 従業員と国
  3. 従業員と月
  4. 従業員と平日
  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 をまったく使用せずに、下位レベルの C1OlapPanelC1OlapGrid、および C1OlapChart コントロールを使用してユーザーインタフェースを構築することもできます。C1OlapPage コントロールのソースコードがパッケージに含まれており、作業の開始点として使用できます。「カスタムユーザーインタフェースの作成」セクションの例は、この方法を示しています。