报表详细数据面板(鼠标悬浮触发)
使用组件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;

版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容,请联系我们,一经查实,本站将立刻删除。
如需转载请保留出处:https://51itzy.com/kjqy/43236.html