예제 #1
0
        public IEnumerable <DocumentModel.Row> Generate()
        {
            this.Databind();
            List <DocumentModel.Row> rows = new List <DocumentModel.Row>();

            DataSourceBrowser browser;

            if (!string.IsNullOrWhiteSpace(this.DataMember))
            {
                browser = new ObjectDataSourceBrowser((this.DataSource ?? new ObjectDataSourceBrowser(DataBindingContext.Peek())).GetValue(this.DataMember));
            }
            else
            {
                browser = this.DataSource;
            }

            if (browser != null)
            {
                while (browser.MoveNext())
                {
                    DataBindingContext.Push(browser.Current);

                    if (this.Header != null)
                    {
                        rows.AddRange(this.Header.Generate());
                    }

                    if (this.SubSection != null)
                    {
                        rows.AddRange(this.SubSection.Generate());
                    }

                    if (this.Footer != null)
                    {
                        rows.AddRange(this.Footer.Generate());
                    }
                }

                DataBindingContext.Pop();
            }
            else
            {
                if (this.Header != null)
                {
                    rows.AddRange(this.Header.Generate());
                }

                if (this.SubSection != null)
                {
                    rows.AddRange(this.SubSection.Generate());
                }

                if (this.Footer != null)
                {
                    rows.AddRange(this.Footer.Generate());
                }
            }

            return(rows);
        }
        public Document Generate()
        {
            List <DocumentModel.Sheet> sheets = new List <DocumentModel.Sheet>();

            if (this.DataSource != null)
            {
                DataSourceBrowser browser;
                if (!string.IsNullOrWhiteSpace(this.DataMember))
                {
                    browser = new ObjectDataSourceBrowser(this.DataSource, this.DataMember);
                    while (browser.MoveNext())
                    {
                        DataBindingContext.Push(browser.Current);
                        sheets.AddRange(this.Sheets.Select(s => s.Generate()));
                        DataBindingContext.Pop();
                    }
                }
                else
                {
                    while (this.DataSource.MoveNext())
                    {
                        DataBindingContext.Push(this.DataSource.Current);
                        sheets.AddRange(this.Sheets.Select(s => s.Generate()));
                        DataBindingContext.Pop();
                    }
                }
            }
            else
            {
                sheets.AddRange(this.Sheets.Select(s => s.Generate()));
            }

            Document doc = new Document(sheets);

            return(doc);
        }