There are FullAddress and FullName properties in the Address and Person business classes that are supplied with the Business Class Library. These properties are calculable. The FullAddress property represents a string formed by the concatenation of the Country.Name, StateProvince, City, Street and ZipPostal property values. The FullName property is formed by the concatenation of the FirstName, MiddleName and LastName property values. The FullAddress and FullName properties are implemented so that you can change the order in which the items are concatenated. This topic details how to change this order. You can use this technique when implementing analogous business class properties.

地址和人员业务类中随商务舱库一起提供"全地址"和"全名"属性。这些属性是可计算的。FullAddress 属性表示由Country.Name、省、市、街和 ZipPostal 属性值的串联形成的字符串。FullName 属性由"名字"、中间名和姓氏属性值的串联形成。实现"全地址"和"全名"属性,以便可以更改项的串联顺序。本主题详细介绍了如何更改此顺序。在实现类似的 Business 类属性时,可以使用此技术。

The following images demonstrate how the FullAddress and FullName properties are calculated.

下图演示了如何计算全地址和全名属性。

To format FullAddress and FullName properties, the ObjectFormatter.Format method of the helper ObjectFormatter class is used. In this method, the format, according to which the property value is generated, is taken as a parameter. The format passed for the FullAddress property is specified by the Address class' FullAddressFormat property. The format that is passed for the FullName property is specified by the Person class' FullNameFormat property. Note that FullAddress and FullName properties are non-persistent calculated properties. As such, they require persistent aliases to be created for them to support sorting in Server mode (see CollectionSourceBase.DataAccessMode). For this purpose, there are additional FullNamePersistentAlias and FullAddressPersistentAlias properties. These properties are used to create persistent aliases.

要设置全地址和全名属性的格式,使用帮助器对象Formatter类的"对象Formatter.format"方法。在此方法中,生成属性值的格式被视为参数。为 FullAddress 属性传递的格式由地址类的"完全地址格式"属性指定。为 FullName 属性传递的格式由 Person 类的 FullNameFormat 属性指定。请注意,全地址和全名属性是非持久计算属性。因此,它们需要为它们创建持久别名以支持在服务器模式下排序(请参阅 CollectionSourceBase.DataAccessMode)。为此,还有其他全名持久别名和全地址持久别名属性。这些属性用于创建持久别名。

By default, the FullAddressFormat property is set to the Address class' defaultFullAddressFormat constant, which is the following: "{Country.Name}; {StateProvince}; {City}; {Street}; {ZipPostal}". The FullAddressFormatPersistentAlias property is set to the Address class' defaultFullAddressPersistentAlias constant, which is the following: "concat(Country.Name, StateProvince, City, Street, ZipPostal)". To change these property values, use the SetFullAddressFormat method (SetFullNameFormat for the Person class). These methods are static, so you can call them any place in your solution. For instance, you can specify the required format in the configuration file and read its value in a module's constructor. In addition, override the module's ModuleBase.CustomizeTypesInfo method and process the CalculatedPersistentAlias attribute via the static CalculatedPersistentAliasHelper.CustomizeTypesInfo method.

默认情况下,FullAddressFormat 属性设置为地址类的默认 FullAddressFormat 常量,如下所示:[Country.Name];[Country.Name];[Country.Name];[Country.Name];[Country.Name];[Country.Name];[Country.Name];[Country.Name];[Country.Name];[Country.Name];[Country.Name];[Country.Name];[Country.Name];[Country.Name];[Country.Name];[Country.Name];[Country.Name];[Country.Name];[Country.Name];[州省];[城市];[街道];[邮递]。""完全地址格式持久别名"属性设置为地址类的默认"完全地址持久别名"常数,如下所示:"concat(国家名称、省、市、街、Zippostal)"。要更改这些属性值,请使用 SetFullAddressFormat 方法(为 Person 类设置全名称格式)。这些方法是静态的,因此您可以调用它们在解决方案中的任何位置。例如,您可以在配置文件中指定所需的格式,并在模块的构造函数中读取其值。此外,重写模块的模块Base.自定义类型信息方法,并通过静态计算持久别名帮助器处理计算持久别名属性。

<configuration>
<appSettings>
<add key="FullAddressFormat" value="{Country.Name} {City} {Street}" />
<add key="FullAddressFormatPersistentAlias" value="concat(Country.Name, City, Street)" />
<!-- ... -->
</appSettings>
</configuration>
using DevExpress.Persistent.BaseImpl;
using System.Configuration;
//...
public sealed partial class MainDemoModule : ModuleBase {
static MainDemoModule() {
Address.SetFullAddressFormat(ConfigurationManager.AppSettings["FullAddressFormat"],
ConfigurationManager.AppSettings["FullAddressFormatPersistentAlias"]);
}
public override void CustomizeTypesInfo(ITypesInfo typesInfo) {
base.CustomizeTypesInfo(typesInfo);
CalculatedPersistentAliasHelper.CustomizeTypesInfo(typesInfo);
}
//...
}

After formatting a FullAddress property using the specified format, the property names that are enclosed in curly brackets will be replaced with the current object's property values (see the image above).

使用指定格式格式化 FullAddress 属性后,用大括号括起来的属性名称将替换为当前对象的属性值(参见上图)。

Analogous to the Address class' FullAddressFormat property, the Person class' FullNameFormat property is set to the defaultFullNameFormat constant, which is the following: "{FirstName} {MiddleName} {LastName}". The FullNamePersistentAlias property is set to the defaultFullNamePersistentAlias constant, which is the following: "concat(FirstName, MiddleName, LastName)". As the SetFullNameFormat method is static, you are free to call it where required. For instance, you can use the value specified in the configuration file as demonstrated in the code above.

与"地址类的 FullAddressFormat"属性类似,Person 类的 FullNameFormat 属性设置为默认的 FullNameFormat 常量,如下所示:"{NameName}{}}}{}}[姓氏][姓氏]"。"FullName 持久别名"属性设置为默认的"完全名称持久别名"常量,如下所示:"concat(名字、中间名、姓氏)"。由于 SetFullNameFormat 方法是静态的,因此您可以根据需要调用它。例如,可以使用配置文件中指定的值,如上面的代码所示。

Note 注意
In the Main Demo, you can set a custom format for the FullName property in the common module's constructor, as described above.
在主演示中,您可以为公共模块的构造函数中的 FullName 属性设置自定义格式,如上所述。

When implementing business class properties whose values require formatting, introduce static properties like FullAddressFormat and FullNameFormat, so that anyone using your business class can modify the formatting. The following code can be used as an example:

实现其值需要格式化的业务部门属性时,请引入静态属性,如 FullAddressFormat 和 FullNameFormat,以便使用业务类的任何人都可以修改格式。以下代码可用作示例:

public class SampleAddress : BaseObject {
private const string defaultFullAddressFormat = "{Country.Name}; {StateProvince};" +
" {City}; {Street}; {ZipPostal}";
private static string fullAddressFormat = defaultFullAddressFormat;
public static string FullAddressFormat {
get { return fullAddressFormat; }
set {
fullAddressFormat = value;
if(string.IsNullOrEmpty(fullAddressFormat)) {
fullAddressFormat = defaultFullAddressFormat;
}
}
}
public string FullAddress {
get {
return ObjectFormatter.Format(fullAddressFormat, this,
EmptyEntriesMode.RemoveDelimiterWhenEntryIsEmpty );
}
}
}

How to: Change the Format Used for the FullAddress and FullName Properties 如何:更改用于FullAddress和FullName属性的格式的更多相关文章

  1. [No0000149]ReSharper操作指南6/16-编码协助之其他协助

    语法高亮 ReSharper扩展了默认Visual Studio的符号高亮显示.此外,它还会使用可配置的颜色突出显示字段,局部变量,类型和其他标识符.例如,ReSharper语法突出显示允许您轻松区分 ...

  2. PersistentAliasAttribute & CalculatedAttribute & CalculatedPersistentAliasAttribute

    一,PersistentAliasAttribute-[XPO提供] Indicates that a property is not persistent and its value is calc ...

  3. RHCSA阶段笔记

    命令终端字段含义介绍 [root@localhost ~]# 解释: root:当前登录系统用户名(root超级管理员) localhost :当前主机名 :当前用户所在目录( 为家目录) ,root ...

  4. 2、粘包现象(struct模块)

    昨天我们所做的套接字是有漏洞的,它会出现粘包现象,没有发现这个问题的我们今天会进行演示.今天也会稍微讲解一下基于udp的套接字. 一.基于udp的套接字 udp是无链接的,先启动哪一端都不会报错 ud ...

  5. 29、粘包现象(struct模块)

    昨天我们所做的套接字是有漏洞的,它会出现粘包现象,没有发现这个问题的我们今天会进行演示.今天也会稍微讲解一下基于udp的套接字. 本篇导航: 基于udp的套接字 粘包现象 粘包 解决粘包方法 stru ...

  6. MFC学习小结

    2019/1/13 视频来源 一.   MFC框架中一些重要的函数 1. InitInstance函数 应用程序类的一个虚函数,MFC应用程序的入口.初始化的作用. 2. PreCreateWindo ...

  7. 2019/12/10学习内容摘要(Linux文件和目录管理)

    1.绝对路径和相对路径 *绝对路径:路径的写法一定是由根目录 / 写起的,例如 /usr/local/mysql *相对路径:路径的写法不是由根目录 / 写起的,例如 首先用户进入到 /home,然后 ...

  8. linux-RHEL7.0 —— 《Linux就该这么学》阅读笔记

    目录 linux-RHEL7.0 安装部署 修改root密码 RPM(红帽软件包管理器) YUM(软件仓库) Systemd初始化进程 总结 linux命令 帮助命令 man 系统工作命令 echo ...

  9. Commit message 和 Change log 编写指南

    来源:http://www.ruanyifeng.com/blog/2016/01/commit_message_change_log.html Git 每次提交代码,都要写 Commit messa ...

随机推荐

  1. 在Linux下生成crypt加密密码

    [摘要]当我们用红帽Kickstart脚本或useradd或其他方式写东西的时候,经常会需要用到crypt命令加密生成的密码格式.那么,有没有其他方式可以生成这种格式的密码?事实上,方法有很多 1.我 ...

  2. JavaScript基础4

    数组 创建数组  A.通过构造函数创建数组 * a): var arr=new Array();//定义一个空数组,无长度的空数组. * b):var arr1=new Array(num); * 当 ...

  3. HDU1529-Casher Emploryment(最最...最经典的差分约束 差分约束-最长路+将环变线)

    A supermarket in Tehran is open 24 hours a day every day and needs a number of cashiers to fit its n ...

  4. 每周一练 之 数据结构与算法(Dictionary 和 HashTable)

    这是第五周的练习题,上周忘记发啦,这周是复习 Dictionary 和 HashTable. 下面是之前分享的链接: 1.每周一练 之 数据结构与算法(Stack) 2.每周一练 之 数据结构与算法( ...

  5. 02 | Java内存模型:看Java如何解决可见性和有序性问题

    什么是 Java 内存模型? 导致可见性的原因是缓存,导致有序性的原因是编译优化,那解决可见性. 有序性最直接的办法就是禁用缓存和编译优化,但是这样问题虽然解决了,我们程序的性能可就堪忧了.   合理 ...

  6. 【hibernate】存储图片

    [hibernate]存储图片 转载: package cn.ycx.study.hibernate.entity; import javax.persistence.Entity; import j ...

  7. Python Weekly 422

    新闻 Python 采用12个月作为发布周期 链接: https://mail.python.org/archives/list/python-dev@python.org/thread/KE7OS4 ...

  8. 《Java基础知识》Java 运算符

    计算机的最基本用途之一就是执行数学运算,作为一门计算机语言,Java也提供了一套丰富的运算符来操纵变量.我们可以把运算符分成以下几组: 算术运算符 关系运算符 位运算符 逻辑运算符 赋值运算符 其他运 ...

  9. 冒泡排序(表格说明)(js)

    冒泡排序我自己的理解是(假设从大到小): 比较每一对相邻元素的值,如果前面的元素小于后面的元素那么就将它们交换过来,每次排序的比较次数逐次递减,最后的比较次数为1.总的排序轮数为数组长度减1.为了便于 ...

  10. C# yield关键字

    关于yield关键字,网上有很多文章介绍了,但是看了之后,虽然明白了"哦,原来是这么回事",但是在日常开发中并没有真正的用起来,所以,写此一篇,介绍一下在真正的项目中怎么使用这个关 ...