ComponentOne OLAP for WinForms帮助文档
代码中配置字段

交互性是Olap应用的一个主要优势。用户应该能够很方便的创建和修改视图,并且迅速看到结果。C1Olap通过它的仿Excel用户界面,用户友好且简单的对话框很好的实现了这一点。


但是在某些情况下,你业务想要使用代码配置视图。C1Olap通过强大的对象模型,特别是Field类和Filter类来实现这一点。


下面的例子介绍了用户如何通过C1Olap创建和配置视图。


首先创建一个新的WinForms应用,然后添加一个C1OlapPage  控件到表单中。切换到代码视图,使用下述代码加载数据,然后将其赋值到C1OlapPage 控件。

public Form1()
{
  InitializeComponent();

  // get data
  var da = new OleDbDataAdapter("select * from invoices",
                                 GetConnectionString());
  var dt = new DataTable();
  da.Fill(dt);

  // bind to olap page
  this.c1OlapPage1.DataSource = dt;

  // build initial view
  var olap = this.c1OlapPage1.OlapEngine;
  olap.ValueFields.Add("ExtendedPrice");
  olap.RowFields.Add("ProductName", "OrderDate");
}
static string GetConnectionString()
{
  string path = Environment.GetFolderPath(
         Environment.SpecialFolder.Personal) +
         @"\ComponentOne Samples\Common";
  string conn = @"provider=microsoft.jet.oledb.4.0;data source={0}\c1nwind.mdb;";
  return string.Format(conn, path);
}

代码从NorthWind数据库(由C1Olap安装)中加载了”Invoices”视图,将数据绑定到C1OlapPage控件,然后生成一个初始化视图用于显示根据产品和订单日期统计的”ExtendedPrice”字段的总和。这和上一个示例基本类似。
如果你现在运行示例,你将看到一个包含所有的产品和日期的Olap视图。

接下来,让我们用C1Olap对象模型来改变订单日期和总价的显示格式:

public Form1()
{
  InitializeComponent();
 
  // get data
  // no change…
 
  // bind to olap page
  // no change…
 
  // build initial view
  // no change…
 
  // format order date
  var field = olap.Fields["OrderDate"];
  field.Format = "yyyy";
 
  // format extended price and change the Subtotal type
  // to show the average extended price (instead of sum)
  field = olap.Fields["ExtendedPrice"];
  field.Format = "c";
  field.Subtotal = C1.Olap.Subtotal.Average;
}

代码将从包含数据源中所有指定字段的Fields集合中检索个别字段。然后将它希望的值赋给Format 和Subtotal属性。Format是常规的.NET字符串,Subtotal决定数值如何聚集显示在Olap视图中。缺省情况下,数值将完成添加,同时其他的聚合统计功能同样可用。这些功能包括求平均值,最大值,最小值,标准偏差以及方差。

现在你可能仅对数据中的子集感兴趣,其中描述了一部分产品和一个年份的数据。用户可以右键单击字段,然后对它们应用过滤器。你同样可以通过代码实现这一功能:

public Form1()
{
  InitializeComponent();
 
  // get data
  // no changes…
 
  // bind to olap page
  // no changes…
 
  // build view
  // no changes…
 
  // format order date and extended price
  // no changes…
 
  // apply value filter to show only a few products
  C1.Olap.C1OlapFilter filter = olap.Fields["ProductName"].Filter;
  filter.Clear();
  filter.ShowValues = "Chai,Chang,Geitost,Ikura".Split(',');
 
  // apply condition filter to show only some dates
  filter = olap.Fields["OrderDate"].Filter;
  filter.Clear();
  filter.Condition1.Operator = 
         C1.Olap.ConditionOperator.GreaterThanOrEqualTo;
  filter.Condition1.Parameter = new DateTime(1996, 1, 1);
  filter.Condition2.Operator = 
         C1.Olap.ConditionOperator.LessThanOrEqualTo;
  filter.Condition2.Parameter = new DateTime(1996, 12, 31);
  filter.AndConditions = true;
 
}

代码首先检索关联了”ProductName”字段的C1OlapFilter对象。然后,它清除过滤器,并设置ShowValues属性。这个数据包含一个应该在过滤器中显示的数值数组。在C1Olap中,我们称其为一个”value filter”。

接下来,代码检索关联”OrderDate”字段的过滤器。这一次,我们想要展示指定年份的数值。但是我们并不想列举一整年的每一天。取而代之的是,我们使用一个条件过滤器,通过两个条件来定义它。

第一个条件指定”OrderDate”的数值应该大于等于1996年1月1日。第二个条件用于指定”OrderDate”数值应该小于等于1996年12月31日。AndConditions属性指定第一以及第二条件如何应用(AND还是OR)。在本例中,我们希望日期同时满足这两个条件,所以AndConditions设置为True。

如果你再次运行项目,你看到的效果应该如下图所示:

 

 


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