示例#1
0
            public void SubReport <TSubReport>(params Action <TSubReport>[] initializers)
                where TSubReport : Report, IEntityReport <TSubReportModel>, new()
            {
                Dictionary <string, Func <object, Report> > subReportDelegates;
                var report = _subReport.Report;

                if (!ReportDelegates.TryGetValue(report, out subReportDelegates))
                {
                    ReportDelegates.Add(report, subReportDelegates = new Dictionary <string, Func <object, Report> >());
                }

                if (!subReportDelegates.ContainsKey(_subReport.Name))
                {
                    subReportDelegates.Add(_subReport.Name, o =>
                    {
                        var subreport = new TSubReport
                        {
                            Name       = string.Format(_subReport.Name),
                            DataSource = o == null ? default(TSubReportModel) : _source((TReportModel)o)
                        };
                        if (initializers != null)
                        {
                            initializers.ToList().ForEach(i => i(subreport));
                        }
                        return(subreport);
                    });
                }

                _subReport.Bindings.Add(new Binding("ReportSource", "=EntityReportExtensions.GetSubReportSource(ReportItem.ItemDefinition, ReportItem.DataObject.RawData)"));
            }
示例#2
0
        public static ReportSource GetSubReportSource(SubReport subReport, object model)
        {
            InstanceReportSource reportSource = null;
            Dictionary <string, Func <object, Report> > subReportDelegates;
            var report = subReport.Report;

            if (ReportDelegates.TryGetValue(report, out subReportDelegates))
            {
                Func <object, Report> subReportDelegate;
                if (subReportDelegates.TryGetValue(subReport.Name, out subReportDelegate))
                {
                    subReportDelegates.Remove(subReport.Name);
                    if (!subReportDelegates.Any())
                    {
                        ReportDelegates.Remove(report);
                    }

                    var reportDocument = subReportDelegate(model);
                    reportSource = new InstanceReportSource
                    {
                        ReportDocument = reportDocument
                    };
                }
            }

            return(reportSource);
        }