目前有个需求:
    数据库中有图书列表,图书有Id和名称两个属性,需要动态从数据库中读取,然后以列表的形式显示供用户选择图书,下拉框中text为图书名称,value需要为图书Id,请问Delphi中是否存在或者那个组件的功能类似于Html中的Select,同时请给出使用的范例,不甚感激!

解决方案 »

  1.   

    raize套件(网上可下载)的rzcombobox有此功能,可有value及text两项值可用。
      

  2.   

    1.
    CxLookupCOMBOBOX,在Express Edit4上,很方便,设置Property属性后将ListSource,KeyFieldname,ListFieldName设置即可.
    用CxLookupCOMBOBOX.EditValue获得其ID
    2.用普通控件ComboBox
    ComboBox1.Items.AddObject(..,..)
    具体怎么用自己查一下帮助~
      

  3.   


    //CUSTTYPE为一个字典表,Name为名称,TypeID为类型号
    procedure TForm1.FormCreate(Sender: TObject);
    begin
      with QryCustType do
      begin
        Close;
        sql.Clear;
        sql.Text:='select * from CUSTTYPE';
        open;
        while not Eof do
        begin
          ComboBox1.Items.AddObject(fieldbyname('name').AsString,Pointer(fieldbyname('custtypeid').AsInteger));
          next;
        end;
      end;
    end;显示Value
    procedure TForm1.Button2Click(Sender: TObject);
    var
      A_Value:integer;
    begin
      A_Value:=integer(ComboBox1.Items.Objects[ComboBox1.ItemIndex]);
      Showmessage(inttostr(A_Value));
    end;
      

  4.   

    使用combobox就可以了,首先自己定义一个记录type   
      myrecord=record   
      id:integer; 
      value:string;
    定义一个动态数组
    var 
     darray:array of myrecord
    然后在程序初始化中
    查询出图书数量num,  定义数组长度SetLength(darray,num);   
    给你的这个书的id和value分别赋给这个记录
      for(i=1;i<num;i++){
       darray[i].value=value;//这里是从数据库中查询的value
       darray[i].id=id;;//这里是从数据库中查询的id
     }
    ,combobox显示的就是id或者value,在他的onselect事件中:
      for(i=1;i<num;i++){
      if darray[i].value=strtoint(combobox.text) then
         xxxx:=darray[i].id;
    }