界面开发工具DevExpress WinForms使用教程:将Pivot Grid用作主筛选器项

DevExpress WinForms能完美构建流畅、美观且易于使用的应用程序,无论是Office风格的界面,还是分析处理大批量的业务数据,它都能轻松胜任!体验击下载>>

先决条件
  • 平台:Business Intelligence
  • 产品:WinForms Dashboard

2. 处理DashboardDesigner.DashboardItemClick 事件,来从clicked元素获取尺寸的值,并将其传递给仪表盘参数。

C#

void OnDashboardItemClick(object sender, DashboardItemMouseActionEventArgs e) {if(e.DashboardItemName == "pivotDashboardItem1" && !skipFiltering) {dashboardDesigner1.BeginUpdateParameters();//clear all parametersClearPivotFilter();//set selected columns and rows to parametersSetParameterValue(e.GetAxisPoint("Column"));SetParameterValue(e.GetAxisPoint("Row"));dashboardDesigner1.EndUpdateParameters();}}

skipFiltering变量指示是否按下Expand / Collapse 按钮,在这种情况下,该变量用于跳过设置过滤器。

3. 上面的代码段未设置或清除单击元素无法访问的尺寸值,您需要设置仅与所选相交点对应的参数值,并在设置新的值之前清除仪表盘参数中的先前值。

创建以下用于清除参数值的方法:

C#

void ClearPivotFilter() {PivotDashboardItem pivotItem = dashboardDesigner1.Dashboard.Items["pivotDashboardItem1"] as PivotDashboardItem;ClearParameters(pivotItem.Columns);ClearParameters(pivotItem.Rows);}void ClearParameters(DimensionCollection dimensions) {foreach(var dimension in dimensions)dashboardDesigner1.Parameters[GetParameterDataMember(dimension.DataMember)].SelectedValue = null;}

4. 当最终用户单击行或列中的 Expand / Collapse按钮时,Dashboard Designer将引发DashboardDesigner.DashboardItemClick事件,处理DashboardDesigner.DashboardItemControlCreated事件来在这种情况下跳过设置过滤器。

C#

bool skipFiltering = false;private void dashboardDesigner1_DashboardItemControlCreated(object sender, DevExpress.DashboardWin.DashboardItemControlEventArgs e) {if(e.DashboardItemName == "pivotDashboardItem1") {e.PivotGridControl.MouseDown += PivotGridControl_MouseDown;}}private void PivotGridControl_MouseDown(object sender, MouseEventArgs e) {PivotGridControl pivot = sender as PivotGridControl;PivotGridHitInfo hi = pivot.CalcHitInfo(e.Location);skipFiltering = (hi.ValueInfo != null && hi.ValueInfo.ValueHitTest == PivotGridValueHitTest.ExpandButton);}

5. 要通过与Pivot Item相关的仪表盘参数筛选其仪表盘项时,请向这些项添加所有必须的尺寸。如果不想向最终用户显示尺寸,请将尺寸放置到”Hidden Dimensions” 部分。

然后将以下过滤器表达式添加到仪表盘项目:

Code

([Dimension1] = imension1Param Or imension1Param Is Null) And
([Dimension2] = imension2Param Or imension2Param Is Null) And

([DimensionN] = imensionNParam Or imensionNParam Is Null)

本示例使用以下表达式:

Code

([Product] = roductParam Or roductParam Is Null)
And ([Category] = ategoryParam Or ategoryParam Is Null)
And ([Country] = ountryParam Or ountryParam Is Null)
And ([City] = ityParam Or ityParam Is Null)

上面的步骤足以实现最少的过滤功能,进一步的步骤将改善UI操作。

1. Optional. To 突出显示在Pivot Grid中选择的单元格,请使用以下表达式添加格式规则:

(ityParam Is Not Null Or ountryParam Is Not Null Or roductParam Is Not Null Or ategoryParam Is Not Null) And ([Product] = roductParam Or roductParam Is Null) And ([Category] = ategoryParam Or ategoryParam Is Null) And ([Country] = ountryParam Or ountryParam Is Null) And ([City] = ityParam Or ityParam Is Null)

2. Optional. 处理DashboardDesigner.CustomizeDashboardItemCaption事件,将Clear Master Filter按钮添加到该项目的标题:

C#

void OnCustomizeDashboardItemCaption(object sender, CustomizeDashboardItemCaptionEventArgs e) {if(e.DashboardItemName == "pivotDashboardItem1") {DashboardToolbarItem showDataItem = new DashboardToolbarItem("Clear Master Filter",new Action((args) => {dashboardDesigner1.BeginUpdateParameters();ClearPivotFilter();dashboardDesigner1.EndUpdateParameters();}));showDataItem.Enabled = IsAnyFilterSet();showDataItem.SvgImage = svgImageCollection1[0];e.Items.Insert(0, showDataItem);}}

DevExpress技术交流群2:775869749      欢迎一起进群讨论

2020年终大促
标签:

声明:本站部分文章及图片源自用户投稿,如本站任何资料有侵权请您尽早请联系jinwei@zod.com.cn进行处理,非常感谢!

上一篇 2020年10月6日
下一篇 2020年10月6日

相关推荐

发表回复

登录后才能评论