procedure TFPD_LOADJOBCARD_FORM.DataGrid2Edited(Sender: TObject; Node: TTreeListNode);
var changexz:string;
begin
//dialogs.ShowMessage(datagrid1.FocusedField.FieldName);
if (datagrid1.FocusedField.FieldName='XZ') then
begin
changexz:=datasetfpddetail.FieldByname('xz').AsString;
if (datasetfpddetail.FieldByname('xz').AsBoolean=false) and (changexz<>orgxz) then
begin
selpn:=selpn-datasetfpddetail.FieldByName('pn').AsInteger;
selkg:=selkg-datasetfpddetail.FieldByName('kg').Asfloat;
end
else
if (datasetfpddetail.FieldByname('xz').AsBoolean=true) and (changexz<>orgxz) then
begin
selpn:=selpn+datasetfpddetail.FieldByName('pn').AsInteger;
selkg:=selkg+datasetfpddetail.FieldByName('kg').Asfloat;
end;
ltext.Caption:=' 已选'+sysUtils.inttostr(selpn)+'匹,'+sysUtils.floattostr(selkg)+'KG';
datasetfpddetail.edit;
datasetfpddetail.post;
end ;
end;
procedure TFPD_LOADJOBCARD_FORM.DataGrid2Editing(Sender: TObject; Node: TTreeListNode; var Allow: Boolean);
begin
if not datasetfpddetail.IsEmpty then
begin
orgxz:=datasetfpddetail.FieldByname('xz').AsString;
dialogs.ShowMessage('orgxz');
end;
end;
楼主可否考虑不使用checkbox,因为现在没有那个事件是在改变grid里面的checkbox的状态后立即触发,都是当焦点离开的时候触发。
楼主可否考虑就把这个checkbox字段当成一个标记字段比如就存储0和1 ,然后在字段的onbuttonclick事件中首先改变标记位的状态,然后在进行统计输出,比如:
unit MainForm;
procedure TMainForm.FIELDClick(Sender: TObject);
begin
if datasetbroker1.dataset.state <> tdatasetstate.dsEdit then
datasetbroker1.dataset.edit;
datasetbroker1.dataset.Fieldbyname('zd4').AsBoolean := not datasetbroker1.dataset.Fieldbyname('zd4').AsBoolean;
//IF datasetbroker1.dataset.Fieldbyname('zd4').AsBoolean THEN
dialogs.ShowMessage(SELF.CAPTION); //然后是具体的统计过程
end;
procedure TMainForm.BizFormCreate(Sender: TObject);
begin
TSqlDataSet(DataSetBroker1.DataSet).BizFieldByName('ZD4').OnButtonClick := FIELDClick;
end;
在功能窗体中使用事件赋值的方法事件字段的点击事件。