Skip to content

Delphi, cargar ComboBox con una gran cantidad de datos disponibles

Supongamos que tenemos que dar a elegir a nuestros usuarios una serie de personas cargadas en un ComboBox pero también queremos tener disponible una serie de datos de esas personas como domicilio, DNI, estado civil, etc, etc.

Para ello hay una serie de truquillos súper fáciles, con un ComboBox y un array vamos a tenes todos los datos disponibles para cuando el usuario lo quiera.

En primer lugar vamos a crear un formulario y en él agregaremos el ComboBox, y los edit para el Nombre, domicilio, DNI, estado civil y algún otro dato que querréis agregarle. Lo mostramos en la imagen siguiente:

A continuación vamos a crear el registro Personas con los siguientes campos:

type
  Personas = record
    Nombre: string;
    Apellido: string;
    Domicilio: string;
    DNI: string;
    EstCivil: string;
  end;

Luego, deberemos crear un array con el nombre vPersonas de tipo Personas cuyo ámbito sea todo el formulario, para ello lo declaramos antes de la implementation, junto a la declaración del formulario.

var
  Form1: TForm1;
  vPersonas: array of Personas;

implementation

{$R *.dfm}

Cargar un ComboBox con datos desde un array

Procedemos con la carga de datos. Para este ejemplo generamos los datos en el evento OnCreate del formulario, quedando el código de esta manera:

procedure TForm1.FormCreate(Sender: TObject);
var
  I: Integer;
begin
  // Seteamos el largo del array en 3
  SetLength(vPersonas, 3);

  // Cargamos los datos en el array
  vPersonas[0].Nombre := 'Juan';
  vPersonas[0].Apellido := 'Perez';
  vPersonas[0].Domicilio := 'Av. Colón 6845';
  vPersonas[0].DNI := '01.234.567';
  vPersonas[0].EstCivil := 'Soltero';

  vPersonas[1].Nombre := 'Luis';
  vPersonas[1].Apellido := 'Garcia';
  vPersonas[1].Domicilio := 'San Martin 7854';
  vPersonas[1].DNI := '99.123.456';
  vPersonas[1].EstCivil := 'Casado';

  vPersonas[2].Nombre := 'Roberto';
  vPersonas[2].Apellido := 'Toya';
  vPersonas[2].Domicilio := 'Rivadavia 452';
  vPersonas[2].DNI := '12.345.678';
  vPersonas[2].EstCivil := 'Divorciado';

  // Vaciamos el ComboBox
  ComboBox1.Items.Clear;

  // Cargamos los datos del array en el Combobox
  // concatenando el Apellido con el Nombre
  for I := 0 to High(vPersonas) do
    ComboBox1.Items.Add(vPersonas[I].Apellido + ' ' + vPersonas[I].Nombre);
end;

Paso a seguir, en el evento OnChange del componente ComboBox generamos el código para cuando el usuario elija el items, se carguen sus datos en los edit, quedando de la siguiente manera:

procedure TForm1.ComboBox1Change(Sender: TObject);
begin
  // Cargamos los datos en los Edit según el items elegido por el usuario
  edtNombre.Text := vPersonas[ComboBox1.ItemIndex].Apellido + ' ' + vPersonas[ComboBox1.ItemIndex].Apellido;
  edtDomicilio.Text := vPersonas[ComboBox1.ItemIndex].Domicilio;
  edtDNI.Text := vPersonas[ComboBox1.ItemIndex].DNI;
  edtEstadoCivil.Text := vPersonas[ComboBox1.ItemIndex].EstCivil;
end;

Ya tenemos listo nuestro ejemplo de como cargar items a un ComboBox y tener a disposición una gran cantidad de datos al instante.