1.
我用TDBGrideh输入数据,其中有一个字段在输入时用下拉列表框,列表框的数据来自于一个数据集,像EHLIB的DEMO1程序中的GRID1页框的下拉列表框的效果(下拉列表框可显示多列).2.TDBLOOKUPCOMBOBOXEH这个控件我设置它的editbutton的style为ebsellipsiseh,使它变为有一个三个小点按钮的EDIT控件, 我也在其onbuttonclick事件中调用一个对话框,显示数据,我在对话框中应传什么数据给它,并对什么属性赋值,我试过这种dblookupcombobox1.value:=employeecode 但是没有显示,但数据库改了?
先谢谢了!
我的EMAIL:[email protected]
随时等待!!

解决方案 »

  1.   

    这个说起来比较罗嗦
    1.在界面上放一个dblcePayMemo: TDBLookupComboboxEh; 设置好属性 比如DataField DataSource KeyField ListField ListSource等等下面给你个例子
    procedure TfrmImportReceive.dgrdUnCheckCellClick(Column: TColumnEh);
    begin
      if cdsTempallreceive.FieldByName('checkbox').AsString <> '1' then
        dblcePayMemo.Visible := False;
    end;procedure TfrmImportReceive.dgrdUnCheckColExit(Sender: TObject);
    var
      sSelectField :String;
    begin
      If dgrdUnCheck.SelectedField.FieldName  = dblcePayMemo.ListField then
      begin
        dblcePayMemo.Visible := false;
        if cdsTempallreceive.State <> dsEdit then exit;
        cdsTempallreceive['PMID'] := cdsPayMemo['PMID'];
        cdsTempallreceive['PMName'] := cdsPayMemo['PMName'];
      end;
    end;procedure TfrmImportReceive.dgrdUnCheckDrawColumnCell(Sender: TObject;
      const Rect: TRect; DataCol: Integer; Column: TColumnEh;
      State: TGridDrawState);
    begin
      if Column.ReadOnly then  exit;
      if cdsTempallreceive.FieldByName('CheckBox').AsString = '0' then exit;
      if (gdFocused in State) then
      begin
        if (Column.FieldName = dblcePayMemo.ListField ) then
        begin
          dblcePayMemo.Left := Rect.Left + dgrdUnCheck.Left+1;
          dblcePayMemo.Top := Rect.Top + dgrdUnCheck.top+1;
          dblcePayMemo.Width := Rect.Right - Rect.Left-1;
          dblcePayMemo.Height := Rect.Bottom - Rect.Top-1;
          dblcePayMemo.Visible := True;
        end;
      end;
    end;procedure TfrmImportReceive.dgrdUnCheckExit(Sender: TObject);
    begin
      if not dblcePayMemo.Focused then
        dblcePayMemo.Visible := false;
    end;procedure TfrmImportReceive.dgrdUnCheckKeyDown(Sender: TObject;
      var Key: Word; Shift: TShiftState);
    begin
      if key=VK_DOWN then
      begin
        if cdsTempallreceive.State<>dsEdit then exit;
        if (dgrdUnCheck.SelectedField.FieldName=dblcePayMemo.ListField) then
        begin
          key :=0;
          dblcePayMemo.SetFocus;
          SendMessage(dblcePayMemo.Handle, WM_Char, 32, 0);
          exit;
        end;
      end;
    end;procedure TfrmImportReceive.dgrdUnCheckKeyPress(Sender: TObject;
      var Key: Char);
    begin
      if (key <> chr(9)) then
      begin
        if (dgrdUnCheck.SelectedField.FieldName = dblcePayMemo.ListField) then
        begin
           key := #0;
           //dblcePayMemo.SetFocus;
           //SendMessage(dblcePayMemo.Handle, WM_Char, word(key), 0);
           exit;
        end;
      end;
    end;procedure TfrmImportReceive.dblcePayMemoCloseUp(Sender: TObject;
      Accept: Boolean);
    begin
      //if Sender=dblcePayMemo then dblcePayMemo.Tag:=1;
      Accept :=True;
      dgrdUnCheckColExit(nil);
      //dgrdUnCheck.SetFocus;
      //keybd_event(9,0,KEYEVENTF_EXTENDEDKEY,0);
    end;procedure TfrmImportReceive.dblcePayMemoKeyPress(Sender: TObject;
      var Key: Char);
    begin
      if key=#13 then
      begin
        key :=#0;
        dgrdUnCheck.SetFocus;
        keybd_event(9,0,KEYEVENTF_EXTENDEDKEY,0);
      end;
    end;
      

  2.   

    对了还要把TDBGridEh 中你要修改的那个字段的readonly设置为False
      

  3.   

    我问的是2个问题:你回答的是第一个问题,我是用查询字段,可是出错:提示发生未知错误.
    我是这样做的:我在TADODATASET中NEW FIELD,fieldkind=fklook,fieldname=cname,keyfields=categoryxh,
    lookupDataSet=ADOQuery1,lookupkeyfield=xh,lookupresultfield=categoryname
    XH为序号(char(2)),categoryname为分类名称,categoryxh存的是序号
    adoquery1中的字段为(XH,Catgeoryname,mem),adoquery1.sql.text:='select * from category'
      

  4.   

    我是这*.DFM的一部分
    object DetailDataSet: TADODataSet
        Connection = DM.ADOCon
        CursorType = ctStatic
        CommandText = 'select * from bominfo'
        DataSource = dsbase
        IndexFieldNames = 'SupplierID'
        MasterFields = 'SupplierID'
        Parameters = <>
        Left = 362
        Top = 180
        object DetailDataSetID: TAutoIncField
          FieldName = 'ID'
          ReadOnly = True
        end
        object DetailDataSetSupplierID: TStringField
          FieldName = 'SupplierID'
          FixedChar = True
          Size = 5
        end
        object DetailDataSetbomxh: TStringField
          FieldName = 'bomxh'
          FixedChar = True
          Size = 5
        end
        object DetailDataSetCategoryxh: TStringField
          FieldName = 'Categoryxh'
          FixedChar = True
          Size = 2
        end
        object DetailDataSetStandard: TStringField
          FieldName = 'Standard'
          Size = 50
        end
        object DetailDataSetUnit: TStringField
          FieldName = 'Unit'
          FixedChar = True
          Size = 10
        end
        object DetailDataSetMemo: TStringField
          FieldName = 'Memo'
          Size = 100
        end
        object DetailDataSetCName: TStringField   //主要是这个查询字段
          FieldKind = fkLookup
          FieldName = 'CName'
          LookupDataSet = ADOQuery1
          LookupKeyFields = 'XH'
          LookupResultField = 'Categoryname'
          KeyFields = 'Categoryxh'
          Lookup = True
        end
      end