2011-11-08 38 views
2

デルファイDBGridのデータセルの書式に関する質問があります。 DBGridコンポーネントはMySQLデータベースに接続されており、実行時にデータが取得されます。デルファイDBGridでの書式設定

私はDateTimeの列とBooleanの列を持っています。 datetime列の時間部分が0の場合、日付のみが表示されますが、時刻がゼロであっても日付と時刻を表示する必要があります。ブール値のフィールドには1または0が表示されますが、 "on"または "off"を表示する必要があります。

私はフィールドをキャストし、その後

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

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

のような書式を設定しようとしているが、私はというエラーを取得する:「ExceptionクラスEInvalidCastメッセージ 『無効なクラス型キャスト』で"

これについてのお手伝いをさせていただきます。

+0

は、あなたが動的にあなたがDATにアクセスするために使用しているデータセットコンポーネントを作成していますそのコンポーネントはフォームにドロップされていますか?それがフォーム上にある場合は、永続フィールドを作成します(データセットコンポーネントを右クリックし、[すべてのフィールドを追加]を選択します)。次に、表示形式や編集形式を含むすべての永続フィールドをカスタマイズできます。 – LightBulb

+0

データセットコンポーネントはフォーム上にドロップされたコンポーネントですが、データは実行時にctQueryによってのみ取得されるため、設計時にはフィールドを使用できません。 – Erik

+0

この類似した投稿を試してください: http://stackoverflow.com/questions/3619835/delphi-dbgrid-format-display-values – Simon

答えて

1

だから私は、右、次の(正しい方向に私を指しているためSimonのおかげで)を行うことによってそれを得た:

ClientDataSetのは人口の直後、私はOnGetTextイベントのイベントハンドラを設定します。

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

そして新しい手順としてイベントハンドラをimpliment:

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; 
0

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

そしてappropiateクラス名と無効なクラス名を置き換えます。