ComponentOne OLAP for WinForms帮助文档
创建预定义视图

除了使用ViewDefinition属性通过XML字符串来获取和设置当前视图外,C1OlapPage 控件还提供ReadXml和WriteXml方法让你将视图持久化到文件或者流中。当你在内置工具栏中单击”Load”和”Save”按钮时,这些方法已经被C1OlapPage 自动包含。

这些方法允许你非常简单的实现预定义视图。想要完成这一工作,你首先要创建一些视图,然后单击”Save”按钮保存每个视图。在本例中,我们将创建5个视图显示销售额:

  1. 产品和国家
  2. 销售人员和国家
  3. 销售人员和年份
  4. 销售人员和月份
  5. 销售人员和周


一旦你创建完毕并且保存了所有的视图,你需要创建一个叫做”OlapViews.xml”的XML文件,该文件包含一个”OlapViews”节点,然后复制和粘贴你的默认视图到这个文档中。接下来,增加”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>

现在将这个文件作为资源加入到项目中,完成以下步骤实现该功能:

  1. 右键单击解决方案浏览器中的项目结点,然后单击”Properties”。
  2. 选择”Resource”选项卡,单击”Add Resource”旁边的下拉箭头。
  3. 选择”Add Existing File…”选项,选择XML文件,然后单击Open按钮。

现在视图模板已经准备就绪,我们需要在菜单中显示它们以便用户可以进行选择。想要完成这一工作,将下述代码复制到项目中:


private void Form1_Load(object sender, EventArgs e)
{
    // auto-generated:
    // This line of code loads data into the 'nWINDDataSet.Invoices' table.
    this.invoicesTableAdapter.Fill(this.nwindDataSet.Invoices);
 
    // build menu with predefined views:
    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;
 
    // add new view menu to C1OlapPage toolstrip
    c1OlapPage1.ToolStrip.Items.Insert(3, menuView);
}

上述代码将创建一个新的下拉工具栏按钮,通过加载内含报表模板的XML文档,在报表创建时放置下拉按钮。每一个条目在它的Text属性中都包含视图的名称并且在它的Tag属性中包含了实际的XML节点。该节点将在稍后用户选中时应用到报表中。

一旦下拉按钮准备就绪,上述代码使用ToolStrip属性将其添加到C1OlapPage 中。新按钮添加到位置3,在初始的两个按钮以及初始分隔符的后面。

唯一缺少的部分是当用户单击按钮选择它们时,如何将视图添加到C1OlapPage 的代码。下述代码将实现该功能:

// select a predefined view
void menuView_DropDownItemClicked(object sender, ToolStripItemClickedEventArgs e)
{
    var nd = e.ClickedItem.Tag as System.Xml.XmlNode;
    if (nd != null)
    {
   // load view definition from XML
   c1OlapPage1.ViewDefinition = nd.OuterXml;
 
   // show current view name in status bar
   c1OlapPage1.LabelStatus.Text = nd.Attributes["id"].Value;
    }
}
void c1OlapPage1_Updated(object sender, EventArgs e)
{
    // clear report name after user made any changes
    c1OlapPage1.LabelStatus.Text = string.Empty;
}

代码通过读取OuterXml属性的节点以XML字符串的形式检索报表模板,然后将其赋值给ViewDefinition属性。它同时还在C1OlapPage 状态条中使用LabelStatus属性显示视图名称。

最后,在用户对视图作出任何更改后,代码将调用Updated事件清除状态条。这种情况表明视图并不匹配从应用资源中加载的预定义视图。

C1OlapPage 公开了大部分包含组件,这样可以使定制更容易实现。你可以使用TabControl的工具栏对元素进行添加,删除或者修改等操作。并且可以使用LabelStatus属性显示状态信息。除了添加到C1OlapPage 中之外,你还可以添加其他元素到页面中。

如果你需要更深层次的定制,你也可以选择不使用C1OlapPage,创建你自己的界面,使用联通级别更低的 C1OlapPanel, C1OlapGrid和 C1OlapChart  控件。C1OlapPage 控件的源代码包含在包中,可以作为起始项目。 “Building a custom User Interface”部分的示例将告诉你如何实现这些功能。

 

 


产品网站:http://www.gcpowertools.com.cn 咨询热线:4006576008 ©2015 西安葡萄城