PDA

Ver la Versión Completa : Selección por código de todas las filas de un DBGrid


tupez
22-07-2003, 10:10:43
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í:

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;


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!