1

是否可以在 Delphi 中设置 TDBGrid(或 TwwDBGrid)单元格只读?目前,我正在摆弄从字面上使单元格变灰并在编辑后将其清除,但这并不是很令人满意。

干杯,杰米

4

2 回答 2

5

一列中的特定单元格或所有单元格?

您可以通过这种方式将列设置为只读:

TDBGrid.Colums[IndexOfColumn].ReadOnly := True;

如果你想控制一个特定的单元格,那么你可以尝试在 OnCellClickEvent 中编写一个“保护”方案。我猜你甚至可以设置 TDBGrid.Colums[IndexOfColumn].ReadOnly := True; 在那种情况下,给定的单元格应该是只读的。就像是:

procedure TForm.DBGridCellClick(Column: TColumn);
begin
  Column.ReadOnly := ConditionForReadOnly(Column);
end;

编辑后:

我已经检查了这个解决方案并且它有效。

例如,如果您只想编辑列中大于第一个的单元格,并且它们的值必须为 0(以便能够编辑它们),那么保护方案将如下所示:

procedure TForm.DBGridCellClick(Column: TColumn);
begin
  Column.ReadOnly := (qry['FieldWithValue'] <> 0) or (Column.Index < 1);  //Index is 0-based
end;
于 2010-01-05T11:22:24.710 回答
0

正如 Wodzu 所说,TColumn拥有ReadOnly财产。

于 2010-01-05T11:49:40.703 回答