Выберите строку после обновления DBGrid - PullRequest
5 голосов
/ 25 октября 2009

Ну, какой-то вопрос от меня. Я просмотрел сеть и подобные вопросы здесь, но не нашел правильных ответов для такой простой (как я думал) проблемы.

У меня есть DBGrid. Я выбираю одну строку и выполняю некоторые действия с другими данными, связанными с этой строкой. После того, как я закончил, моя DBGrid обновляется и выбранная строка сбрасывается в первую очередь. Я хочу получить ту же строку, которая была выбрана до обновления данных DBGrid. Есть предложения?

Ответы [ 3 ]

4 голосов
/ 27 июля 2014

Этот ответ предназначен как незначительное дополнение к Мейсону, а не альтернатива. Я добавил его только потому, что появился еще один ответ, в котором предлагалось неверно, imo, использовать свойство RecNo набора данных. Не все потомки TDataSet надежно или вообще реализуют RecNo. Некоторые потомки просто возвращают постоянное значение, например 0 для RecNo текущих строк и ничего не делать, когда вы присваиваете ему значение.

procedure TMyForm.DoSomethingWithDataSet(ADataSet : TDataSet);
var
  Bookmark : TBookmark;
begin
  Bookmark := ADataSet.GetBookmark; // Save your place in ADataSet

  try
    Screen.Cursor := crSqlWait;  // Show the user that something is happening
    Update;  // update the form to make sure screen cursor updates
    ADataSet.DisableControls;
    // do something with ADataSet here  e.g.
    ADataSet.First;
    while not ADataSet.Eof do begin
      // do something with current row here, then
      ADataSet.Next;
    end;
  finally
    ADataSet.GotoBookmark(Bookmark);  // Return to where you were at outset
    ADataSet.FreeBookmark(Bookmark);
    ADataSet.EnableControls;
    Screen.Cursor := crDefault;  // Let the user see you're done
  end;
end;
4 голосов
/ 25 октября 2009

Перед обновлением сохраните текущий выбор связанного набора данных как закладку, а затем восстановите закладку.

0 голосов
/ 27 июля 2014
RecKey:=DmFRM.ViewTBL.RecNo;
          with DmFRM.ViewTBL do
               begin
                  Active:=false;
                  Active:=True;
                  RecNo:=RecKey;
               end;
...