修正,其实只要在基础资料类中加入[XafDefaultProperty("名称")]标签即可。

namespace NEO.ERP.Module.BusinessObjects.Business
{
//引用显示名称
[XafDefaultProperty("名称")]
public partial class 公共基础资料基类
{
public 公共基础资料基类(Session session) : base(session) { } public override void AfterConstruction()
{
base.AfterConstruction();
} } }

下面的是老的引用方法。

在Module项目中如果手工增加的XPO Business Object类,增加了[XafDefaultProperty("名称")]属性后,该对象被别的类调用就可以显示一个下拉列表。

 using System;
using System.Linq;
using System.Text;
using DevExpress.Xpo;
using DevExpress.ExpressApp;
using System.ComponentModel;
using DevExpress.ExpressApp.DC;
using DevExpress.Data.Filtering;
using DevExpress.Persistent.Base;
using System.Collections.Generic;
using DevExpress.ExpressApp.Model;
using DevExpress.Persistent.BaseImpl;
using DevExpress.Persistent.Validation; namespace HelloXAF.Module.BusinessObjects
{
[DefaultClassOptions]
//[ImageName("BO_Contact")]
[XafDefaultProperty("名称")]
//[DefaultListViewOptions(MasterDetailMode.ListViewOnly, false, NewItemRowPosition.None)]
//[Persistent("DatabaseTableName")]
// Specify more UI options using a declarative approach (https://documentation.devexpress.com/#eXpressAppFramework/CustomDocument112701).
public class AAA : BaseObject
{ // Inherit from a different class to provide a custom primary key, concurrency and deletion behavior, etc. (https://documentation.devexpress.com/eXpressAppFramework/CustomDocument113146.aspx).
public AAA(Session session)
: base(session)
{
}
public override void AfterConstruction()
{
base.AfterConstruction();
// Place your initialization code here (https://documentation.devexpress.com/eXpressAppFramework/CustomDocument112834.aspx).
}
//private string _PersistentProperty;
//[XafDisplayName("My display name"), ToolTip("My hint message")]
//[ModelDefault("EditMask", "(000)-00"), Index(0), VisibleInListView(false)]
//[Persistent("DatabaseColumnName"), RuleRequiredField(DefaultContexts.Save)]
//public string PersistentProperty {
// get { return _PersistentProperty; }
// set { SetPropertyValue("PersistentProperty", ref _PersistentProperty, value); }
//} //[Action(Caption = "My UI Action", ConfirmationMessage = "Are you sure?", ImageName = "Attention", AutoCommit = true)]
//public void ActionMethod() {
// // Trigger a custom business logic for the current record in the UI (https://documentation.devexpress.com/eXpressAppFramework/CustomDocument112619.aspx).
// this.PersistentProperty = "Paid";
//} public string 名称 { get; set; } }
}

AAA 列表显示

汇率体系调用AAA时显示如下。

但是,当我们不是通过代码建BO对象时,而是通过ORMDataModel设计器来创建BO对象的时候。设计器创建的BO对象不是像手工建的BO像,设计器创建的对象不是派生于BaseObject,而是派生于XPObject。当我们给基础资料对象赋[XafDefaultProperty("Code")]属性的时候,发现引用该基础资料的下拉列表显示不出来Code或者Name。

网上搜索找到一篇文章。

https://www.devexpress.com/Support/Center/Question/Details/Q306912

原意是 Only the BaseObject class overrides the ToString method, to process the XafDefaultPropertyAttribute.

需要自己手工再处理Tostring()

找到需要被调用的基础资料类,

 using System;
using DevExpress.Xpo;
using DevExpress.Data.Filtering;
using System.Collections.Generic;
using System.ComponentModel;
using DevExpress.Persistent.Base;
using DevExpress.ExpressApp.DC;
using DevExpress.ExpressApp; namespace HelloXAF.Module.BusinessObjects.ORMDataModel_Base
{
[DefaultClassOptions]
[XafDefaultProperty("编码")]
public partial class 币别
{
public 币别(Session session) : base(session) { }
public override void AfterConstruction() { base.AfterConstruction(); } public override string ToString()
{ //if (!isDefaultPropertyAttributeInit)
//{
string defaultPropertyName = string.Empty;
XafDefaultPropertyAttribute xafDefaultPropertyAttribute = XafTypesInfo.Instance.FindTypeInfo(GetType()).FindAttribute<XafDefaultPropertyAttribute>();
if (xafDefaultPropertyAttribute != null)
{
defaultPropertyName = xafDefaultPropertyAttribute.Name;
}
else
{
DefaultPropertyAttribute defaultPropertyAttribute = XafTypesInfo.Instance.FindTypeInfo(GetType()).FindAttribute<DefaultPropertyAttribute>();
if (defaultPropertyAttribute != null)
{
defaultPropertyName = defaultPropertyAttribute.Name;
}
}
if (!string.IsNullOrEmpty(defaultPropertyName))
{
var defaultPropertyMemberInfo = ClassInfo.FindMember(defaultPropertyName);
object obj = defaultPropertyMemberInfo.GetValue(this);
if (obj != null)
{
return obj.ToString();
}
}
//isDefaultPropertyAttributeInit = true;
//}
//if (defaultPropertyMemberInfo != null)
//{
// object obj = defaultPropertyMemberInfo.GetValue(this);
// if (obj != null)
// {
// return obj.ToString();
// }
//}
return base.ToString();
}
} }

这样,设计器添加的基础资料也能显示出来了。

  

XAF ORMDataModel构建的基础资料对象无法被调用显示的解决办法的更多相关文章

  1. 使用NDK r10构建Cocosd-x v3.2时编译和链接错误的解决办法

    如果你使用NDK r10构建Cocos2d-x v3.2,将会遇到所有测试用例编译错误以及Lua测试用例链接错误. 1. 编译错误 错误信息是: 1 2 3 4 5 6 7 8 /Users/ming ...

  2. Post数据到 https异常:基础连接已经关闭: 连接被意外关闭 解决办法

    POST数据到HTTPS站点的时候需要设置ServicePointManager类的ServerCertificateValidationCallback属性,并且在POST到https://pass ...

  3. vue双向数据绑定对于数组和新增对象属性不能监听的解决办法

    出现数组不能按照索引进行跟新的原因是处于性能考虑的,但是整体数组的增加删除是可以监听到的:对于对象新增属性不能监听是因为没有在生成vue实例时候放进watcher收集依赖. 首先我们先来了解vue数据 ...

  4. IntelliJ IDEA的jsp中内置对象方法无法被解析的解决办法

    主要原因是因为缺乏依赖 可以通过添加依赖的方式 导入servlet-api.jar,jsp-api.jar,tomcat-api.jar 这三个jar即可 这三个jar在tomcat的lib目录下有 ...

  5. SQL Server 2008空间数据应用系列四:基础空间对象与函数应用

    原文:SQL Server 2008空间数据应用系列四:基础空间对象与函数应用 友情提示,您阅读本篇博文的先决条件如下: 1.本文示例基于Microsoft SQL Server 2008 R2调测. ...

  6. 构建最基础的Spring项目及所需要的jar包

    1.Spring 框架由6个模块组成 上图是spring4的结构图,不同版本结构略有差异,但模块都是相同的. 2.Core Container 核心容器 容器是Spring的核心部分,Core Con ...

  7. 【Gradle】Gradle构建脚本基础

    Gradle构建脚本基础 Settings文件 在Gradle中,定义了一个设置文件,用于初始化以及工程树的配置.设置文件的默认名为settings.gradle,放在根工程目录下. 设置文件大多数的 ...

  8. K3已被禁用的基础资料如何显示出来

    [基础资料]——[公共资料]——[物料.职员.客户==]——[查看]——[选项]——显示禁用基础资料——确定,就可以看见你所禁用过的基础资料,显示为红色字体! 同类问题example: 金蝶K3 禁用 ...

  9. python基础——获取对象信息

    python基础——获取对象信息 当我们拿到一个对象的引用时,如何知道这个对象是什么类型.有哪些方法呢? 使用type() 首先,我们来判断对象类型,使用type()函数: 基本类型都可以用type( ...

随机推荐

  1. File类的使用:遍历目录

  2. SpringSecurity3.X权限原理(转)

      这里给出一个简单的安全验证的实现例子,先说一下需求: 1.通过登录页面进行登录 2.用户登录前访问被保护的地址时自动跳转到登录页面 3.用户信息存储在数据表中 4.用户权限信息存在在数据表中 5. ...

  3. EF删除,查询,Linq查询,Lambda查询,修改链接字符串

    (1)//删除操作 public bool delete() { try { a_context = new AEntities(); b1 = new Table_1(); //删除只需要写主键就行 ...

  4. LoadRunner 关联和集合点、检查点

    1)关联的定义 很多时候,当时录完之后,没有问题.过一段时间再跑脚本,就不会成功.比如session,过期了,再一次使用,就会出错.这个时候,需要在每次访问的时候动态的拿到session,这种情况就需 ...

  5. C++中内存区域的划分

    栈存储区 那些由编译器在需要的时候分配,在不需要的时候自动清楚的变量的存储区.里面的变量通常是局部变量.函数参数等. 堆存储区(自由存储区) 那些由new或者malloc分配的内存块,他们的释放编译器 ...

  6. 基于Ubuntu16搭建Hadoop大数据完全分布式环境

    [目的]:学习大数据 在此记录搭建大数据的过程. [系统环境] 宿主机操作系统:Win7 64位 虚拟机软件:Vmware workstation 12 虚拟机:Ubuntu 16 64位桌面版 [步 ...

  7. Chrome OS上可运行Linux

    说起Chrome OS,可能多数人第一时间联想的不是操作系统,而是在浏览器领域颇为流行的谷歌Chrome浏览器.其实,Chrome OS也是谷歌 旗下的一款产品,是一款Google开发的基于Linux ...

  8. Luogu 3665 [USACO17OPEN]Switch Grass 切换牧草

    BZOJ 4777 被权限了. 这道题的做法看上去不难,但是感觉自己yy不出来. 首先是两个结论: 1.答案一定是连接着两个异色点的一条边. 2.答案一定在最小生成树上. 感觉看到了之后都比较显然,自 ...

  9. Map集合的关联数组实现

    public class AssoiativeArray<K,V>{ //创建一个二维数组 private Object[][] pairs; //声明索引 private int ind ...

  10. Row_Number() OVER()函数使用举例

    语法:ROW_NUMBER() OVER(PARTITION BY COLUMN ORDER BY COLUMN) 简单的说row_number()从1开始,为每一条分组记录返回一个数字,这里的ROW ...