DBGRid的某一项可以设置为ComboBox的模式。

解决方案 »

  1.   

    右键DbGrid选择-》
    Columns Editor-> PickList(选中你想要的列)属性
    加入你要的项目,不知可行否!
      

  2.   

    在colenter event中显示ComboBox并根据当dataset的纪录值设置ComboBox的itemindex;
    在drawcelldata中定位ComboBox;
    在colexit中隐藏ComboBox;
    在ComboBox的change事件中改变dataset的数据;
      

  3.   

    根据你的需要,把DBGRid的某一单元设置为ComboBox的模式。
      

  4.   

    1、定义查找字段,可实现
    2、自己改写代码,在OnDrawDataCell事件中书写句柄来绘制数据。
    其具体实例略
      

  5.   

    只有从TCustomerDBGrid继承,为InplaceEditor增加一个属性(界面上显示三点的小按钮,就象delphi中inspector所示那样),当用户点击它时,产生一个事件.在这个事件里,你可以编写代码实现你的功能,比如弹出一个对话框。
      

  6.   

    :::(给分) ^!^
    1、如果是‘男’、‘女’类的固定选项,可用PICKLIST属性
    2、单指向其他表的固定列时,可以新建列,定义为LOOKUP型,详情请查阅有关资料。
    3、加入可视组建:(给分)
    A. 在Delphi 4.0中新建一个项目。 
    B. 分别拖动的Data Access组件板上DataSource、Table,Data Controls组件板上DBGrid,DBComboBox四个组件到Form1上。 C.设置各个组件的属性如下: rcf1对象 属性 设定植 
    Form1 Caption  '在DBGrid中插入SpinEdit组件示例' 
    DataSource1 DataSet Table1 
    Table1 DatabaseName DBDEMOS 
      TableName 'teacher.DBF' 
      Active True 
    DBGrid1 DataSource DataSource1 
    DBComboBox1 DataField SEX 
      DataSource DataSource1 
      Visible False 
      Strings Items.    '男'| '女' 意:我在这里用了Teacher.dbf,那是反映教职工的性别,只能是“男”或者是“女”。 D.DrawDataCell事件是绘制单元格,当获得焦点网格所对应的字段与组合框所对应的字段一致时,移动组合框到获得焦点的网格上,并且
    使组合框可视,从而达到在DBGrid指定列上显示DBComboBox的功能。设置DBGrid1的OnDrawDataCell事件如下: 
    procedure TForm1.DBGrid1DrawDataCell(Sender: TObject; const Rect: TRect; Field: TField; State: TGridDrawState);
    begin
      if (gdFocused in State) then
      begin
        if (Field.FieldName = DBComboBox1.DataField ) then
        begin
          DBComboBox1.Left := Rect.Left + DBGrid1.Left;
          DBComboBox1.Top := Rect.Top + DBGrid1.top;
          DBComboBox1.Width := Rect.Right - Rect.Left;
          DBComboBox1.Height := Rect.Bottom - Rect.Top;
          DBComboBox1.Visible := True;
       end;
     end;
    end;E、 DBGrid指定单元格未获得焦点时不显示DBComboBox,设置DBGrid1的OnColExit事件如下: 
    procedure TForm1.DBGrid1ColExit(Sender: TObject);
    begin
      If DBGrid1.SelectedField.FieldName = DBComboBox1.DataField then
      begin
        DBComboBox1.Visible := false;
      end;
    end;F、 当DBGrid指定列获得焦点时DrawDataCell事件只是绘制单元格,并显示DBComboBox,但是DBComboBox并没有获得焦点,数据的输入还是在单元格上进行。在DBGrid1的KeyPress事件中调用SendMessage这个 Windows API函数将数据输入传输到DBComboBox上,从而达到在DBComboBox上进行数据输入。因此还要设置KeyPress事件如下: 
    procedure TForm1.DBGrid1KeyPress(Sender: TObject; var Key: Char);
    begin
      if (key < > chr(9)) then
      begin
        if (DBGrid1.SelectedField.FieldName  =DBComboBox1.DataField) then
        begin
           DBComboBox1.SetFocus;
           SendMessage(DBComboBox1.Handle, WM_Char, word(Key), 0);
        end;
      end;
    end;
     
      

  7.   

    to:cyun(雨) 
    您的方法我试了,但不行啊!我的email为:[email protected]
      

  8.   

    to:cyun(雨) 
    您的方法我试了,但不行啊!我的email为:[email protected]
      

  9.   

    我有控件,实现该功能易如反掌。跟PB的DATAWINDOW一摸一样。
    [email protected]
      

  10.   

    DBGRid的某一项可以设置为ComboBox的模式
      

  11.   

    to:llhh(鱼)
    我现在急想要这个控件。[email protected].谢谢!
      

  12.   

    to:llhh(鱼) 
    怎么没看到你人的了啊!你能给我发过了吗[email protected]
      

  13.   

    DBGRID本身就具有这样的功能,要什么别的其它控件做什么???
      

  14.   

    to:tangqin(唐僧) 
    怎么实现呢?
      

  15.   

    这是向dbGrid中的PickLisk中添加以前不存在的项目
    if dbGrid1.Columns[N].PickList.IndexOf(CheZhong) = (-1) then
          begin
            dbGrid1.Columns[N].PickList.Add(dbGrid1.Columns.Items[dbGrid1.Columns.Grid.SelectedIndex]
    .Field.AsString);
          end;下面是自动追加第一项
    procedure tform1.xuanze(n:integer);
    var i,J : integer;
       tmp : tstringlist;beginI:=0;
    tmp.Create;if n=2 then;
    begin  //调整PickList的次序
      i:=i+1;
      for j:=0 to  dbGrid1.Columns[N].PickList.count-1 do
       begin
      tmp.Add(dbGrid1.Columns[N].PickList.String(J);
      end;
      dbGrid1.Columns[N].PickList.clear;
     for j:=0 to  tmp.count-1 do
       begin
        if j < tmp.count then
      dbGrid1.Columns[N].PickList.Add(Tmp.String(J+1)
        else dbGrid1.Columns[N].PickList.Add(Tmp.String(0);
       end;
      n:=n-1;
    end;
     if n=1 then
       begin 
    if   dbGrid1.Columns.Items[dbGrid1.Columns.Grid.SelectedIndex]
    .Field.AsString = '' then
      dbGrid1.Columns.Items[dbGrid1.Columns.Grid.SelectedIndex].Field.AsString :=dbGrid1.Columns[N].PickList.Strings[I];
      end;
     tmp.Free
    end;
    N是表示dbGrid中的第几列
    这样会在dbGrid中你需要的列上建立一个类似于ListBox的东西可供选择
    下面是确定你当前在那一列
    procedure Tform1.dbGrid1KeyPress(Sender: TObject; var Key: Char);
    var gName:String;
    begin
          //确定当前所在地的字段名
      gName:=dbGrid1.Columns.Items[dbGrid1.Columns.Grid.SelectedIndex].FieldName;
      if key=#13 then{ 判断是按执行键}
      case key of
        #13 :xuanze(1);
        #40 :xuanze(2); 
     end;
    end;