delphi cxgrid里面的虚拟字段的checkbox可以多选并抓取选定的数据字段

Posted linjincheng

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了delphi cxgrid里面的虚拟字段的checkbox可以多选并抓取选定的数据字段相关的知识,希望对你有一定的参考价值。

cxgrid里面的虚拟字段的checkbox可以多选需要设置:SmartRefresh:=True;KeyFieldNames=主键字段

技术图片

 

多选checkbox以后循环抓取相应的字段:

var
ordersn:string;
sSQL,Fsql,scripno: string;
rptName: string;
ch: Boolean;
i, j: Integer;
flrft : Boolean; //过滤状态标志
artFlt : Boolean; //代码引起过滤标志
mStream : TStream; //存储客户设置过滤条件的内存流
begin
inherited;
ordersn:=adsMaster.fieldbyname(‘scripno‘).asstring;
try
mStream:=TMemoryStream.Create;
scripno:=‘‘;
artFlt:=true;//设置将要改变过滤的标志
mStream.Position:=0;//流指针指向开始位
tv_grdOrder.DataController.Filter.Root.Criteria.SaveToStream(mStream);//将过滤状态存入流
flrft:=tv_grdOrder.DataController.Filter.Active;//保存过滤状态是否激活
tv_grdOrder.DataController.Filter.Root.Clear;//清除原有过滤设置
tv_grdOrder.DataController.Filter.Root.AddItem(tv_grdOrder.Columns[0],foEqual,‘True‘,‘√ ‘);//以0列为真过滤
tv_grdOrder.DataController.Filter.Active:=True;//激活过滤
ch:=tv_grdOrder.DataController.FilteredRecordCount>0;//过滤后的记录数
if ch then //过滤后有记录数
begin
for j:=0 to tv_grdOrder.ViewData.RowCount-1 do//以行数循环
begin
adsmaster.RecNo:=tv_grdOrder.ViewData.Rows[j].RecordIndex+1;
if(scripno<>‘‘)then
scripno:=scripno+‘,‘;
scripno:=scripno+ QuotedStr(adsmaster.fieldbyname(‘scripno‘).AsString);
end;
end;
//恢复客户过滤状态:
tv_grdOrder.DataController.Filter.Root.Clear;//清除原有过滤设置
mStream.Position:=0;
tv_grdOrder.DataController.Filter.Root.Criteria.LoadFromStream(mStream);
tv_grdOrder.DataController.Filter.Active:=flrft;
artFlt:=false;
finally

end;
Doopendata();
adsMaster.Locate(‘scripno‘, ordersn, []);
if scripno=‘‘ then scripno:=QuotedStr(adsmaster.fieldbyname(‘scripno‘).AsString);

end;

 

以上是关于delphi cxgrid里面的虚拟字段的checkbox可以多选并抓取选定的数据字段的主要内容,如果未能解决你的问题,请参考以下文章

Delphi CxGrid 汇总

Delphi CxGrid 汇总

跪求delphi 中cxgrid控件的用法,越详细越好

求delphi 高手救命...cxgrid 问题

delphi下的cxgrid的列值转换问题

delphi cxgrid 控件如可实现展开一行记录看其明细