gpt4 book ai didi

德尔福: Avoid editing a column in TDBgrid

转载 作者:行者123 更新时间:2023-12-02 18:17:13 26 4
gpt4 key购买 nike

我知道使用列的只读属性,我可以避免编辑其字段值。但这并不能阻止就地编辑器展现自己。我需要一种方法来使该列不仅受到保护而且“不可触及”。请问有什么办法吗?

最佳答案

如果我正确理解您想要什么,您可以通过创建自定义 TDBGrid 后代并覆盖来非常简单地做到这一点它的 CanEditShow 方法,因为这决定是否可以创建网格的 InplaceEditor:

type
TMyDBGrid = class(TDBGrid)
private
FROColumn: Integer;
protected
function CanEditShow : Boolean; override;
public
property ROColumn : Integer read FROColumn write FROColumn;
end;

function TMyDBGrid.CanEditShow: Boolean;
begin
Result := Inherited CanEditShow;
Result := Result and (Col <> ROColumn);
end;

procedure TForm1.FormCreate(Sender: TObject);
begin
MyDBGrid := TMyDBGrid.Create(Self);
MyDBGrid.ROColumn := 1;
MyDBGrid.DataSource := DataSource1;
MyDBGrid.Parent := Self;
[...]

这个极简示例仅按编号将一个网格列定义为一个不允许使用 InplaceEditor 的情况;显然你可以使用任何机制您想要识别 CanEditShow 返回 False 的列。

请注意,上面的代码没有考虑到如果您关闭 Indicator 列(即设置 Options.dgIndicator为假);

显然,通过使用可分配事件,您可以更灵活地自定义允许 InplaceEditor 使用的列,如下所示

type

TAllowGridEditEvent = procedure(Sender : TObject; var AllowEdit : Boolean) of object;

TMyDBGrid = class(TDBGrid)
private
FOnAllowEdit: TAllowGridEditEvent;
protected
function CanEditShow : Boolean; override;
procedure DoAllowEdit(var AllowEdit : Boolean);
public
property OnAllowEdit : TAllowGridEditEvent read FOnAllowEdit write FOnAllowEdit;
end;

function TMyDBGrid.CanEditShow: Boolean;
begin
Result := Inherited CanEditShow;
if Result then
DoAllowEdit(Result);
end;

procedure TMyDBGrid.DoAllowEdit(var AllowEdit: Boolean);
begin
if Assigned(FOnAllowEdit) then
FOnAllowEdit(Self, AllowEdit);
end;

procedure TForm1.AllowEdit(Sender: TObject; var AllowEdit: Boolean);
var
Grid : TMyDBGrid;
begin
Grid := Sender as TMyDBGrid;
AllowEdit := Grid.Col <> 1;
end;

procedure TForm1.FormCreate(Sender: TObject);
begin
MyDBGrid := TMyDBGrid.Create(Self);
MyDBGrid.ROColumn := 1;
MyDBGrid.DataSource := DataSource1;
MyDBGrid.Parent := Self;
MyDBGrid.OnAllowEdit := AllowEdit;
[...]

如果您不喜欢在代码中创建网格,您可以将其放入自定义包中并安装在 IDE 中,如果您的 Delphi 版本足够新,请实现类帮助器中的CanEditShow

关于德尔福: Avoid editing a column in TDBgrid,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/37992122/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com