delphi下的cxgrid的列值转换问题

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了delphi下的cxgrid的列值转换问题相关的知识,希望对你有一定的参考价值。

我在cxgrid里显示了查询后的数据,但是有些数据还是字典值,比如人员工号列:0001.而在人员表里是0001张三。我想在人员工号列显示具体的人员名字。怎样可以在改变查询语句的情况下,让人员工号列的值对应到人员表里,显示人员名字?
怎样可以在不改变查询语句的情况下,让人员工号列的值对应到人员表里,显示人员名字?

//不改变查询语句
//1、在cxgrid里面的tabelview中新建一个人员名列,起个名colitem2,原有的为colitem1
//2、在该列的ongetdisplaytext,事件中,定义该列显示的数值AText
Atext:=Copy(ARecord.Values[ColItem1.Index],3,5);
//这句的意思是从0001张三获得atext的值

追问

感谢回答。
我之前学过powerbulider,它里面有个功能,每一列设置dropdowndw,dw里放着员工号-姓名的查询数据,我传入员工号,它就返回姓名。
cxgrid没有类似的功能吗?
在你的答案中提到ARcord指的是什么?怎么建立

追答

你说的dropdowndw在delphi 的功能应该为lookupedit
如果使用cxgrid后,这个在每个字段里的属性会可以设置。。
你点击cxgrid里的某个columns字段后,在属性里可以设置为lookup,然后你可以指定相关的查看数据表的字段与属性,并得到 返回值 。。。
ARecord是 ONgetDisplaytext里的一个局部变量。。是事件自动生成的一个变量。。

追问

在cxgrid里的column的properties里没有lookupedit选择。有截图吗?谢谢

追答

没有LOOKUPEDIT不是有lookupcombobox吗?只要是lookup属性都可以用的!

另外,按你的需求,也可以用delphi 自带的计算字段。。

追问

我也试用过这个,但没出来我要的结果。你能详细说明下吗,主要是哪些属性的设置?

另外你提到的第二点delphi计算字段指的是?
感觉这样交流有点慢,介意留个联系方式吗?我的QQ 786740428

追答

1、这个lookupcombobox的主要功能是利用一个字段的值在另一个数据表中取出相应的值,比如利用001取出name..
2、像你的这种情况,字段与名称混合了,如果有规律,比如0001的数字位数是固定的,那样,就可以利用字串函数截取出来
方法1:利用计算字段
3、所谓的计算字段就是你的数据表,比如query table,的计算字段,利用table或query的 OnCalcFields 事件来获得值。
4、如:你的原有字段名为numberName,想要分离出 number 和name,则可以在这个事件里处理,
1、双击query或table,右键->new Fields ,设置新的字段名为Name,类型为string, fieldtype 设置为calculated,在属性列表中改名为TableName
2、在query的事件列表中双击 oncalcfields,生成一个计算字段事件。
3、在字段中写下如下事件 TableName.Value:=copy(TableNumberName.Value,4,6);
这句的意思是 这个计算字段值从numbername这个字段利用copy函数 从第4个字符读取6个获得。。

方法2:利用cxgrid里的tableview里的columns的ongetdisplayText 属性
1、点击cxgrid 里的 customize...
2、ADD 字段,把FieldName属性设置为数据表中任意一个字段,在这个column的事件列表中双击OnGetDisplayText ,产生一个事件,此事件中就可以利用Atext:=Copy(ARecord.Values[ColItem1.Index],4,6);来获得显示数值。aText 与ARecord均为这个事件的一个参数。。

追问

谢谢您的回复。
首先先纠正下,在人员表里是有2个字段,工号和姓名,分别存放0001和张三,不是混在一起。
其次,在你的回答里提到:
TableName.Value:=copy(TableNumberName.Value,4,6);

grid里只有工号0001,没有姓名字段。我怎样把姓名赋值给TableName列?可以把其他datasource的值拷贝过来?

参考技术A 用联合查询不就可以了

以上是关于delphi下的cxgrid的列值转换问题的主要内容,如果未能解决你的问题,请参考以下文章

如何在delphi里cxgrid单击某一个单元格弹出树形结构

delphi10 cxgrid控件怎么啦出来

Delphi CxGrid 汇总

DELPHI中的cxgrid,如何用代码实现表格内容居中显示,注意不是表头是内容

Delphi cxGrid使用汇总

delphi使用cxGrid