我可以把任何TWINCONTROL放入到CXGRID中,能浏览能编辑

我可以把任何TWINCONTROL放入到CXGRID中,能浏览能编辑

下面这段英文是我在DEVEXPRESS官方论坛上发表的:

I  can put any twincontrol into a cell of cxgrid which can view and can edit.

for example,cxgrid1 column color is a string field,it is 'True' or 'False' or NULL or '',I put a checkbox and dbcheckbox into the cell of it .it is for example,the checkbox and dbcheckbox can be any twincontrol.

procedure TForm1.tvcxgrid1CustomDrawCell(
  Sender: TcxCustomGridTableView; ACanvas: TcxCanvas;
  AViewInfo: TcxGridTableDataCellViewInfo; var ADone: Boolean);
  begin
 if  (TcxGridItemDBDataBinding(AViewInfo.Item.DataBinding).FieldName='COLOR')  then
 begin
            CheckBox1.Left:=-100;
      CheckBox1.Visible:=true;

     if  vartostr(AViewInfo.DisplayValue)='' then
     CheckBox1.Checked:=false
     else  if vartostr(AViewInfo.DisplayValue)='False' then
     CheckBox1.Checked:=false
     else
     CheckBox1.Checked:=true;

     CheckBox1.Visible:=true;
   CheckBox1.PaintTo(AViewInfo.GridView.Site.Canvas.Canvas,AViewInfo.Bounds.Left+5,AViewInfo.Bounds.Top+4);

   ADone:=true;
      
 end;

/////////////////////////////////////

procedure TForm1.scrooo;
var
liwww,GGG:integer;
ACellViewInfo:tcxgridtabledatacellviewinfo;
  begin

       GGG:=0;
      for liwww:=0 to  tcxcustomgridtableviewinfo(cxgrid1.ActiveView.ViewInfo).RecordsViewInfo.Count-1 do
      begin
      if
      tcxcustomgridtableviewinfo(cxgrid1.ActiveView.ViewInfo).RecordsViewInfo.Items[liwww].Focused then
      begin
       GGG:=liwww;
       break;
      end;
      end;
      if GGG=0 then
      begin
      DBCheckBox1.Left:=-1000;
      DBCheckBox1.Top:=-1000;
      DBCheckBox1.Height:=0;
      DBCheckBox1.Visible:=false;
      exit;
      end;


     ACellViewInfo:= tcxcustomgridtableviewinfo(cxgrid1.ActiveView.ViewInfo).RecordsViewInfo.Items[liwww].GetCellViewInfoByItem(tvcxgrid1COLOR);

 

          if DBCheckBox1.Top>=ACellViewInfo.Bounds.Top+SOURcegrid.Top+ACellViewInfo.GridView.Site.Top+4  then
          begin
      DBCheckBox1.Top :=min(ACellViewInfo.Bounds.Top+SOURcegrid.Top+ACellViewInfo.GridView.Site.Top+4,cxgrid1.Top+ACellViewInfo.GridView.Site.Top+ACellViewInfo.GridView.Site.Height);
          DBCheckBox1.Height := min(ACellViewInfo.Bounds.Bottom,ACellViewInfo.GridView.Site.Height) - ACellViewInfo.Bounds.Top-8;

          end
          else
          begin
          DBCheckBox1.Height := min(ACellViewInfo.Bounds.Bottom,ACellViewInfo.GridView.Site.Height) - ACellViewInfo.Bounds.Top-8;
         DBCheckBox1.Top :=min(ACellViewInfo.Bounds.Top+SOURcegrid.Top+ACellViewInfo.GridView.Site.Top+4,cxgrid1.Top+ACellViewInfo.GridView.Site.Top+ACellViewInfo.GridView.Site.Height);

      end;
      DBCheckBox1.Left := ACellViewInfo.Bounds.Left+5 ;

      DBCheckBox1.Width := ACellViewInfo.Bounds.Right-ACellViewInfo.Bounds.Left-10;

      DBCheckBox1.Visible := True;
end;

end;
////////////////////////////////////////////////////

procedure TForm1.tvcxgrid1TopRecordIndexChanged(
  Sender: TObject);
begin
    scrooo;
end;

////////////////////////////////////////////////

procedure TForm1.tvcxgrid1FocusedRecordChanged(
  Sender: TcxCustomGridTableView; APrevFocusedRecord,
  AFocusedRecord: TcxCustomGridRecord;
  ANewItemRecordFocusingChanged: Boolean);
begin
scrooo;
end;

你可能感兴趣的:(string,null)