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;新聞熱點
疑難解答