具有多列的 TcxComboBox

TcxComboBox with multiple column

是否可以使用多个值填充 TcxComboBox,例如

ID  NAME    DESCRIPTION
1   Audi    Audi desc
2   Bmw     Bmw desc

然后点击按钮获取 ID 或 NAME?

您可以使用 TcxLookUpComboBox 执行此操作。做起来非常简单,但需要您定义一个 in-memory 数据集来保存 您希望 cxLookUpComboBox 列出的记录,除非您已经有另一个数据集包含您想要在其 drop-down 列表中显示的记录,在这种情况下您可以使用它。我要展示的示例使用 TClientDataSet,因此它是 self-contained。 下面CDS1是TClientDataSet,DS1是数据集是CDS1的TDataSource:

uses cxLookUpDBGrid;

procedure TForm1.FormCreate(Sender: TObject);
var
  i : Integer;
  Field : TField;
  Column : TcxLookUpDBGridColumn; // needs cxLookUpDBGrid in Uses clause
begin
  Field := TIntegerField.Create(Self);
  Field.FieldName := 'ID';
  Field.DataSet := CDS1;

  Field := TStringField.Create(Self);
  Field.FieldName := 'Name';
  Field.DataSet := CDS1;

  CDS1.CreateDataSet;

  CDS1.IndexFieldNames := 'ID';

  //  Next, populate the CDS with a few records
  CDS1.InsertRecord([1, 'Apple']);
  CDS1.InsertRecord([2, 'Pear']);
  CDS1.InsertRecord([3, 'Banana']);

  CDS1.First;

  cxLookUpComboBox1.Properties.KeyFieldNames := 'ID';
  cxLookUpComboBox1.Properties.ListFieldNames := 'ID;Name';
  cxLookUpComboBox1.Properties.ListSource := DS1;
  cxLookUpComboBox1.Properties.ListFieldIndex := 2;  // returns Name value
  cxLookUpComboBox1.Properties.KeyFieldNames := 'ID';

  //  Next, add 2 columns to cxLookUpComboBox1 drop-down list

  Column := cxLookUpComboBox1.Properties.ListColumns.Add;
  Column.FieldName := 'ID';

  Column := cxLookUpComboBox1.Properties.ListColumns.Add;
  Column.FieldName := 'Name';

end;

如果您愿意,可以在 对象检查器,您可以在其属性 属性 下的 ListColumns 中找到它。如你 会在OI中看到,是高度可配置的。

注意当drop-down关闭时,返回的值是ListFieldIndex指定的字段属性。