Pregunta

Bueno, una especie de pregunta n00b de mi parte. He navegado por la red y preguntas similares aquí, pero no he encontrado ninguna respuesta correcta para un problema tan simple (como pensé).

Tengo un DBGrid. Selecciono una fila y hago algunas acciones con otros datos vinculados a esta fila. Después de que termine, mi DBGrid se actualiza y la fila seleccionada se restablece a la primera. Quiero obtener la misma fila seleccionada que se seleccionó antes de actualizar los datos de DBGrid. ¿Alguna sugerencia?

¿Fue útil?

Solución

Antes de actualizar, guarda la selección actual del conjunto de datos vinculado como un marcador, luego restaura el marcador después.

Otros consejos

Esta respuesta pretende ser un suplemento menor para Mason's, no una alternativa. Lo he agregado solo porque ha aparecido otra respuesta, lo que sugiere, incorrectamente, el uso de la propiedad RecNo del conjunto de datos. No todos los descendientes de TDataSet implementan RecNo de manera confiable o en absoluto. Algunos descendientes simplemente devuelven un valor constante, p. 0 para el RecNo de las filas actuales y no haga nada cuando le asigna un valor.

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 bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top