2

Delphi DBGrid のデータ セルのフォーマットについて質問があります。DBGrid コンポーネントは MySQL データベースに接続され、実行時にデータが取り込まれます。

DateTime の列と Boolean の列があります。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 とメッセージ 'Invalid class typecast'」というエラーが表示されます。

これに関するどんな助けも大歓迎です。

4

2 に答える 2

2

だから私は次のことをすることでそれを正しくしました(正しい方向に私を向けてくれたSimonに感謝します):

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

ブレークポイントを追加し、ClientDataSet2.FieldByName('Value').ClassName で正しいクラス名を評価 (Ctrl+F7) します。

無効なクラス名を適切なクラス名に置き換えます。

于 2011-11-08T12:03:21.710 に答える