我在窗口上放上ComboBox1 和EDIT1
 
  Combobox1里的内容是从数据表里读出来的. 现在的问题是,如何选择ComboBox1里的内容后,把表中编号对应的一条内容放进Edit1内.表结构如下:Id    No      display  (id为自动编号,)
1   10001     小明
2   10002     小红
3
.    ..        ..
.    ..        .. 
我在ComboBox1里选中了1002 后Edit1 的内容为"小红"

解决方案 »

  1.   

    建议使用DBComboBox和DBEdit,会方便很多。
      

  2.   

    liangqingzhi(老之)
     
     
       建议使用DBComboBox和DBEdit,会方便很多。
    这个建议好但是控制起来不方便
      

  3.   

    有一种方法可以根据你选的内容进行查询,不过这种方法比较死
    还有一种方法
    type 
       TUser_List = class(object)
        Id       :integer;
        No       :string;
        display  :string;
    end;
    ......
      UserList:TList;
    ......
    先type一个记录类,可以在你加载combobox的时候,同时加载类到UserList里,不过这样做比较费用又费内存。
      就和上面说的一样用DataSet最好。
      

  4.   

    procedure TForm1.ComboBox1Change(Sender: TObject);
    var
      sNo,sSQL:string;
    begin
      sNo := ComboBox1.Text; //or ComboBox1.Items[ComboBox1.ItemIndex]
      sSQL := ' SELECT Display FROM Table1 ' +
              ' WHERE No =' + QuotedStr(sNo); //No须唯一,最好用ID
      with adoQuery1 do
      begin 
        Close;
        SQL.Text := sSQL;
        Open;
        if not Eof then
          Edit1.Text := Fields[0].AsString;
        Close;
      end;
    end;
      

  5.   

    写两个查询语句不就搞定了么
    1.Combobox1: select No from A where ...  将查询到的内容add到Combobox1中
    2.当你选择了Combobox1中的某项后(假使是sNo: string),取内容再写个查询:
      select * from A where No='+sNo+'  将查询到的内容赋值给Edit1这样的问题以后别给那么多分 :)
      

  6.   

    谢谢楼上朋友.你们的方法我就试试.gw_delphi(从容) 谢谢你,恩. 简单问题有时候高手不屑回答.所以多给点分咯.
      

  7.   

    还有一个方法, 如果你的display中没有回车换行之类特殊字符的话, 可以使用如下方法, 比较简单
    在ComboBox1中增加内容使用以下类似方法代替:
    ComboBox1.Values['小红'] = '10002'; 
    实际写的时候当然是变量, 如:
    ComboBox1.Values[strDisplay] = strNo;我在ComboBox1里选中了某个ID后的代码如下
    Edit1.Text := ComboBox1.Names[ComboBox1.ItemIndex];
      

  8.   

    支持   smallBridge(萧秋雨)
      

  9.   

    按照你的需求,可以考虑用TList对象来实现。
      

  10.   

    新问题来了.我在窗口上放了ComboBox1 , ComboBox2 以及Edit1 现在要解决的问题是:当ComboBox1中所选的值改变时得到表中的字段名,并把此字段下的全部值添加到ComboBox2中例如:  combobox1 里的内容有 HuNan(湖南),Hubei,Guangdong,..  Combox2的内容根据Combobx1选择显示对应的内容. 表有:HuNan ,Hubei ,Guangdong ............ HuNan      表结构为:ID HuNan  No 
                内容为:  1  长沙   0731
                         2  株洲   0732
                         3  湘潭   0733
     Guangdong  表结构为:ID HuNan No 
     
    Hubei      表结构为:ID HuNan No 
     .........................
     
     依次类推..
        现在已经已经通过 Combobox1 的事件实现了 当选中Combobox1后Combobox2出现了对应的内容.(例如: 选中Combobox1的HuNan 后,Combobox2出现了 长沙,湘潭 ,株洲 ,等内容)
    procedure TForm1.ComboBox1Change(Sender: TObject);
    var
    tmpFiledName:string;
    begin
      ComboBox2.Style:=csDropDownList;
      tmpFiledName:=ComboBox1.Text;
      ShowMessage(tmpFiledName);
      with  ADOQuery2 do
        begin
           Close;
           SQL.Clear;
           SQL.Add('SELECT '+tmpFiledName+'FROM  '+tmpFiledName+' ');
           Open;
        end;
      ComboBox2.Items.Clear;
       while not ADOQuery2.Eof do
         begin
           ComboBox2.Items.Add(ADOQuery2.Fields[0].Value);
           ADOQuery2.Next;
          end;
    end;
    现在的问题是,我现在想现实 当我选中 Combobox2的某条选项后出现对应的编号.例如:
      选中combobox1 中的HuNan 后, 出现对应的内容 长沙,株洲 ,湘潭,  当我选择长沙后,Edit1出现 0731 ????
      

  11.   

    我也不知道我说的,不知道大家能否明白. 先谢谢了,问题解决马上结帖.这是以前的老帖子,可以看看:http://community.csdn.net/Expert/topic/4983/4983404.xml?temp=.8870355
      

  12.   

    var
       Number:array[0..100] of integer;  //全局数组;//你的原程序    
    ComboBox2.Items.Add(ADOQuery2.Fields[0].Value);
    //这里加上一句,记录下每个对应的No号
    Number[i]:=ADOQuery2.Fields[No的序号].Value;  
    Inc(i);
    ADOQuery2.Next;
    这样用的时候就
    Edit1.Text:=IntToStr(Number[ComboBox2.ItemIndex]);
      

  13.   

    nevergetwin(头球冲顶)谢谢的你办法。好象不行啊。