Esempio n. 1
0
        internal void LoadForms(RptItem p_item, CellRange p_range)
        {
            if (p_item == null || p_range == null)
            {
                return;
            }

            _curItem = p_item;
            if (p_item is RptText txt)
            {
                LoadCellForm(txt);
                _tabItem.Content    = null;
                _tabCell.IsSelected = true;
                return;
            }

            if (p_item is RptTable tbl)
            {
                txt = tbl.GetText(p_range.Row, p_range.Column);
                LoadCellForm(txt);

                if (_fmTbl == null)
                {
                    _fmTbl = new TableForm(Info);
                }
                TblRangeType tblRng = tbl.GetRangeType(p_range.Row, p_range.Column);
                _fmTbl.LoadItem(txt, tblRng == TblRangeType.Group);
                _tabItem.Content = _fmTbl;
                return;
            }

            if (p_item is RptMatrix mtx)
            {
                txt = mtx.GetText(p_range.Row, p_range.Column);
                LoadCellForm(txt);

                MtxRangeType mtxRng = mtx.GetRangeType(p_range.Row, p_range.Column);
                switch (mtxRng)
                {
                case MtxRangeType.Level:
                    if (_fmMtxLevel == null)
                    {
                        _fmMtxLevel = new MatrixLevelForm(Info);
                    }
                    _fmMtxLevel.LoadItem(txt);
                    _tabItem.Content = _fmMtxLevel;
                    break;

                case MtxRangeType.Subtotal:
                    if (_fmMtxSubtotal == null)
                    {
                        _fmMtxSubtotal = new MatrixSubtotalForm(Info);
                    }
                    _fmMtxSubtotal.LoadItem(txt);
                    _tabItem.Content = _fmMtxSubtotal;
                    break;

                case MtxRangeType.Subtitle:
                    if (_fmMtxSubtitle == null)
                    {
                        _fmMtxSubtitle = new MatrixSubtitleForm(Info);
                    }
                    _fmMtxSubtitle.LoadItem(txt);
                    _tabItem.Content = _fmMtxSubtitle;
                    break;

                default:
                    if (_fmMatrix == null)
                    {
                        _fmMatrix = new MatrixForm {
                            Info = Info
                        }
                    }
                    ;
                    _fmMatrix.LoadItem(mtx);
                    _tabItem.Content = _fmMatrix;
                    break;
                }
                return;
            }

            if (p_item is RptChart chart)
            {
                if (_fmChart == null)
                {
                    _fmChart = new ChartForm(Info);
                }
                _fmChart.LoadItem(chart);
                _tabItem.Content    = _fmChart;
                _tabCell.Content    = null;
                _tabItem.IsSelected = true;
            }
        }
Esempio n. 2
0
        /// <summary>
        /// 获取内部指定位置的文本
        /// </summary>
        /// <param name="p_row"></param>
        /// <param name="p_col"></param>
        /// <returns></returns>
        public RptText GetText(int p_row, int p_col)
        {
            MtxRangeType mtxType = GetRangeType(p_row, p_col);

            switch (mtxType)
            {
            case MtxRangeType.Corner:
            {
                return(Corner.Item);
            }

            case MtxRangeType.Level:
            {
                foreach (RptMtxLevel level in RowHeader.Levels)
                {
                    if ((level.Row <= p_row && p_row < level.Row + level.RowSpan) &&
                        level.Col <= p_col && p_col < level.Col + level.ColSpan)
                    {
                        return(level.Item);
                    }
                }
                foreach (RptMtxLevel level in ColHeader.Levels)
                {
                    if ((level.Row <= p_row && p_row < level.Row + level.RowSpan) &&
                        level.Col <= p_col && p_col < level.Col + level.ColSpan)
                    {
                        return(level.Item);
                    }
                }
                return(null);
            }

            case MtxRangeType.Subtotal:
            {
                foreach (RptMtxLevel level in RowHeader.Levels)
                {
                    RptMtxSubtotal total = GetSubtotal(level.SubTotals.ToList(), p_row, p_col);
                    if (total != null)
                    {
                        return(total.Item);
                    }
                }
                foreach (RptMtxLevel level in ColHeader.Levels)
                {
                    RptMtxSubtotal total = GetSubtotal(level.SubTotals.ToList(), p_row, p_col);
                    if (total != null)
                    {
                        return(total.Item);
                    }
                }
                return(null);
            }

            case MtxRangeType.Subtitle:
            {
                foreach (RptMtxLevel level in RowHeader.Levels)
                {
                    RptMtxSubtitle title = GetSubtitle(level.SubTitles.ToList(), p_row, p_col);
                    if (title != null)
                    {
                        return(title.Item);
                    }
                }
                foreach (RptMtxLevel level in ColHeader.Levels)
                {
                    RptMtxSubtitle title = GetSubtitle(level.SubTitles.ToList(), p_row, p_col);
                    if (title != null)
                    {
                        return(title.Item);
                    }
                }
                return(null);
            }

            case MtxRangeType.Body:
            {
                return(Rows[p_row - Row - Corner.RowSpan].Cells[p_col - Col - Corner.ColSpan]);
            }

            case MtxRangeType.HeaderEmpty:
            {
                return(null);
            }

            default:
                return(null);
            }
        }