2

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

怎么可能解决?谢谢!

4

2 回答 2

4

如果连接到 dbGrid 的数据集是 TClientDataSet,您可以删除另一个 TClientDataSet 并从网格的数据集中克隆数据。

由于两个数据集将指向相同的数据,因此您可以更改克隆数据集中的值,并且该数据将显示在 dbGrid 中,而不会篡改 dbGrids 数据集。

于 2010-06-29T08:25:16.757 回答
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;
于 2010-06-29T10:25:06.560 回答