我可以把任何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;