Delphi-选择位于另一行时dbGrid中的更新字段

Delphi-选择位于另一行时dbGrid中的更新字段,delphi,dbgrid,Delphi,Dbgrid,我得到了一个包含X行的dbGrid。 我想用计时器更新第二行中的字段值(例如,显示倒计时)。 这没有问题,但我希望能够更改所选行并不断更新第二行。 当网格中的选择更改时,连接的数据集的当前记录也会更改,这是一个问题,因为计时器中的代码指向所选记录 这怎么解决呢? 谢谢 如果连接到dbGrid的dataset是TClientDataSet,则可以删除另一个TClientDataSet并从grid的dataset克隆数据 由于两个数据集都指向相同的数据,您可以更改克隆数据集中的值,并且该数据将显示在

我得到了一个包含X行的dbGrid。 我想用计时器更新第二行中的字段值(例如,显示倒计时)。 这没有问题,但我希望能够更改所选行并不断更新第二行。 当网格中的选择更改时,连接的数据集的当前记录也会更改,这是一个问题,因为计时器中的代码指向所选记录

这怎么解决呢?
谢谢

如果连接到dbGrid的dataset是TClientDataSet,则可以删除另一个TClientDataSet并从grid的dataset克隆数据


由于两个数据集都指向相同的数据,您可以更改克隆数据集中的值,并且该数据将显示在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;

+1.@doubleu如果您不知道在这种情况下使用克隆游标,请看一看这是了解克隆用法的好方法。您好,谢谢您的回答。但是我有一些关于这个问题的问题。。。我得到了这样的结构:DataSource->ClientDataSet和ClientDataSetClone->DSProvider->TQuery。问题1:当我插入新记录时,我应该通过clientDataSet(然后使用ApplyUpdate)插入它们,还是应该直接使用TQuery?或者这无关紧要?问题2:当我使用clientDataSet插入记录时,这个新记录总是dbgrid中的最后一条记录。我怎样才能把它插在顶部?谢谢你的帮助,也为我愚蠢的问题感到抱歉。回答我自己:)我想我应该使用clientDataSet来插入新记录。在ApplyUpdate之后,我调用tquery.refresh来克隆tquery和ClientDataSet中的数据之间的内容。这也解决了我的第二个问题:当我第一次调用tquery.refresh,然后在clientDataSet中插入一条新记录时,它是网格中的第一条记录。如果我犯了明显的错误,请告诉我。多亏了你们,你们和stackoverflow都很棒;)