报表详细数据面板(鼠标悬浮触发)
使用组件TdxDockSite,鼠标悬浮时弹出一个框,可在此显示所需详情信息。
编写组件事件OnShowContol,因为该组件特殊性,在其方法中调用DataEntity.FieldByName(‘TEACHER_ID’).AsString时,当结果为空时(不执行查询时触发事件),不会报错且持续执行。所以只好使用全局变量,并在报表改变聚焦的事件中赋值。
聚焦改变事件:
procedure TfrmCgClientQDQry.PgGrid1DBTableView1FocusedRecordChanged(
Sender: TcxCustomGridTableView; APrevFocusedRecord,
AFocusedRecord: TcxCustomGridRecord; ANewItemRecordFocusingChanged: Boolean);
begin
inherited;
if WpPanel.Visible then
ShowDetailPanel;
//teacherID 需要定义为该类的全局变量
teacherID :=DataEntity.FieldByName('TEACHER_ID').AsString;
end;
OnShowControl事件:
procedure TfrmCgClientQDQry.WpDockSiteShowControl(Sender: TdxDockSite;
AControl: TdxCustomDockControl);
begin
inherited;
ShowDetailPanel;
end;
ShowDetailPanel方法:
procedure TfrmCgClientQDQry.ShowDetailPanel;
var
i, ATop: Integer;
AControl: TWinControl;
AControlType: TPgFieldControlType;
sSql:string;
begin
inherited;
scBox.LockScrollBars;
try
ReportEntity.Close;
sSql := 'SELECT TEACHER_ID,TEACHER_NAME,ENTRY_TIME,IS_LEAVE,REMARK FROM TB_CG_TEACHER WHERE TEACHER_ID = :TEACHER_ID';
ReportEntity.CommandText :=sSql;
ReportEntity.Params.ParamByName('TEACHER_ID').AsString := teacherID;
ReportEntity.Open;
TPgLib.ClearFieldControl(scBox);
ATop := 1;
for i := 0 to dsSerch.DataSet.FieldCount - 1 do
begin
if not dsSerch.DataSet.Fields[i].IsNull then
begin
AControlType := TPgFieldControlType.PgAuto;
if SameText(dsSerch.DataSet.Fields[i].FieldName, 'IS_LEAVE') then
AControlType := TPgFieldControlType.PgCheckBox;
AControl := TPgLib.CreateFieldControl(scBox, dsSerch, dsSerch.DataSet.Fields[i], AControlType);
AControl.Top := ATop;
AControl.Left := 80;
AControl.Visible := True;
ATop := ATop + AControl.Height + 2;
AControl.Width := 120;
end;
end;
finally
scBox.UnlockScrollBars;
end;
end;