商信互联
为了增加分析应用程序中数据的功能,eXpressApp Framework提供了数据透视图模块。该分析数据主题说明,即启动分析功能,在应用程序中,你应该将这个模块和内置的分析商务舱添加到应用程序。在这种情况下,导航控件将包含Analysis项目,并且最终用户将能够创建Analysis对象。但是,您可能需要提供从任何列表视图创建Analysis对象的功能,将新Analysis对象的DataType属性设置为List View的对象类型。本主题演示如何完成此任务。
移动应用程序不支持数据透视图模块,因此本主题中描述的方法无法在Mobile平台中实现。
DevExpress代码示例数据库(http://www.devexpress.com/example=E389)中提供了完整的示例项目。
在您的应用程序模块中创建一个新的ViewController。为此调用设计器,并将ViewController.TargetViewType属性设置为ListView。这意味着将仅针对列表视图激活控制器。
有关创建控制器的详细信息,请参阅教程中的“扩展功能”部分。
要在未将VisibleInReportsAttribute应用于当前列表视图表示的业务类时停用该动作,请订阅Controller的Controller.Activated事件。通过以下方式处理此事件:
using DevExpress.ExpressApp.Model;
// ...
public partial class AnalyseDataFromAnyViewController : ViewController {
//...
private void AnalyseDataFromAnyViewController_Activated(object sender, EventArgs e) {
analyseDataAction.Active["VisibleInReports"] =
((IModelClassReportsVisibility)View.Model.Application.BOModel.GetClass(
View.ObjectTypeInfo.Type)).IsVisibleInReports;
}
}
Imports DevExpress.ExpressApp.Model
' ...
Partial Public Class AnalyseDataFromAnyViewController
Inherits ViewController
'...
Private Sub AnalyseDataFromAnyViewController_Activated( _
ByVal sender As Object, ByVal e As EventArgs)
analyseDataAction.Active("VisibleInReports") = _
(CType(View.Model.Application.BOModel.GetClass( _
View.ObjectTypeInfo.Type), IModelClassReportsVisibility)).IsVisibleInReports
End Sub
End Class
要停用Action,请使用其ActionBase.Active属性。
订阅Action的SimpleAction.Execute事件,以执行将使用新创建的Analysis对象调用明细视图的代码。通过以下方式处理此事件:
using DevExpress.Persistent.BaseImpl;
//...
public partial class AnalyseDataFromAnyViewController : ViewController {
//...
private void analyseDataAction_Execute(object sender, SimpleActionExecuteEventArgs e) {
IObjectSpace objectSpaceInternal = Application.CreateObjectSpace(typeof(Analysis));
Analysis obj = objectSpaceInternal.CreateObject<Analysis>();
obj.DataType = View.ObjectTypeInfo.Type;
obj.Name = "Analysis: " View.Caption " " DateTime.Now.ToString();
e.ShowViewParameters.CreatedView = Application.CreateDetailView(objectSpaceInternal, obj);
e.ShowViewParameters.TargetWindow = TargetWindow.Default;
e.ShowViewParameters.Context = TemplateContext.View;
}
}
Imports DevExpress.Persistent.BaseImpl
'...
Public Partial Class AnalyseDataFromAnyViewController
Inherits ViewController
'...
Private Sub analyseDataAction_Execute(ByVal sender As Object, ByVal e As _
SimpleActionExecuteEventArgs)
Dim objectSpaceInternal As IObjectSpace = Application.CreateObjectSpace(GetType(Analysis))
Dim obj As Analysis = objectSpaceInternal.CreateObject(Of Analysis)()
obj.DataType = View.ObjectTypeInfo.Type
obj.Name = "Analysis: " & View.Caption & " " & DateTime.Now.ToString()
e.ShowViewParameters.CreatedView = Application.CreateDetailView(objectSpaceInternal, obj)
e.ShowViewParameters.TargetWindow = TargetWindow.Default
e.ShowViewParameters.Context = TemplateContext.View
End Sub
End Class
在上面的代码中,使用了ShowViewParameters对象。有关如何使用此类型对象的详细信息,请参阅“显示视图的方式”主题。
由于将使用设置Name和DataType属性创建Analysis对象,因此一次绑定数据是适当的。否则,最终用户将不得不亲自执行此附加操作。要绑定数据,请在代码中执行BindAnalysisData()。为此,实现“数据绑定方面”主题中详细介绍的AnalysisDataBindController的后代。
using DevExpress.ExpressApp.PivotChart;
//...
public class AssignAnalysisDataSourceViewController : AnalysisDataBindController {
protected override void OnActivated() {
base.OnActivated();
Analysis obj = View.CurrentObject as Analysis;
//Allow data source loading if the ObjectTypeName property is specified
if(obj.ObjectTypeName != null) {
analysisEditor.IsDataSourceReady = true;
UpdateBindUnbindActionsState();
}
}
}
Imports DevExpress.ExpressApp.PivotChart
'...
Public Class AssignAnalysisDataSourceViewController
Inherits AnalysisDataBindController
Protected Overrides Sub OnActivated()
MyBase.OnActivated()
Dim obj As Analysis = TryCast(View.CurrentObject, Analysis)
'Allow data source loading if the ObjectTypeName property is specified
If Not obj.ObjectTypeName Is Nothing Then
analysisEditor.IsDataSourceReady = True
UpdateBindUnbindActionsState()
End If
End Sub
End Class
请注意,您应该在模块项目中引用DevExpress.ExpressApp.PivotChart.v 19.2程序集。
下图演示了可用于联系人列表视图的AnalyzeData操作。单击此操作时,新创建的Analysis对象将显示在调用的详细信息视图中。对象的Name和DataType属性是自动指定的。