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

    技术2026-01-04  3

    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;varliwww,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);beginscrooo;end;

     

    最新回复(0)