2011-02-04 7 views
3

データベースがロードされたときに、dbgridコントロールの特定のセルの内容を変更します。たとえば、「禁止」に等しい場合、データベースのフィールドをdbgridに表示しないようにすることができます。私はそれを行うことができる方法はありますか?表示される前にDBGridセルの内容を変更します。

答えて

3

あなたはDataSetNotifyEvent Afteropen

DBGrid.Datasource.Dataset.Afteropen使用することができます=

を、あなたが持つフィールドを非表示にすることができます:

場合、条件、その後 DBGrid.columns [X] .visible:= false

代わりに、特定のセルの一部のコンテンツを上書き/削除するためにOnDrawColumnCellイベントの条件を確認することができます

+1

おかげでたくさんのフィールドを選択しないだろうと思います。それは働いた:) –

3

DataSetイベントを使用してUIを同期させるのは良い方法ではありません。 UIロジックをビジネスロジックから分離するために、DataSourceイベントに頼ることができます。

DataSetの状態がdsInactiveからdsBrowseに変更されると、DataSource OnStateの変更に依存して、データがデータベースからロードされたときにUI関連のものを作成できます。

以前の状態を追跡してコードが必要以上に実行されないようにするには、[補助フィールド]を使用します。例えば

(未テストコード)

procedure TForm1.DataSource1StateChange(Sender: TObject); 
begin 
    if (DataSource1.State = dsBrowse) and (not FUIStateInSync) then 
    begin 
    //dataset is open, change UI accordingly 
    DBGrid1.Columns[0].Visible := SomeCondition(); 
    //this will prevent the code to be executed again 
    //as state comes to dsBrowse after posting changes, etc. 
    FUIStateInSync := True; 
    end 
    else if (DataSource1.State = dsInactive) then 
    FUIStateInSync := False; //to let it happen again when opened. 
end; 

あなたが受け入れ答えを持っている場合でも、O.Dので、私は、これを公開提案はあなたが避けるべきものです。

は、プレゼンテーションのためにデータベースに保存されているものと異なる値を提供するために、フィールドのOnGetTextイベントを使用してください:あなたの元の質問に行く

+0

私はO.D.を受け入れたそれが働いたので、それは私をたくさん助けました。すべての答えに+1してください。ご協力いただきありがとうございます。 –

5

DisplayTextブール値のパラメータは、値をユーザに提示する必要がある場合はTrueになり、値が他の目的に必要な場合はFalseになります。

procedure TForm1.SQLQuery1Field1GetText(Sender: TField; 
    var Text: string; DisplayText: Boolean); 
begin 
    if (Sender.AsString = 'forbidden') and (DisplayText) 
    and (PrivilegeLevel(CurrentUser) < 10) then 
    Text := '********' 
    else 
    Text := Sender.AsString; 
end; 
2

データセットのHookup OnAfterOpenイベント。 隠しフィールドを取得し、VisibleプロパティをFalseに設定し、DBGridのは彼らに

乾杯

2

を表示しません行(タプル)を含まないように、私は、グリッドにデータを提供するクエリを変更ことになります'禁じられた'文字列を持つ。これは、すでにデータベースから検索された後にデータを表示しないように努力するよりもずっと簡単です。

1

私は最善の方法は、DATABASE_TABLE

FROM SOME_VALUE =「禁止」
関連する問題