2

我有一个关于 delphi DBGrid 中数据单元格格式的问题。DBGrid 组件连接到 MySQL 数据库,该数据库在运行时被填充。

我有一列用于日期时间,另一列用于布尔值。当 datetime 列的时间部分为 0 时,它只显示日期,但我需要它来显示日期和时间,即使时间为零。布尔字段显示 1 或 0,但我需要它显示“开”或“关”。

我试过投射字段,然后设置格式,如

(ClientDataSet2.FieldByName('Timestamp') as TDateTimeField).DisplayFormat := 'yyyy/mm/dd hh:mm:ss';

(ClientDataSet2.FieldByName('Value') as TBooleanField).DisplayValues := 'On;Off'; 

但我收到一条错误消息:“带有消息‘无效类类型转换’的异常类 EInvalidCast。”

对此的任何帮助将不胜感激。

4

2 回答 2

2

所以我做了以下事情(感谢西蒙为我指出正确的方向):

填充 ClientDataSet 后,我​​为 OnGetText 事件设置事件处理程序:

ClientDataSet2.FieldByName('TimeStamp').OnGetText := TimeStampGetText;
ClientDataSet2.FieldByName('Value').OnGetText := ValueGetText;

并将事件处理程序隐含为新过程:

procedure TTimelineForm.ValueGetText( Sender : TField; var Text : string; DisplayText : Boolean );
begin
    if Sender.AsInteger = 0 then
        Text := 'OFF'
    else
        Text := 'ON';
end;

procedure TTimelineForm.TimeStampGetText( Sender : TField; var Text : string; DisplayText : Boolean );
    var
        DateTime : TDateTime;
    begin
        Text := FormatDateTime( 'yyyy/mm/dd hh:mm:ss', Sender.AsDateTime );
    end;
于 2011-11-09T09:30:23.303 回答
0

添加断点并计算 (Ctrl+F7) 正确的类名:ClientDataSet2.FieldByName('Value').ClassName

并用适当的类名替换无效的类名。

于 2011-11-08T12:03:21.710 回答