Foros Club Delphi

Foros Club Delphi (https://www.clubdelphi.com/foros/index.php)
-   Varios (https://www.clubdelphi.com/foros/forumdisplay.php?f=11)
-   -   Hacer multiseleccion a placer en DbGrid por codigo (https://www.clubdelphi.com/foros/showthread.php?t=92606)

Tcmn 08-12-2017 16:10:38

Hacer multiseleccion a placer en DbGrid por codigo
 
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 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:
Código Delphi [-]
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:
Código Delphi [-]
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.


La franja horaria es GMT +2. Ahora son las 16:10:00.

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