2016-11-02 3 views
0

として、いくつかのセルを設定する私の場合のみDBGridのはDBGridのでは読み取り専用

DBGrid1.Columns[C].ReadOnly := True; 

を読んで、私たちはいくつかの列を設定することができ、私は読んとして、いくつかのセル(とはありません。この列内のすべてのセル)を設定する必要がありますのみ。

dbgrid

私はfield1に「No」の値を持っている場合、我々は、フィールドTx上で編集を有効にする必要があり、私のイメージで見ることができます。しかし、私は "Yes"の値を持っている場合TxフィールドをReadOnlyと設定する必要があります。

これは可能ですか?

+1

重複:http://stackoverflow.com/questions/16042975/set-some-cells-in-tdbgrid-to-editable –

答えて

6

はい、可能です。これを解決するための鍵は、グリッドに接続されたデータセットのデータセットカーソルがグリッド内の現在の行に同期されていることです。これは、TDBGridがコード化されているためです。

したがって、データセットに対してAfterScrollイベントを設定し、コードにグリッドのReadOnlyプロパティを設定するだけです。私の場合は、以下では正常に動作します:

procedure TForm1.CDS1AfterScroll(DataSet: TDataSet); 
begin 
    DBGrid1.Columns[4].ReadOnly := Odd(CDS1.FieldByName('ID').AsInteger); 
end; 

明らかに、あなたのケースでは、あなたのはい/いいえフィールドの内容をテストすることができます。

列が読み取り専用であるかどうかを判断するために使用しているフィールドの値の変更にグリッドをすぐに反応させる場合は、データセットの同じコードを実行する必要があります。AfterEditイベント。

+0

@ user6751794:これはあなたの答えですか? – MartynA

関連する問題