我不确定您要解决什么问题,因为将TDataSource.AutoEdit
属性设置为应该会自动禁用控件中的False
编辑,直到您手动将.DataSet.State
dsEditModes
话虽如此,这将满足您的要求。它使用访问器类来访问 a 中的protected
DataLinks
列表TDataSource
,然后检查它是否是 aTFieldLink
以及它是否具有ReadOnly
属性。
// No Delphi version provided, so uses "older style" RTTI
uses
TypInfo, DB, DBCtrls;
type
THackDataSource=class(TDataSource); // accessor class
procedure SetDataSetControlsReadOnly(const DataSource: TDataSource);
var
i: Integer;
DS: THackDataSource;
DL: TDataLink;
EnableIt: Boolean;
begin
EnableIt := DataSource.State in dsEditModes;
DS := THackDataSource(DataSource.DataSet);
for i := 0 to DS.DataLinks.Count - 1 do
begin
DL := DS.DataLinks[i];
if DL is TFieldDataLink then
begin
if IsPublishedProp(DL, 'ReadOnly') then
SetOrdProp(DL, 'ReadOnly', Ord(EnableIt));
end;
end;
end;