Foros Club Delphi

Foros Club Delphi (https://www.clubdelphi.com/foros/index.php)
-   OOP (https://www.clubdelphi.com/foros/forumdisplay.php?f=5)
-   -   Filtrar una tabla a partir de una seleccion hecha en una rejilla (https://www.clubdelphi.com/foros/showthread.php?t=28128)

zerelho 09-12-2005 19:27:54

Filtrar una tabla a partir de una seleccion hecha en una rejilla
 
Hola a todos, estoy atascado con un problema que no doy resuelto y creo que no es demasiado complicado.
El tema es que a partir de una tabla que muestro en una rejilla quiero permitir que el usuario pueda seleccionar una serie de registros de la misma y que tenga la opción de "filtrar" la tabla de forma que solo aparezcan los que acaba de seleccionar.
¿Como podría hacer esto?

Tengo el metodo para recorrer los registros seleccionados de la rejilla pero no se como podría hacer para asociarlos con la propiedad Filter de la tabla o con el metodo OnFilterRecord (creo que esto último debe ser mas fácil).

Si alguien me echase un cable le estaría muy agradecido.

Código Delphi [-]
  if RejillaDatos.SelectedRows.Count>0 then
    with RejillaDatos.DataSource.DataSet do
      begin
          for i:=0 to RejillaDatos.SelectedRows.Count-1 do
          begin
            RejillaDatos.GotoSelection(i);
            // estoy en la seleccion, ahora como hago?
          end;
      end;

Casimiro Notevi 09-12-2005 19:52:42

La verdad es que jamás he usado esa propiedad Filter que mencionas, siempre he usado querys, pero así, de momento, se me ocurre que puedes poner un filtro de "cod=1 and cod=5 and cod=14" etc. suponiendo que tengas un campo cod.

Creo que te refieres a eso.

vtdeleon 09-12-2005 21:00:14

Saludos

Mira a ver si este codigo que he modificado te sirve
Código Delphi [-]
procedure TForm1.Button3Click(Sender: TObject);
var
  i, j: Integer;
  s:string;
begin
  if DBGrid1.SelectedRows.Count>0 then
    with DBGrid1.DataSource.DataSet do begin
      GotoBookmark(pointer(DBGrid1.SelectedRows.Items[0]));
      s:='custno='+ fields[0].AsString;//Custno y fields[0] es el campo a filtrar
      for i:=1 to DBGrid1.SelectedRows.Count-1 do
      begin
        GotoBookmark(pointer(DBGrid1.SelectedRows.Items[i]));
        s:=s + ' or custno='+ fields[0].AsString;
      end;
      Filter:=s;
    end;
end;
Suerte

zerelho 19-12-2005 12:59:30

Exactamente lo que buscaba
 
Gracias a los 2, eso era exactamente lo que quería, lo que pasa es que estaba intentando resolver la cosa de una forma enrevesada y a la cosa era bastante mas simple.
Lo que me surge ahora es mas una curiosidad, ¿que diferencia hay entre posicionarse en un registro seleccionado con
Código Delphi [-]
GotoBookmark(pointer(DBGrid1.SelectedRows.Items[i]));
como hace vtdeleon y con
Código Delphi [-]
RejillaDatos.GotoSelection(i);
como hago yo?
¿Es mas rápida una que la otra?


La franja horaria es GMT +2. Ahora son las 21:46:41.

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