PDA

Ver la Versión Completa : marcar una fila seleccionada!!


candido
13-08-2004, 09:00:21
hola a todos!!!

a ver si me sé explicar bien,

Tengo un TDBGrid, asociado a una ADOQuery, en el que el usuario puede elegir una serie de filas para despues realizar una operacion concreta con las filas seleccionadas, lo que me gustaria seria hacer una marca en el DBGrid para que el usuario sepa las filas que ha seleccionado y las que no.

Lo he intentado con todo, pintando en el canvas, y lo unico que se me ocurre seria crear un campo mas en la tabla y modificarlo cada vez que el usuario seleccione un registro, pero no quisiera tener que hacer todos esto.

muchas gracias anticipadas por vuestra ayuda

CIAO!!!

jachguate
13-08-2004, 10:48:42
Basta con que añadas el flag dgMultiSelect a la propiedad Options del dbGrid. El usuario podrá seleccionar multiples registros con el mouse + las teclas ctrl y shift.

Luego, con la propiedad SelectedRows, que es una lista de TBookMark podes ir a las filas seleccionadas.

Hasta luego.

;)

Lepe
13-08-2004, 13:14:28
if rxDBGrid1.SelectedRows.Count>0 then
with rxDBGrid1.DataSource.DataSet do
begin
for i:=0 to rxDBGrid1.SelectedRows.Count-1 do
begin
rxdbgrid1.GotoSelection(i);
// ya estoy en la seleccion
end;
end;


Esto es para un RxdbGrid de las RxLibs, pero si no me equivoco es igual para un TDBGrid.

Saludos

candido
17-08-2004, 10:45:29
lo del multiselect ya lo habia probado, pero mi idea era hacer la marca con el doble click del DBGrid, y poder hacer otra cosas sin que la seleccion se pierda, al pinchar en otro sitio.

Lepe
17-08-2004, 14:49:33
dbgrid.options

dgAlwaysShowSelection The selected cell displays the focus rectangle even when the grid does not have focus.


¿esto tal vez?

candido
20-08-2004, 09:34:02
;) con esto va debuti,

ahora voy a lanzar dos preguntillas :confused: para rizar el rizo,

1. Se pueden seleccionar varios registros de una tacada, como en windows, es decir, si pinchas en el primero, y con la tecla Shift pulsada, pinchas mas abajo, selecciona todos los que estan entre los dos registros seleccionados.

2. se pueden seleccionar por codigo registros en un grid, igual que si el usuario hiciese click en una fila,

muchas gracias por adelantado, ya que con lo de antes ya me serviria perfectamente. :D

Lepe
20-08-2004, 18:19:21
Hola de nuevo candido :)

1. Sí, y además puedes usar las teclas Ctrl o Shift para esos propósitos, Un bloque contiguo con Shift y despues Ctrl para algunos registros "salteados"

2. En principio con un DBGrid no. Aunque tienes SelectedRows que son de tipo TBookmarkList, éste último no permite añadir por código, solo consultar y borrar :(. Otros tipos de "Grid" si lo permiten como el VirtualStringTree; no es exactamente un Grid con acceso a Bases de datos, pero sí muy potente y flexible.

Saludos

DanDelphi
01-02-2005, 10:29:18
2. En principio con un DBGrid no. Aunque tienes SelectedRows que son de tipo TBookmarkList, éste último no permite añadir por código, solo consultar y borrar :(. Otros tipos de "Grid" si lo permiten como el VirtualStringTree; no es exactamente un Grid con acceso a Bases de datos, pero sí muy potente y flexible.


Esto no es cierto. Se puede seleccionar elementos por código :

procedure DBGridSelectAll(AGrid: TDBGrid) ;
begin
AGrid.SelectedRows.Clear;
with AGrid.DataSource.DataSet do
begin
DisableControls;
First;
try
while not EOF do
begin
AGrid.SelectedRows.CurrentRowSelected := True;
Next;
end;
finally
EnableControls;
end;
end;
end;


Sacado de dephi.about.com.

Un saludo

Lepe
01-02-2005, 10:34:38
Muchas gracias por el detalle.

Saludos

el_barto
19-10-2007, 15:35:26
Buenos dias:

al poner la propieedad dgMultiselect de un dbgrid en true, como se puede hacer para que los registros seleccionados, se puedan borrar con el (-) boton nbDelete de un dbnavigator ???.

Gracias de antemano por la ayuda.

el_barto
19-10-2007, 15:53:46
procedure TFrmInCainv.dbNavDetalleClick(Sender: TObject;
Button: TNavigateBtn);
begin
inherited;
IF Button = nbDelete then
begin
if (DBGridDetalle.SelectedRows.Count > 0) then
with DBGridDetalle.DataSource.DataSet do
DBGridDetalle.SelectedRows.Delete
end;
end;