示例#1
0
        /// <summary>
        /// 建立主体区域与标题区域之间数据引用关系(只在解析时调用)
        /// </summary>
        internal void LinkRegionSource()
        {
            BodyRegion body = GetRegion(RegionType.Body) as BodyRegion;

            if (body != null)
            {
                HeaderRegion header = GetRegion(RegionType.ColumnHeader) as ColumnHeaderRegion;
                if (header != null)
                {
                    header.HeaderBodyRelation.ReferecedSource = body.Source;
                }
                header = GetRegion(RegionType.RowHeader) as RowHeaderRegion;
                if (header != null)
                {
                    header.HeaderBodyRelation.ReferecedSource = body.Source;
                }
            }
        }
示例#2
0
        protected override List <OutputNode> CalulateNodes()
        {
            List <OutputNode>  nodes     = new List <OutputNode>();
            RowHeaderRegion    rowheader = _table.GetRegion(RegionType.RowHeader) as RowHeaderRegion;
            ColumnHeaderRegion colheader = _table.GetRegion(RegionType.ColumnHeader) as ColumnHeaderRegion;

            if (rowheader != null && colheader != null)
            {
                IEnumerable <OutputNode> rowHeaderNodes = rowheader.GetNodes().Where(p => p.Tag != null);
                IEnumerable <OutputNode> colHeaderNodes = colheader.GetNodes().Where(p => p.Tag != null);
                string refRowField = rowheader.HeaderBodyRelation.ReferecedField;
                string refColField = colheader.HeaderBodyRelation.ReferecedField;
                IEnumerable <OutputNode> tmpRowNodes = null;
                IEnumerable <OutputNode> tmpColNodes = null;
                foreach (DataRow row in Source.Table.Rows)
                {
                    tmpRowNodes = rowHeaderNodes.Where(p => p.Tag.Equals(row[refRowField]));
                    tmpColNodes = colHeaderNodes.Where(p => p.Tag.Equals(row[refColField]));
                    if (tmpColNodes.Count() > 0 && tmpRowNodes.Count() > 0)
                    {
                        nodes.Add(new OutputNode()
                        {
                            Content     = row[Field],
                            ColumnIndex = tmpRowNodes.First().ColumnIndex,
                            RowIndex    = tmpColNodes.First().RowIndex,
                            ColumnSpan  = 1,
                            RowSpan     = 1
                        });
                    }
                }

                if (!string.IsNullOrEmpty(EmptyFill))
                {
                    int rIndex = this.RowIndex;
                    int cIndex = this.ColumnIndex;
                    for (int i = 0; i < this.RowCount; i++)
                    {
                        for (int j = 0; j < this.ColumnCount; j++)
                        {
                            if (!nodes.Exists(p => p.IsInArea(rIndex + i, cIndex + j)))
                            {
                                nodes.Add(new OutputNode()
                                {
                                    Content     = EmptyFill,
                                    RowIndex    = rIndex + i,
                                    ColumnIndex = cIndex + j,
                                    RowSpan     = 1,
                                    ColumnSpan  = 1
                                });
                            }
                        }
                    }
                }
            }
            else
            {
                HeaderRegion             header      = colheader != null ? (HeaderRegion)colheader : rowheader;
                bool                     isRowHeader = header is RowHeaderRegion;
                IEnumerable <OutputNode> headerNodes = header.GetNodes().Where(p => p.Tag != null);
                DataColumnCollection     columns     = Source.Table.Columns;
                DataRowCollection        rows        = Source.Table.Rows;
                string                   refField    = header.HeaderBodyRelation.ReferecedField;
                if (!string.IsNullOrEmpty(refField))
                {
                    foreach (DataRow row in rows)
                    {
                        IEnumerable <OutputNode> tmpRowNodes = headerNodes.Where(p => p.Tag.Equals(row[refField]));
                        if (tmpRowNodes.Count() > 0)
                        {
                            OutputNode headerNode = tmpRowNodes.First();
                            for (int i = 0; i < columns.Count; i++)
                            {
                                if (/*columns[i].ColumnName != refField &&*/ row[i] != null && !string.IsNullOrEmpty(row[i].ToString()))
                                {
                                    nodes.Add(new OutputNode()
                                    {
                                        Content     = row[i],
                                        ColumnIndex = isRowHeader ? headerNode.ColumnIndex : ColumnIndex + i,
                                        RowIndex    = isRowHeader ? RowIndex + i : headerNode.RowIndex,
                                        ColumnSpan  = 1,
                                        RowSpan     = 1
                                    });
                                }
                            }
                        }
                    }
                }
                else
                {
                    for (int j = 0; j < columns.Count; j++)
                    {
                        IEnumerable <OutputNode> tmpRowNodes = headerNodes.Where(p => p.Tag.Equals(columns[j].ColumnName));
                        if (tmpRowNodes.Count() > 0)
                        {
                            OutputNode headerNode = tmpRowNodes.First();
                            for (int i = 0; i < rows.Count; i++)
                            {
                                if (rows[i][j] != null && !string.IsNullOrEmpty(rows[i][j].ToString()))
                                {
                                    nodes.Add(new OutputNode()
                                    {
                                        Content     = rows[i][j],
                                        ColumnIndex = isRowHeader ? headerNode.ColumnIndex : ColumnIndex + i,
                                        RowIndex    = isRowHeader ? RowIndex + i : headerNode.RowIndex,
                                        ColumnSpan  = 1,
                                        RowSpan     = 1
                                    });
                                }
                            }
                        }
                    }
                }
            }
            return(nodes);
        }