我现在已经把数据读到DBGrid 中,在一列上实现的下拉形式.需要(NAME)的也能显示到下拉框里.
下拉框的数据来自另一个表B(ID,NAME).
我要把数据保存的A表,不是保存NAME,而是保存与NAME相对应的ID;      while not cdsModel.Eof do
      begin
        DBGrid.Columns[1].PickList.add(cdsModel.FieldValues['NAME']);
        cdsModel.Next;
      end;
      现在,实现了DBGRID中NAME字段用下拉框表示,也可以在下拉框中任意选择了。但是,必须解决一个问题:   
      1   如何使选择的是名称(NAME),而保存的是与名称相对应的值(ID)?   

解决方案 »

  1.   

    1.如果name跟id一一对应的话
    在DBGrid.Columns[1]对应字段的onSetText根据name值查找id,,
    2.使用一个数组或列表在向DBGrid.Columns[1].PickList添加name值时,
    对应保存其id值,
      

  2.   

    2是不同id可能有重复的name时使用
      

  3.   

    1.如果name跟id一一对应的话 
    在DBGrid.Columns[1]对应字段的onSetText根据name值查找id,, 
    我应该用这个能不能说具体点啊.
    俺是菜鸟
      

  4.   

    在数据集的组中字段设计事件onSetText中,写相应的代码procedure XXXSetText(Sender: TField;
      const Text: String);
    begin
    if trim(text)='上行' then
        Sender.AsInteger:=0    //上行
    else if trim(text)='下行' then
        Sender.AsInteger:=1    //下行
    else
        Sender.AsInteger:=2;   //上下行end;里面 在的数值你可以通过查找另外的一个表来获取.
      

  5.   

    你这样的处理办法在遇到重复的name值时会出问题,我是这样作的,在DBGrid的oncellclick事件中判断SelectedField.FieldName,如果是需要下拉框的字段,就把一个Combobox组件显示出来(实现可以先隐藏,需要加载的内容加载好),定义好位置,在焦点离开Combobox组件的时候,隐藏它,并修改数据库数据,这样效果更好一些
      

  6.   

    把你的NAME和ID 一起找出来,但是不要显示ID,数据选择时就选择ID值就行了,关键是ID你要灵活运用