如何在C1Olap排序后选择行以及自定义DetailView Dialog

当使用者在单元格上右键单击的时候,C1Olap会显示一个DetailView对话框。有的时候,我们需要改变这个默认对话框的样式,比如隐藏一些列或是更改Styles等等。本文就介绍如何在C1Olap排序后,右键单击弹出DetailView对话框,并且自定义DetailView对话框。1.创建Olap2.自定义DetailsWindow.

发布于 2014/08/16 00:00

ComponentOne Enterprise

当使用者在单元格上右键单击的时候,C1Olap会显示一个DetailView对话框。有的时候,我们需要改变这个默认对话框的样式,比如隐藏一些列或是更改Styles等等。

本文就介绍如何在C1Olap排序后,右键单击弹出DetailView对话框,并且自定义DetailView对话框。

1.创建Olap

首先从创建数据库开始,我们从Zip文件读取数据,代码如下:

// load data from embedded zip resource 
var ds = new DataSet(); 
var asm = Assembly.GetExecutingAssembly(); 
using (var s = asm.GetManifestResourceStream("OlapQuickStart.nwind.zip")) 
{ 
    var zip = new C1ZipFile(s); 
    using (var zr = zip.Entries[0].OpenReader()) 
    { 
        // load data 
        ds.ReadXml(zr); 
    } 
}

 

然后为这个数据添加一个新的Olap页面,写在Page_Load事件里。

// bind olap page to data 
              _c1OlapPage.DataSource = ds.Tables[0].DefaultView;

              // show sales by country and category 
              var olap = _c1OlapPage.OlapPanel.OlapEngine; 
              olap.DataSource = ds.Tables[0].DefaultView; 
              olap.BeginUpdate(); 
              olap.RowFields.Add("Country"); 
              olap.ColumnFields.Add("Category"); 
              olap.ValueFields.Add("Sales"); 
              olap.Fields["Sales"].Format = "n0"; 
              olap.EndUpdate();

 

当右键单击时,获取单击单元格的行,并且展示数据在DetailsView里。我们需要调用MouseRightButtonDown事件,去为展示DetailsView写代码,如果想要在排序后选择到正确行,需要使用OlapGrid.SelectedItem获取被选行,强转成DataRowView并传到GetDetail方法里。

自定义的DetailsWindow的展示也在代码里,如下:

// get OlapEngine to work with 
                C1OlapGrid _olapGrid = _c1OlapPage.OlapGrid; 
                // add event to display new details 
                _olapGrid.AddHandler(MouseRightButtonDownEvent, new MouseButtonEventHandler((_s, _e) => 
                { 
                    // get OlapGrid information for the mouse position 
                    C1.Silverlight.FlexGrid.HitTestInfo hti = _olapGrid.HitTest(_e.GetPosition(_s as C1OlapGrid)); 
                    // make sure we are working with a cell 
                    if (hti.CellType == C1.Silverlight.FlexGrid.CellType.Cell) 
                    { 
                        DataRowView row = _olapGrid.SelectedItem as DataRowView; 
                        var data = _c1OlapPage.OlapEngine.GetDetail(row.GetRow(), _c1OlapPage.OlapEngine.OlapTable.Columns[hti.Column].ColumnName);

                        // create new details window and pass it data 
                        DetailsWindow details = new DetailsWindow(data); 
                        // shows new window 
                        details.Show(); 
                    } 
                }), true);

Olap展示数据效果图如下:

 

 

2.自定义Details View对话框

现在新建DetailsWindow。为了实现这步,选择项目,单击右键,选择“新建项目”,然后弹出对话框。在这个对话框,选择Silverlight Child Window,命名为“DetailsWindow”。

在子窗体里,我们使用C1Flexgrid for Silverlight控件,然后处理列。Xaml代码如下: 

<c1:C1FlexGrid x:Name="detailsGrid" AutoGenerateColumns="False" ItemsSource="{Binding}">
            <c1:C1FlexGrid.Columns>               
                <c1:Column Binding="{Binding Path=Category}" Header="Category" />
                <c1:Column Binding="{Binding Path=Country}" Header="Country"/>
                <c1:Column Binding="{Binding Path=Product}" Header="Product" />   
                <c1:Column Binding="{Binding Path=Sales}" Header="Sales"/>
            </c1:C1FlexGrid.Columns>
        </c1:C1FlexGrid>

跳转到C#代码接,写一个新的Constructor接受数据:

public DetailsWindow(object Data) 
      { 
          InitializeComponent(); 
          detailsGrid.DataContext = Data; 
      }

 

默认的DetailsView对话框如下: 

自定义的DetailsView对话框如下:

 

本文Sample如下: 

OlapTestSample.zip (50.10 kb)

 

关于葡萄城

葡萄城是专业的软件开发技术和低代码平台提供商,以“赋能开发者”为使命,致力于通过表格控件、低代码和BI等各类软件开发工具和服务,一站式满足开发者需求,帮助企业提升开发效率并创新开发模式。葡萄城开发技术始于1980年,40余年来始终聚焦软件开发技术,有深厚的技术积累和丰富的产品线。是业界能够同时赋能软件开发和低代码开发的企业。凭借过硬的产品能力、活跃的用户社区和丰富的伙伴生态,与超过3000家合作伙伴紧密合作,产品广泛应用于信息和软件服务、制造、交通运输、建筑、金融、能源、教育、公共管理等支柱产业。

相关产品
推荐相关案例
关注微信
葡萄城社区二维码

关注“葡萄城社区”

活字格低代码二维码

关注“活字格低代码”

想了解更多信息,请联系我们, 随时掌握技术资源和产品动态