1.可以让DBGrid的一个Cell里出现的是一个CheckBox或Button吗?  
   我是想实现点一下某个Cell,用这个Cell里CheckBox表明选择了这一行  
                     点一下另一个Cell,用这个Cell里的Button触发打开另一个窗口
2.把DBGrid的Option的dgRowSelect设为True,dgMutiSelect设为True后,选择的一行,怎么实现:点某一行中任一个Cell,这一行如果已是选择状态则变为未选择,未选择则变为已选择,“而其它行的选择状态不变”

解决方案 »

  1.   

    你这些要求如果用DBGRID做的话,可能比较麻烦,不如你上网上当一个infopower3000下来吧,它其中有一个twwDBGrid的控件,特别NB,感觉不错!
      

  2.   


    Cell中显示的是控件这个可能是比较麻烦,有没有懂的,可以请教一下吗?那我的第2个问题呢?
      

  3.   

    1) 你可以自己画一个框和对勾表示选中,不过要通过1个字段Y或N来控制,也可以用其他的。 
    在DBGrid中布尔形数据显示为:为真时打一个"勾",为假时空白
    附代码: dbgPPO : dbgrid , adoqryPPO : dataset
    procedure TSPChargeForm.dbgPPODrawColumnCell(Sender: TObject;
      const Rect: TRect; DataCol: Integer; Column: TColumn;
      State: TGridDrawState);
    var
      left :integer;
    begin
      if Column=dbgPPO.Columns[0] then
      begin
        left :=Round((Rect.Right-Rect.Left-10)/2);    dbgPPO.Canvas.Brush.Color :=clWhite;    //去掉阴影
        dbgPPO.Canvas.FillRect(Rect);    dbgPPO.Canvas.Pen.Color :=clblue;        //clTeal
        dbgPPO.Canvas.Pen.Width :=1;    dbgPPO.Canvas.MoveTo(Rect.Left+Left,Rect.Top+3);
        dbgPPO.Canvas.LineTo(Rect.Left+Left+10,Rect.Top+3);
        dbgPPO.Canvas.LineTo(Rect.Left+Left+10,Rect.Top+13);
        dbgPPO.Canvas.LineTo(Rect.Left+Left,Rect.Top+13);
        dbgPPO.Canvas.LineTo(Rect.Left+Left,Rect.Top+3);    if adoqryPPO.FieldByName('ID').AsString='Y' then
        begin
          dbgPPO.Canvas.MoveTo(Rect.Left+Left,Rect.Top+6);
          dbgPPO.Canvas.LineTo(Rect.Left+Left+4,Rect.Top+11);
          dbgPPO.Canvas.LineTo(Rect.Left+Left+12,Rect.Top+1);
        end;
      end;
    end;
    2)在on cell click事件中改当前记录的布尔形数据的值,参见1)。 然后画。 
    3) 也可以直接用dxdbGrid来实现。 column类型中有CHECKBOX 。
      

  4.   

    thanks all first!那这样的话,如果我要的是button怎么做了?我第二个问题中显示已选择不是想通过一个column的值的显示,而是要通过把一行变为蓝来显示,怎么做?
      

  5.   

    1:好象要在Cell中显示控件是比较难的。不过我记和原来的VB中也有一种变通方法。那就是你可以临时生成一个TButton的对象,然后通过程序控制它的visible和top left等属性就可以完成你要的功能了。当然它的topmost最好还是打开了。要不你就看不到了。
    2:我觉得好象如果打开了你要的multi应该就是这样的。具体没有试过
      

  6.   

    dbgrid的option中dgMutiSelect = True,dgRowSelect = True后,是点一行选一行,点另一行的话,原来选的一行就变成未选择了,我想要让原来已选择的还是已选择状态,而点了一行已选择的则只是把这行变为未选择
      

  7.   

    需要BUTTON的话,直接用dxdbGrid来实现。 column类型中有CHECKBOX 、BUTTON。 还有CLICK响应事件。
      

  8.   

    用Express哪一套控件中有一个DxdbGrid,很好用
      

  9.   

    用DXDBGRID可以实现你讲的全部功能
      

  10.   

    那位可以告诉我在拿下在InfoPower