在 cxGrid 中显示或隐藏已实现页脚 (SUM) 的列(在代码中)时,它不会刷新其值。
如何刷新代码中的页脚?
使用这个:
procedure TForm1.cxGrid2DBTableView1CustomDrawFooterCell(
Sender: TcxGridTableView; ACanvas: TcxCanvas;
AViewInfo: TcxGridColumnHeaderViewInfo; var ADone: Boolean);
begin
cxgrid2DBTableView1.DataController.Summary.Recalculate;
end;
...使表单上的所有其他 devexpress 组件无法正确重绘。看不到任何东西....
编辑:要显示或隐藏我使用的网格中的字段:
procedure TForm1.cxCheckBox1Click(Sender: TObject);
var
C:TcxGridDBColumn;
begin
C := cxGrid1DBTableView1.GetColumnByFieldName('PP');
if Assigned(C) then C.Visible := not C.Visible;
begin
absquery2.Edit;
absquery2.FieldByName('PP').AsCurrency := 15 * ABSQuery2.FieldByName('days').asInteger;
if C.Visible then begin
ABSQuery2.FieldByName('total').asCurrency := (ABSQuery2.FieldByName('total').AsCurrency) + (ABSQuery2.FieldByName('PP').AsCurrency) ;
end else begin
ABSQuery2.FieldByName('total').asCurrency := (ABSQuery2.FieldByName('total').AsCurrency) - (ABSQuery2.FieldByName('PP').AsCurrency);
ABSQuery2.Post;
ABSQuery2.Refresh;
end;
end;
end;
在计算查询的字段时,我有:
procedure TForm1.ABSQuery2CalcFields(DataSet: TDataSet);
begin
case cxradiogroup1.ItemIndex of
0: begin
absquery2.FieldByName('tt').value := 1.30;
if (absquery2.FieldByName('room_type').asstring = 'SGL') then begin
absquery2.FieldByName('TTS').value := absquery2.FieldByName('days').value * 1.30;
absquery2.FieldByName('OSEB').value :='1';
end else begin
absquery2.FieldByName('TTS').value := (absquery2.FieldByName('days').value) * (absquery2.FieldByName('tt').value * 2);
absquery2.FieldByName('OSEB').value :='2';
end;
absquery2.FieldByName('total').value := absquery2.FieldByName('days').value * absquery2.FieldByName('rate_price').value + absquery2.FieldByName('TTS').value;
absquery2.FieldByName('POND').value := absquery2.FieldByName('RATE_PRICE').value / absquery2.FieldByName('OSEB').value;
end;
.....
这一切似乎都在工作,除了不接受网格总值变化的页脚。在我看来,网格页脚只接受 oncalculate fields 事件而不显示或隐藏该字段。我怎样才能使这项工作?