我有一个带有 X 行的 dbGrid。我想用计时器更新第二行中的字段值(例如,显示倒计时)。没问题,但我希望能够更改选定的行并继续更新第二行。当网格中的选择发生变化时,连接数据集的当前记录也会发生变化,这是一个问题,因为计时器中的代码指向所选记录。
怎么可能解决?谢谢!
如果连接到 dbGrid 的数据集是 TClientDataSet,您可以删除另一个 TClientDataSet 并从网格的数据集中克隆数据。
由于两个数据集将指向相同的数据,因此您可以更改克隆数据集中的值,并且该数据将显示在 dbGrid 中,而不会篡改 dbGrids 数据集。
试试这个非常简单的方法:
if DataSource1.DataSet.State in dsEditModes then
DataSource1.DataSet.Post; { or Cancel, depends on your needs }
try
DataSource1.DisableControls;
Bookmark := ClientDataSet1.GetBookmark;
try
if ClientDataSet1.Locate(SecondRowId, 'Id', []) then
begin
ClientDataSet1.Edit;
ClientDataSet1['Counter'] := Counter;
ClientDataSet1.Post;
end;
ClientDataSet1.GotoBookmark(Bookmark);
finally
CLientDataSet1.FreeBookmark(Bookmark);
end;
finally
DataSource1.EnableControls;
end;