我有一个带X行的dbGrid。 我想用计时器更新第二行中的字段值(例如,显示倒计时)。 这没问题,但我希望能够更改所选行并继续更新第二行。 当网格中的选择发生变化时,连接数据集的当前记录也会发生变化,这也是一个问题,因为计时器中的代码指向所选记录。
怎么能解决这个问题? 谢谢!
答案 0 :(得分:4)
如果连接到dbGrid的数据集是TClientDataSet,则可以从网格的数据集中删除另一个TClientDataSet并克隆数据。
由于两个数据集都指向相同的数据,因此您可以更改克隆数据集中的值,并且该数据将显示在dbGrid中,而不会篡改dbGrids数据集。
答案 1 :(得分:0)
尝试这种非常简单的方法:
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;