【问题标题】:Limit maximum text length of the inplace editor in TDBGrid限制 TDBGrid 中就地编辑器的最大文本长度
【发布时间】:2017-08-09 19:44:11
【问题描述】:

如何限制TDBGrid 中就地编辑器的最大文本长度? (德尔福柏林)

数据类型是浮点数。

【问题讨论】:

  • 如果您询问就地编辑器的最大文本长度,那么它取决于基础字段的大小。
  • 感谢回答,但我的数据是浮点数,这个方法不起作用
  • 那你为什么没有在你的 q 中提到 Float?
  • 对不起我的错误

标签: delphi tdbgrid


【解决方案1】:

TDBGrid 中的就地编辑器将通过调用更新其内容

procedure TInplaceEdit.UpdateContents;
begin
  Text := '';
  EditMask := Grid.GetEditMask(Grid.Col, Grid.Row);
  Text := Grid.GetEditText(Grid.Col, Grid.Row);
  MaxLength := Grid.GetEditLimit;
end;

GetEditMask 的实现方式如下:

function TCustomDBGrid.GetEditMask(ACol, ARow: Longint): string;
begin
  Result := '';
  if FDatalink.Active then
  with Columns[RawToDataColumn(ACol)] do
    if Assigned(Field) then
      Result := Field.EditMask;
end;

GetEditLimit 像这样:

function TCustomDBGrid.GetEditLimit: Integer;
begin
  Result := 0;
  if Assigned(SelectedField) and (SelectedField.DataType in [ftString, ftWideString]) then
    Result := SelectedField.Size;
end;

您有多种方法可以达到我认为的所需行为。

  • 对要限制的字段使用 TField EditMask 属性。这将由 Grid.GetEditMask 调用返回。无需从 TDBGrid 继承并覆盖任何内容。可以逐场控制行为。

  • 创建您自己的 TDBGrid 后代,在其中覆盖 GetEditLimit 根据SelectedField

  • 为就地编辑器返回 MaxLength

方法 1 的代码可能如下所示:

// Opening of dataset
...
DataSet.FieldByName('FloatField').EditMask := '00.00';

这将掩码在小数点分隔符前后需要两位数。有关口罩的更多信息,请参阅TEditMask

对于方法 2:

uses
  Data.DB,
  Vcl.DBGrids;

type
  TMyDBGrid = class(TDBGrid)
  protected
    function  GetEditLimit: Integer; override;
  end;

implementation

{ TMyDBGrid }

function TMyDBGrid.GetEditLimit: Integer;
begin
  Result := inherited GetEditLimit;
  if (Result = 0) and Assigned(SelectedField) and (SelectedField.DataType = ftFloat) then
    Result := 5; // Whatever you decide
end;

就像 kobik 建议的那样,您可以将此类用作插入器类。为此,请在要使用该网格的单位中添加TDBGrid = class(TMyDBGrid);。如果您在要使用的同一单元中声明 TMyDBGrid,请明确类型引用 TMyDBGrid = class(Vcl.DBGrids.TDBGrid)

【讨论】:

  • 不错的答案,如果 OP 或读者确认它有效,我会 +1 (现在没有时间自己尝试)。
  • 我没有对此进行测试(我将其留给 OP),但我看不出这两个建议都不起作用的任何原因。顺便说一句创建你自己的 TDBGrid... - 你可以为此使用一个插入器类。
  • 非常好的建议,让在设计时使用网格更容易,补充说。
猜你喜欢
  • 1970-01-01
  • 2021-07-04
  • 1970-01-01
  • 2012-08-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2011-07-10
  • 1970-01-01
相关资源
最近更新 更多