Вопрос

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

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

Это было полезно?

Решение

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

Другие советы

Этот ответ задуман как незначительное дополнение к ответу Мейсона, а не как альтернатива.Я добавил это только потому, что появился другой ответ, предлагающий, неверно, imo, использовать свойство RecNo dataset.Не все потомки 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;
RecKey:=DmFRM.ViewTBL.RecNo;
          with DmFRM.ViewTBL do
               begin
                  Active:=false;
                  Active:=True;
                  RecNo:=RecKey;
               end;
Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top