X行のdbGridを取得しました。2行目のフィールド値をタイマーで更新したい(たとえば、カウントダウンを表示する)。それは問題ありませんが、選択した行を変更して2番目の行を更新し続けることができるようにしたいと思います。グリッドで選択が変更されると、接続されているデータセットの現在のレコードも変更されます。これは、タイマーのコードが選択されたレコードを指しているため、問題になります。
どうすればそれを解決できますか?ありがとう!
dbGrid に接続されているデータセットが TClientDataSet の場合、別の TClientDataSet を削除して、グリッドのデータセットからデータを複製できます。
両方のデータセットが同じデータを指すため、複製されたデータセットの値を変更でき、そのデータは dbGrids データセットを改ざんすることなく dbGrid に表示されます。
この非常に簡単なアプローチを試してください。
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;