这一讲,你将学到如何实现其值依赖于其他属性的属性。Manager将被添加到Contact类中。默认情况下,它将被表现为一个查询编辑器,将包含数据库中所有的Contacts。然而,你可能需要此编辑器包含来子同一Department的Contacts。此外,你可能还需要此Position的Contacts作为“Manager”。为此,要给Manager属性使用DataSourceProperty和DataSourceCriteria特性。
在此之前,我建议你先去读一下如下课程:
· 【翻译】eXpressAppFramework QuickStart 业务模型设计(二)—— 从业务类库中继承
· 【翻译】eXpressAppFramework QuickStart 业务模型设计(四)—— 实现自定义业务类
· 给Contact类添加新的Contact类型的Manager属性
public class Contact : Person {
//
private Contact manager;
public Contact Manager {
get { return manager; }
set { SetPropertyValue("Manager", ref manager, value); }
}
//
}
· 在Contact类中的Manager属性上应用DataSourceProperty特性
public class Contact : Person {
//
[DataSourceProperty("Department.Contacts")]
public Contact Manager {
get { return manager; }
set {
SetPropertyValue("Manager", ref manager, value);
}
}
}
有了DataSourceProperty特性,Manager查询编辑器将包含符合Department对象所指定的Contact对象。
· 运行程序,在New下拉框中选择Contact。将调用Contact明细视图。指定Department属性并且点开Manager查询编辑器。确定Department属性和列表中的对象一致。
· 在Contact类中的Manager属性上应用DataSourceCriteria特性
public class Contact : Person
{
//
[DataSourceProperty("Department.Contacts")]
[DataSourceCriteria("Position.Title = 'Manager'")]
public Contact Manager
{
get { return manager; }
set
{
SetPropertyValue("Manager", ref manager, value);
}
}
}
有了DataSourceCriteria特性,Manager查询编辑器将包含符合特定参数条件的Contact对象
· 运行程序。给几个Contact对象的Position属性设置为“Manager”。在New按钮的下拉框中选择Contact。调用Contact的明细视图。指定Department属性并且展开Manager查询编辑器。核对列表中的对象的Positon属性已经被设置成了“Manager”。
你可能会处理没有没有给Contact对象指定Department属性的情况。在此情况下,你可能需要给Manager查询编辑器提供另一个数据源。为此,指定DataSourceProperty特性的第二个参数。在下面的代码中,参数设置为DataSourcePropertyIsNullMode.SelectAll 。你还可以设置成DataSourcePropertyIsNullMode.SelectNothing 或者DataSourcePropertyIsNullMode.CustomCriteria 。在后一种情况,就需要指定第三个参数。
public class Contact : Person
{
//
[DataSourceProperty("Department.Contacts",DataSourcePropertyIsNullMode.SelectAll)]
[DataSourceCriteria("Position.Title = 'Manager'")]
public Contact Manager
{
get { return manager; }
set
{
SetPropertyValue("Manager", ref manager, value);
}
}
}
使用上面的代码,如果你没有指定Department属性,所有的manager将在查询编辑器中显示出来。
· 运行程序并且核对结果。