我在DB表中有一个存储压力的列。压力始终存储为PSI,可以通过潜水14.5转换为BAR。
用户可以使用无线电组切换PSI / BAR的显示。
我使用TStringGrid
并转换为TDbGrid
- 这对我来说很新鲜。
当用户切换PSI / BAR时,如何更新数据库网格中的显示? (我想我只是再次执行它的查询?或者调用query.Refresh()
?)但是我该如何进行转换呢?
SELECT
语句?但是我该怎么做? SELECT pressure / 14.5 FROM measurements
?或者怎么样? OnBeforeXXX()
吗?或OnGetDisplayText()
或其他一些?我确信这是非常基本的,但直到现在我才刚刚显示未操作的数据,现在我需要转换功能。谷歌没有帮助,但我可能不知道该要求什么。
我还想更改列标题的文本,在“Presure(PSI)”和“pressure(BAR)”之间切换。 提前感谢您的帮助。
答案 0 :(得分:3)
为压力字段编写OnGetText事件处理程序,如下所示:
type
TPressureMU = (pmuPSI, pmuBAR);
const
PSIToBarFactor = 1/14.5;
procedure TdmData.qMeasurementsPressureGetText(Sender: TField; var Text: string;
DisplayText: Boolean);
begin
case PressureMU of
pmuPSI: Text := FloatToStr(Sender.AsFloat); //Already PSI
pmuBAR: Text := FloatToStr(Sender.AsFloat * PSIToBarFactor); //ConvertingToBAR
end
end;
我正在使用声明枚举的属性PressureMU来控制压力是否显示在PSI或BAR测量单位中。
这样,当用户更改选择时,您只需调整该属性的值。
如果使用持久字段,可以使用对象检查器将事件处理程序直接链接到您的字段,如果不是,则可以通过以下代码执行:
begin
qMeasurements.FieldByName('Pressure').OnGetText := qMeasurementsPressureGetText;
end;
其中qMeasurementsPressureGetText
是方法的名称。
答案 1 :(得分:2)
创建持久字段(右键单击查询,然后选择Add Fields
以在设计时创建存储在.dfm中的字段)。右键单击查询,然后添加新字段。将其设为计算字段,并在查询的OnCalcFields
事件中执行从PSI到BAR的转换。
现在,当用户切换显示时,您只需显示PSI
或BAR
列,然后设置Column.FieldName
,将其设置为实际PSI
列或tne新计算的BAR
列。
当然,如果您不使用持久字段,则可以在查询中完成所有操作。只需在SQL语句中添加一个包含转换结果的新列,您仍然可以在运行时更改Column.FieldName
以切换显示的值。