孟伟斯.NET

快乐的开发者

  博客园 :: 首页 :: 博问 :: 闪存 :: 新随笔 :: 联系 :: 订阅 订阅 :: 管理 ::

这一讲,你将学到如何实现其值依赖于其他属性的属性。Manager将被添加到Contact类中。默认情况下,它将被表现为一个查询编辑器,将包含数据库中所有的Contacts。然而,你可能需要此编辑器包含来子同一Department的Contacts。此外,你可能还需要此Position的Contacts作为“Manager”。为此,要给Manager属性使用DataSourceProperty和DataSourceCriteria特性。

在此之前,我建议你先去读一下如下课程:

·  【翻译】eXpressAppFramework QuickStart 业务模型设计(二)—— 从业务类库中继承

·  【翻译】eXpressAppFramework QuickStart 业务模型设计(四)—— 实现自定义业务类

·  给Contact类添加新的Contact类型的Manager属性

[DefaultClassOptions]
public class Contact : Person {
   
//
   private Contact manager;
   
public Contact Manager {
      
get { return manager; }
      
set { SetPropertyValue("Manager"ref manager, value); }
   }
   
//
}

·  在Contact类中的Manager属性上应用DataSourceProperty特性

[DefaultClassOptions]
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特性

[DefaultClassOptions]
   
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 。在后一种情况,就需要指定第三个参数。

[DefaultClassOptions]
   
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将在查询编辑器中显示出来。

·  运行程序并且核对结果。

 

posted on 2009-11-04 16:01  孟伟斯.NET  阅读(710)  评论(0编辑  收藏  举报