首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >Delphi LiveBindings TPrototypeBindSource和customFormat

Delphi LiveBindings TPrototypeBindSource和customFormat
EN

Stack Overflow用户
提问于 2017-02-15 22:14:04
回答 1查看 727关注 0票数 0

我使用带有TPrototypeBindSource的业务类。我将使用CustomFormat来连接两个字段。我会带着TBindSourceDB来,但不会带着TPrototypBindSource。

我使用TEdit和TLinkControlToField。

如果我使用:%s +“text”=>,它可以正常工作。当我将它与TBindSourceDB一起使用时,它可以正常工作

代码语言:javascript
复制
%s + " - " + Self.Owner.FieldByName('Enseigne').text

但是当我使用TPrototypeBindSource时,我不知道如何访问数据。

你能给我连接2个字段和业务类绑定的语法吗?

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2017-02-23 04:04:44

我想我应该再试一次,因为你似乎对我的第一个问题没有太大的热情。

在回答你的问题之前,让我们先来做个小实验。例如,在一个具有持久字段FieldA和FieldB的DataSet的项目中,设置一个BindSourceDB和BindingList,并添加两个TLinkControlToFields以将这些字段链接到两个TEdits,即edFieldA和edFieldB。

测试它是否按预期工作,然后添加另一个TEdit edOther和另一个TLinkControlToField LinkControlToField3。将其控件设置为edOther,将DataSource设置为BindSourceDB,将其FieldName设置为FieldA。将其CustomFormat设置为

代码语言:javascript
复制
Name

编译并运行,您会发现edOther显示了FieldA的字段组件的名称、DataSetFieldA或类似名称。显然,LiveBinding的表达式计算器正在使用FieldA的TField组件作为“作用域”,以确定引用了哪个Name属性。

现在,用Owner.Name替换Name

在运行时,edOther应该显示Form1或类似的内容,因为持久化字段由其包含的表单或数据模块所有。因此,引用Owner.Name扩大了可以解析Format表达式中的标识符并提取其值的范围。

因此,使用BindSourceDB作为链接的数据源,您可以将CustomFormat设置为非常复杂的内容,例如

代码语言:javascript
复制
LowerCase(Owner.DataSet.IndexFieldNames) + ' ' + Owner.DataSet.FieldByName('ID').Text

不幸的是,这不适用于PrototypeBindSource的默认设置。

继续我们的实验,像以前一样,使用具有两个字段FieldA和FieldB以及三个TEdits的PrototypeBindSource设置一个项目。请注意,这一次,如果您尝试将LinkControlToField3的CustomFormat设置为Name,您将得到错误消息“找不到名称”,我认为这是因为由于TPropotypeBindSource中字段的抽象实现,LB机制无法解析对名称的引用。

然而,并不是所有的都失去了。删除LinkControlToField3,然后添加到窗体的BindingList a BindExpression中。

将绑定表达式的ControlComponent设置为edOther,将其ControlExpression设置为Text,将其SourceComponent设置为Form1

完成后,在SourceExpression中,我们可以使用如下表达式引用Form1及其组件的属性

代码语言:javascript
复制
edFieldA.Text + ':' + edFieldB.Text

这对我来说很好。

有一件事我还没有弄清楚,那就是SourceExpression不能包含像LowerCase这样的东西。然而,这很容易解决,通过向Form1添加一个MyLowerCase函数,LB对此非常满意。

所以,我想这回答了你关于如何将内容连接到两个控件(或字段)的问题。就我个人而言,我仍然倾向于使用业务对象的连接属性,但是ymmv。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/42251760

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档