Pergunta

Bem, algum tipo de pergunta n00b de mim. Eu surfei as perguntas líquidos e semelhantes aqui, mas não foram encontradas quaisquer respostas certas para tão simples (como eu pensava) problema.

Eu tenho um DBGrid. Eu selecionar uma linha e fazer algumas ações com outros dados ligados a esta linha. Depois que eu terminei, minha DBGrid sendo atualizada e selecionados resets de linha para primeiro. Eu quero ter a mesma linha selecionada que foi selecionado antes de atualizar dados DBGrid. Alguma sugestão?

Foi útil?

Solução

Antes de refrescante, salvar a seleção atual do conjunto de dados ligados como um marcador, em seguida, restaurar o marcador depois.

Outras dicas

Esta resposta destina-se como um suplemento menor para Mason, não uma alternativa. Eu adicionei apenas porque outra resposta apareceu, sugerindo, de forma incorrecta imo, o uso da propriedade RECNO do conjunto de dados. Nem todos os descendentes de TDataSet implementar RECNO confiável ou em tudo. Alguns descendentes apenas retornar um valor constante, por exemplo, 0 para RECNO do atual linhas e não fazer nada quando você atribuir um valor a ela.

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;
Licenciado em: CC-BY-SA com atribuição
Não afiliado a StackOverflow
scroll top