使用dbgrid,我们可以将某些列设置为只读
DBGrid1.Columns[C].ReadOnly := True;
在我的情况下,我需要将一些单元格(以及并非此列中的所有单元格)设置为只读。
您可以在我的图片中看到,如果No
中有“field1
”值,我们应该在字段Tx
上启用编辑功能。但如果我有“Yes
”值,我们应将Tx
字段设为ReadOnly
。
有可能吗?
答案 0 :(得分:6)
是的,有可能。解决这个问题的关键是连接到网格的数据集的数据集光标与网格中的当前行同步,因为TDBGrid的编码方式。
因此,您需要做的就是为数据集设置AfterScroll
事件,并将代码设置为网格的ReadOnly属性。就我而言,以下工作正常:
procedure TForm1.CDS1AfterScroll(DataSet: TDataSet);
begin
DBGrid1.Columns[4].ReadOnly := Odd(CDS1.FieldByName('ID').AsInteger);
end;
显然,在您的情况下,您可以测试您的是/否字段的内容。
如果您希望网格立即对您用于确定列是否应为只读的字段值的更改做出反应,则应在数据集中执行相同的代码{{{ 1}}事件。