Foros Club Delphi

Foros Club Delphi (https://www.clubdelphi.com/foros/index.php)
-   Conexión con bases de datos (https://www.clubdelphi.com/foros/forumdisplay.php?f=2)
-   -   Selección por código de todas las filas de un DBGrid (https://www.clubdelphi.com/foros/showthread.php?t=2393)

tupez 22-07-2003 10:10:43

Selección por código de todas las filas de un DBGrid
 
Me gustaría que me ayudaráis a hacer una cosa:
Tengo una aplicación basada en BD. La tabla principal la tengo mostrada en un control DBGrid. Y me gustaría tener unas opciones de menú del estilo:

Edición -> Seleccionar todo
Edición -> Invertir selección

El problema es que esto lo quiero hacer mediante código puesto que para seleccionar todas las filas de un grid con el ratón es un poco engorroso.
Le he dado muchas vueltas a la propiedad RowsSelectec pero ésta es de sólo lectura, y no me deja marcar las filas que a mí me interesan. He conseguido crear otra variable RowSelected para recorrer todas las filas de la query que me interesan pero lo que yo quiero exactamente es que que se seleccionen todas las filas del grid y queden marcadas visiblemente al usuario.

Espero haberme explicado y que podáis ayudarme. Muchas gracias.:)

delphi.com.ar 22-07-2003 16:24:32

Si utilizas la TRxDBGrid puedes utilizar el método SelectAll y UnselectAll para todas las filas, en mi versión ampliada de este grid, he agregado el código de InvertSelection que te paso aquí:

Código:

procedure TRxDBGrid.SelectAll;
var
  ABookmark: TBookmark;
begin
  if MultiSelect and DataLink.Active then begin
    with Datalink.Dataset do begin
      if (BOF and EOF) then Exit;
      DisableControls;
      try
        ABookmark := GetBookmark;
        try
          First;
          while not EOF do begin
            SelectedRows.CurrentRowSelected := True;
            Next;
          end;
        finally
          try
            GotoBookmark(ABookmark);
          except
          end;
          FreeBookmark(ABookmark);
        end;
      finally
        EnableControls;
      end;
    end;
  end;
end;

procedure TRxDBGrid.UnselectAll;
begin
  if MultiSelect then begin
    SelectedRows.Clear;
    FSelecting := False;
  end;
end;

Código:

procedure TFSDBGrid.InvertSelection;
var
  ABookmark: TBookmark;
begin
  if MultiSelect and DataLink.Active then begin
    with Datalink.Dataset do begin
      if (BOF and EOF) then Exit;
      DisableControls;
      try
        ABookmark := GetBookmark;
        try
          First;
          while not EOF do begin
            SelectedRows.CurrentRowSelected := not SelectedRows.CurrentRowSelected;
            Next;
          end;
        finally
          try
            GotoBookmark(ABookmark);
          except
          end;
          FreeBookmark(ABookmark);
        end;
      finally
        EnableControls;
      end;
    end;
  end;
end;


tupez 23-07-2003 09:48:34

Siento mucho mi ignorancia pero no sé a qué componente te refieres con "TRxDBGrid". Yo utilizo el TDBGrid que viene por defecto con Delphi 7.
He estado mirando en tu página por si encontraba algún componente como el que llamas pero no lo encuentro.
Muchas gracias de todas formas. Probaré el código que me has facilitado a ver si es de ayuda.

Chao ;)

delphi.com.ar 23-07-2003 17:22:52

El componente TRxDBGrid pertenece a las RxLibs, que son una extensión rusa de la VCL, muy utilizada por los programadores Delphi. Si te interesan las puedes bajar de Torry.net.

Saludos!


La franja horaria es GMT +2. Ahora son las 19:10:51.

Powered by vBulletin® Version 3.6.8
Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
Traducción al castellano por el equipo de moderadores del Club Delphi