cxGrid能否每个Cell都是一个按钮(button),这个按钮的Caption值就是数据表对应的行的字段值?其实我尝试过用cxgrid的CardView,如果每个Card都能显示成一个大按钮(点击效果要与Button一样)就是我最想要的效果,可是未能成功,请问各位大侠有没办法?cxgrid可以将列属性更改为Button,但是每个列(字段)的button的caption都是一样的,这个就恨郁闷了,我想每个Cell的button的caption都对应从数据库里面取值,可是也没成功,呵呵,请高手指点指点,多谢了

解决方案 »

  1.   

    动态建立按钮和根据记录值命名并不是什么难事,何必纠缠着用什么cxGrid的方法。
      

  2.   

    动态创建,然后在自画cell事件中,将按钮绑定到cell,setbound
      

  3.   

    cxGrid里面自动一个扫雷游戏,非常好的一个例子
      

  4.   

    to:D_Parent确实动态创建不是非常麻烦,但数据表内容非常多(有几千个Btn),还分很多层级。
    而且我觉得cxgrid应该有这个能力。to bdmh:请赏赐一段代码。to caowm:我看了那个扫雷游戏,包含了四五个单元,额外的代码太多了,也没认真去分析:)
    我想这样的东西应该几十行代码就Ok的,只是我没找到方法。
    还请多赐教。
      

  5.   

    首先要解决让所有的Cell都变成button吧,并且Button的Caption值来源于数据的对应值。请问有什么办法?
      

  6.   

    设置cxGridTableView的三个事件:OnCustomDrawCell,OnMouseDown,OnMouseUp,代码如下:procedure TMainForm.cxGrid1TableView1CustomDrawCell(
      Sender: TcxCustomGridTableView; ACanvas: TcxCanvas;
      AViewInfo: TcxGridTableDataCellViewInfo; var ADone: Boolean);
    var
      PaintRect: TRect;
      DrawFlags: Integer;
    begin
      PaintRect := AViewInfo.Bounds;  DrawFlags := DFCS_BUTTONPUSH or DFCS_ADJUSTRECT;  if AViewInfo = FViewInfo then
        DrawFlags := DrawFlags or DFCS_PUSHED;  DrawFrameControl(ACanvas.Canvas.Handle, PaintRect, DFC_BUTTON, DrawFlags);
      ACanvas.Canvas.Brush.Style := bsClear;
      ACanvas.Canvas.Font := Font;
      DrawText(ACanvas.Canvas.Handle, PChar(AViewInfo.Text), Length(AViewInfo.Text),
        PaintRect, DT_CENTER or DT_VCENTER);  ADone := True;
    end;procedure TMainForm.cxGrid1TableView1MouseDown(Sender: TObject;
      Button: TMouseButton; Shift: TShiftState; X, Y: Integer);
    begin
      FViewInfo := cxGrid1TableView1.GetHitTest(X, Y).ViewInfo;
      //FViewInfo是窗体字段
      if FViewInfo <> nil then
        FViewInfo.Invalidate;
    end;procedure TMainForm.cxGrid1TableView1MouseUp(Sender: TObject;
      Button: TMouseButton; Shift: TShiftState; X, Y: Integer);
    begin
      if FViewInfo <> nil then
        FViewInfo.Invalidate;
      FViewInfo := nil;
    end;