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; } }
/// <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); } }