Foros Club Delphi

Foros Club Delphi (https://www.clubdelphi.com/foros/index.php)
-   Varios (https://www.clubdelphi.com/foros/forumdisplay.php?f=11)
-   -   "Todos" en LookupCombobox (https://www.clubdelphi.com/foros/showthread.php?t=72386)

hgiacobone 15-02-2011 23:28:57

"Todos" en LookupCombobox
 
Hola amigos,
Vieron que muchas veces (sobre todo en sitios web) aparece un control de tipo LookupCombobox que muestra una lista de algun tipo para hacer una selección (supongamos nombres de ciudades) pero como primer item tambien muestran una leyenda de tipo "(ver todas)"; "<mostrar todo>"; o similares, lo cual deja el filtro del combo sin efecto o mejor dicho, cubre todo el espectro posible.
¿Hay forma de setear un LookupCombobox desde Delphi con este comportamiento?

PD: Bah..., da igual LookupCombobox o ComboBox, mientras sea posible poner la opción "Todos".

ecfisa 16-02-2011 00:51:13

Hola hgiacobone.

Tanto el DBLookupComboBox como el DBComboBox representan visualmente los valores de los campos que existen en
una tabla. Por lo que si no existe un campo con el valor '< mostrar todos >', al menos yo, no veo la posibilidad de implementarlo.

Lo que creo que podés hacer es usar un ComboBox. Asignar en la primera posición la cadena que desees, luego llenarlo con
los campos de la tabla y usar el evento OnChange del Combo para actualizar la seleccion realizada en el mismo.

Te pongo un ejemplo:
Código Delphi [-]
...
procedure TForm1.FormShow(Sender: TObject);
begin
  ComboBox1.Items.Clear;
  ComboBox1.Items.Add('< mostrar todos >');
  IBQuery1.Close;
  IBQuery1.SQL.Clear;
  IBQuery1.SQL.Add('SELECT * FROM COUNTRY');
  IBQuery1.SQL.Add('ORDER BY COUNTRY');
  IBQuery1.Open;
  while not IBQuery1.Eof do
  begin
    ComboBox1.Items.Add(IBQuery1.FieldByName('COUNTRY').AsString);
    IBQuery1.Next;
 end;
 IBQuery1.First;
 ComboBox1.ItemIndex:= 0;
 ComboBox1.Sorted:= True;
end;

procedure TForm1.ComboBox1Change(Sender: TObject);
begin
  IBQuery1.Close;
  IBQuery1.SQL.Clear;
  if ComboBox1.ItemIndex = 0 then
  begin
    IBQuery1.SQL.Add('SELECT * FROM COUNTRY');
    IBQuery1.SQL.Add('ORDER BY COUNTRY');
  end
  else
  begin
    IBQuery1.SQL.Add('SELECT * FROM COUNTRY WHERE COUNTRY = :COUNTRY');
    IBQuery1.SQL.Add('ORDER BY COUNTRY');
    IBQuery1.ParamByName('COUNTRY').AsString:= ComboBox1.Text;
  end;
  IBQuery1.Open;
end;
...

Un saludo.

hgiacobone 16-02-2011 01:31:04

Gracias amigo por tu amable respuesta y clara explicación.
Saludo cordial,


La franja horaria es GMT +2. Ahora son las 19:29:10.

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