Выберите строку после обновления DBGrid
Вопрос
Ну, какой-то вопрос 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;