如何更改 DBgrid 行值?

How to change DBgrid row value?

我想用外部数据更改 DBgrid 行值,如何实现?

例如,我想通过单击按钮将 Tedit 值添加到 dbgrid 选定的行列(例如 5)中。

此外,我想将 1 个 dbgrid 的值添加到另一个 dbgrid。(添加到现有数字,而不是替换)。

假设您有一个数据集通过 TDataSource 连接到数据库感知控件,如 TDBEdit 和 TDBGrid。 Delphi 的 db-aware 控件基本上是 Delphi 附带的默认控件,并显示在其组件面板的 Data controls 选项卡上以及您安装的任何第 3 方控件。它们被称为 db-aware 的原因是因为它们被写入以便它们显示的值自动从数据集的相关字段派生。

还假设数据集名为 Table1 并且有一个您要更改的 CustomerName 字段。 最简单的代码可以实现这一点,类似于:

Table1.Edit;  // put table one into dsEdit state so that field values can be changes
Table1.FieldByName('CustomerName').AsString := 'Jones';
Table1.Post;  // save the change(s) to Table1

更优化的代码可能是

Table1.Edit;
try
  Table1.DisableControls;  //  this prevents the db-aware controls updating on-screen while the changes are made
  Table1.FieldByName('CustomerName').AsString := 'Jones';
  Table1.FieldByName('CustomeCountry').AsString := 'DE@;
finally
  Table1.Post;
  Table1.EnableControls; //  Eable screen updating od the db-aware controls again
end;

这将更新链接到 DBGrid 中当前(即突出显示)行的 CustomerName 和 CustomerCountry 单元格中的 CustomerName 和 CustomerCountry 字段 的 DBEdit 控件中显示的值,因为 DBGrid 中的当前行始终跟踪连接数据集中的当前行。

如果您真的想更新 TEdit 文本中的给定列,您可以这样做:

Table1.Edit;
DBGrid1.Columns[5].Field.AsString := Edit1.Text; 
Table1.Post;