2

X行のdbGridを取得しました。2行目のフィールド値をタイマーで更新したい(たとえば、カウントダウンを表示する)。それは問題ありませんが、選択した行を変更して2番目の行を更新し続けることができるようにしたいと思います。グリッドで選択が変更されると、接続されているデータセットの現在のレコードも変更されます。これは、タイマーのコードが選択されたレコードを指しているため、問題になります。

どうすればそれを解決できますか?ありがとう!

4

2 に答える 2

4

dbGrid に接続されているデータセットが TClientDataSet の場合、別の TClientDataSet を削除して、グリッドのデータセットからデータを複製できます。

両方のデータセットが同じデータを指すため、複製されたデータセットの値を変更でき、そのデータは dbGrids データセットを改ざんすることなく dbGrid に表示されます。

于 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 に答える