Foros Club Delphi

Foros Club Delphi (https://www.clubdelphi.com/foros/index.php)
-   OOP (https://www.clubdelphi.com/foros/forumdisplay.php?f=5)
-   -   dos valores en un DBLookupComboBox (https://www.clubdelphi.com/foros/showthread.php?t=78315)

escorpionrojo43 08-04-2012 19:06:03

dos valores en un DBLookupComboBox
 
Hola Compañeros.

En esta ocasión necesito saber como poner 2 valores en un DBLookupComboBox.
necesito mostrar nombre y apellido que son 2 campos diferentes en mi tabla.
espero me puedan ayudar gracias.

ecfisa 08-04-2012 19:18:00

Hola.

Completa las siguientes propiedades del TDBLookupComboBox:
  • ListSource: Nombre del TDatasource asociado al DataSet. Ej: DataSource1
  • ListField: Nombre de los campos a mostrar separados por un ';' . Ej: Campo1;Campo2
  • KeyField: Campo clave

Saludos.

escorpionrojo43 08-04-2012 22:10:11

Cita:

Empezado por ecfisa (Mensaje 429556)
Hola.

Completa las siguientes propiedades del TDBLookupComboBox:
  • ListSource: Nombre del TDatasource asociado al DataSet. Ej: DataSource1
  • ListField: Nombre de los campos a mostrar separados por un ';' . Ej: Campo1;Campo2
  • KeyField: Campo clave

Saludos.

hola ecfisa te agradesco la informacion. el espacio de los campos es muy grande, necesito saber si hay alguna forma de reducir esos espacios.
gracias por tu aporte.

ecfisa 09-04-2012 08:41:19

Hola.

La propiedad ListField, de tipo string, contiene el valor o valores de el/los campos que van a ser mostrados, quizá haya otro modo de hacerlo pero lo único que se me ocurre ahora, es recurrir a la propiedad DisplayWidth del TField relacionado.

Veo dos opciones, la primera ajustando arbitrariamente la longitud de los campos a mostrar, ejemplo:
Código Delphi [-]
procedure TForm1.FormCreate(Sender: TObject);
begin
  ...
  DataSet.FieldByName('Campo1').DisplayWidth:= 15;
  DataSet.FieldByName('Campo2').DisplayWidth:= 10;
end;
Esto es simple y rápido pero truncará los valores si estos exceden el valor que se designo a la propiedad DisplayWidth.

La segunda es hacer un recorrido previo del TDataSet para calcular el valor máximo de cada campo a mostrar y luego ajustar la propiedad DisplayWidth a ese valor:
Código Delphi [-]
procedure TForm1.FormCreate(Sender: TObject);
var
  Max, Len: TPoint;
begin
  with DataSet do
  begin
    ...
    Max.X:= 0;
    Max.Y:= 0;
    First;
    while not Eof do
    begin
      Len.X:= Length(FieldByName('Campo1').AsString);
      Len.Y:= Length(FieldByName('Campo2').AsString);
      if Len.X > Max.X then Max.X:= Len.X;
      if Len.Y > Max.Y then Max.Y:= Len.Y;
      Next;
    end;
    FieldByName('Campo1').DisplayWidth:= Max.X;
    FieldByName('Campo2').DisplayWidth:= Max.Y;
    First;
  end;
end;
A esta última forma le veo dos inconvenientes, el primero que si existe algún campo con un valor de longitud igual al declarado en el campo es inútil. El segundo es que es ineficiente ya que recorre todo el dataset para hallar los máximos.
También está la posibilidad de reducir el tamaño de la fuente pero, lógicamente tiene un límite y pienso que ya lo debes haber intentado...

Por otro lado tomá en cuenta, que esto esta pensado para tratar con TStringField y también salvar los valores originales de las propiedades DisplayWidth de los campos modificados para restaurarlos al salir.


Saludos.


La franja horaria es GMT +2. Ahora son las 23:03:25.

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