PDA

Ver la Versión Completa : Hacer multiseleccion a placer en DbGrid por codigo


Tcmn
08-12-2017, 16:10:38
Hola qué tal? Espero todos bien. Les comento mi situación, estoy programando en una Compu con Windows XP profesional, Delphi 6 enterprise y firebird 2.1. Tengo una tabla llamada pagos que contiene registros con el monto de cada pago y el cliente desea poder especificar una cantidad por ejemplo 1,000 y que el programa automáticamente haga una suma de los pagos que equivalgan a esa cantidad lo más cercano posible pero que además se resalten en la rejilla los registros sumados.

En la parte de la suma es sencillo y ya tengo un ciclo que recorre tabla sumando pagos hasta que sumen la cantidad que pide el cliente pero sin pasarse el problema es que no se como hacer para que se queden seleccionados los registros que se han sumado. Ya habilite en la rejilla la opción MULTISELECT y trate de acomodar una sugerencia que dio Marcos zorrilla en este hilo (http://www.clubdelphi.com/foros/showthread.php?t=9783) pero solo me selecciona el último registro seleccionado. Busque en otros hilos pero no he podido encontrar alguno que me ayude a solucionar el problema. Gracias anticipadas por compartir su tiempo, conocimiento y experiencia.

Tcmn
08-12-2017, 16:12:00
Olvide mencionar que para conexión uso componentes de pestaña Interbase y DataAccess

ecfisa
08-12-2017, 17:34:04
Hola.

Si te entedí bién podrías hacer:

procedure SelectRowsUntil(gr:TDBGrid; Monto: Double);
var
ds : TDataSet;
sum: Double;
begin
sum := 0;
ds := gr.DataSource.DataSet;
ds.DisableControls;
try
while not ds.Eof and (sum <= Monto) do
begin
sum := sum + ds.FieldByName('MONTO_DEL_PAGO').AsFloat;
if sum <= Monto then
gr.SelectedRows.CurrentRowSelected := True;
ds.Next;
end;
finally
ds.EnableControls;
end;
end;


Ejemplo de uso:

procedure TForm1.Button1Click(Sender: TObject);
begin
SelectRowsUntil(DBGrid1, 100);
end;


Saludos :)

bitbow
08-12-2017, 18:36:15
Creo que tu problema podria ser el barrido de tu dataset, la seleccion la tendrias que realizar posterior al calculo ya que de otra forma estas navegando y te tomara el ultimo registros unicamente.

Saludos.

Tcmn
08-12-2017, 20:20:39
Mil gracias a ambos. Probare sugerencias y les aviso

Tcmn
10-12-2017, 06:53:59
Pues ya use la sugerencia de ecfisa y me ayudo a por fin solucionar mi problema. Solo añadí al final código para que el cursor regresara dos registros para que quedara en el último registro que se seleccionaba pero de ahí en más lo dejé todo igual. Mil gracias por su tan valiosa ayuda. Buen día.