2016-11-02 7 views
0

С DBGrid, мы можем установить некоторый столбец только для чтенияDBGrid установить некоторые клетки, как неизменяемые

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

В моем случае, мне нужно установить некоторые клетки (и НЕ все клетки в этой колонке) как прочитанные только.

dbgrid

Вы можете увидеть в моем изображении, если у меня есть «No» значение в field1 мы должны позволить редактировать на поле Tx. Но если у меня есть значение «Yes», мы должны установить Tx как ReadOnly.

Возможно ли это?

+1

Duplicate: 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: Это ответ на ваш q? – MartynA