其他分享
首页 > 其他分享> > delphi cxgrid里面的虚拟字段的checkbox可以多选并抓取选定的数据字段

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;

 

标签:checkbox,tv,delphi,cxgrid,DataController,grdOrder,Filter,过滤,scripno
来源: https://www.cnblogs.com/linjincheng/p/12366659.html