Delphi - Обновить поле в dbGrid, когда выделение находится в другой строке - PullRequest
2 голосов
/ 29 июня 2010

Я получил dbGrid с X строками.Я хочу обновить значение поля во второй строке с помощью таймера (например, показать обратный отсчет).Это не проблема, но я хочу иметь возможность изменить выбранную строку и продолжать обновлять вторую строку.Когда выбор изменяется в сетке, текущая запись подключенного набора данных также изменяется, и это проблема, потому что код в таймере указывает на выбранную запись.Спасибо!

Ответы [ 2 ]

4 голосов
/ 29 июня 2010

Если набор данных, подключенный к dbGrid, это TClientDataSet, вы можете удалить другой TClientDataSet и клонировать данные из набора данных сетки.

Поскольку оба набора данных будут указывать на одни и те же данные, вы можете изменить значения в клонированном наборе данных, и эти данные будут отображаться в dbGrid без вмешательства в набор данных dbGrids.

0 голосов
/ 29 июня 2010

Попробуйте этот очень простой подход:

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;
...