1、 之前的程序中实现分组编译都是动态生成SQL语句,到服务器执行,然后显示结果。现在用PivotGridEh,太方便了。但是在测试过程中费了不少劲,自带的例子很正常。经过代码跟踪,发现是字段的Required应该设置为false即可。解决办法
要修改单元PivotGridEh中4个过程,分别是:
PRocedure MakeColsTable;
procedure MakeInverseGaussMatrix;
procedure MakeResultAggrTable;
procedure MakeRowsTable;
在数据集打开之后,设置字段属性Required := false;
如下:
ColsTable.Open;
for I := 0 to ColsTable.FieldCount - 1 do
ColsTable.Fields[i].Required := False;
其它几个过程参照上面代码修改。
2、 给PivotGridToolBoxEh设置排列样式
在基类TCustomPivotGridToolBoxEh 的Create事件中添加如下代码以创建右键菜单。
FBuJuPM := TPopupMenu.Create(Self);
FBuJuOne := TMenuItem.Create(FBuJuPM);
FBuJuOne.Tag := 0;
FBuJuOne.Caption := '上下排列';
FBuJuOne.RadioItem := True;
FBuJuOne.Checked := True;
FBuJuOne.OnClick := self.BuJuPMClick;
FBuJuPM.Items.Add(FBuJuOne);
FBuJuTwo := TMenuItem.Create(FBuJuPM);
FBuJuTwo.Tag := 1;
FBuJuTwo.Caption := '左右排列';
FBuJuTwo.RadioItem := True;
FBuJuTwo.OnClick := self.BuJuPMClick;
FBuJuPM.Items.Add(FBuJuTwo);
self.PopupMenu :=FBuJuPM;
右键菜单事件代码:
procedure TCustomPivotGridToolBoxEh.BuJuPMClick(Sender:TObject);
var
tmpMI: TMenuItem;
begin
tmpMI := TMenuItem(Sender);
if tmpMI.Tag = 0 then
begin
FSplitter.SetBounds(0,10,2,8);
FPivotDataPanel.Align := alBottom;
FSplitter.Align := alBottom;
FFieldListPanel.Align := alClient;
self.Width := self.Width div 2;
end
else
begin
FSplitter.SetBounds(0,10,2,10);
FPivotDataPanel.Align := alRight;//alBottom;
FSplitter.Align := alRight;//alBottom;
FFieldListPanel.Align := alClient;
self.Width := self.Width * 2;
end;
tmpMI.Checked :=True;
end;
3、 增加样式属性
property BuJuCols: Integer read FBuJuCols write SetBujuColsdefault 1;
1=默认的一列样式,2=两列显示,这样字段比较多时,可以显示更多的字段以方便操作。
事件代码如下:
procedureTCustomPivotGridToolBoxEh.SetBujuCols(const Value: Integer);
begin
FBuJuCols := Value;
if Value = 1 then
BuJuPMClick(FBuJuOne)
else
BuJuPMClick(FBuJuTwo);
end;新闻热点
疑难解答