我有一个带有多个 TcxGrids 的项目。我的项目中网格的类层次结构如下:
TForm->TPanel->TcxPageControl->TcxTabSheet(子类)->TcxGrid->TcxGridLevel->TcxGridDBBandedTableView
在我的子类 TcxTabSheet 中,我添加了一个新属性“ReadOnly”,当 set 循环遍历 tabsheets 控件并将它们分别设置为启用/禁用时。
当 TcxGrid 控件启用属性设置为 true 时,用户根本无法再与网格交互(包括导航)。
看来我需要在 TcxGridDBBandedTableView 上设置 OptionsData.Editing 属性以实现只读但仍可导航的网格控件。
很简单,直到您考虑到我想以松散耦合的方式执行此操作,我认为这让我可以选择 RTTI。
我编写了以下循环遍历表单控件的代码(循环遍历选项卡控件或组件不会让我访问 TcxGridDBBandedTableView)。找到控件后,我可以通过 RTTI 设置其编辑属性。我似乎无法确定 TcxGridDBBandedTableView 是否属于它所在的 TabSheet。
var
compIdx: Integer;
begin
for compIdx := 0 to Pred(ComponentCount) do
if (Components[compIdx].ClassNameIs('TcxGridDBBandedTableView')) then
SetOrdProp(GetObjectProp(Components[compIdx], 'OptionsData'), 'Editing', Ord(not FReadOnly));
end;
TL; DR 如何确定 cxgrid 所在的 pagectrl 选项卡并设置其 TableView.OptionsData.Editable 属性,而无需将任何 devexpress 单元添加到单元的使用子句中。