在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字段事件而不显示或隐藏字段。我怎样才能使这个工作?