コード例 #1
0
ファイル: RptMatrix.cs プロジェクト: Daoting/dt
        protected override void ReadChildXml(XmlReader p_reader)
        {
            switch (p_reader.Name)
            {
            case "Corner":
                Corner = new RptMtxCorner(this);
                Corner.ReadXml(p_reader);
                break;

            case "RowHeader":
                RowHeader = new RptMtxRowHeader(this);
                RowHeader.ReadXml(p_reader);
                break;

            case "ColHeader":
                ColHeader = new RptMtxColHeader(this);
                ColHeader.ReadXml(p_reader);
                break;

            case "MRow":
                if (Rows == null)
                {
                    Rows = new List <RptMtxRow>();
                }
                RptMtxRow row = new RptMtxRow(this);
                row.ReadXml(p_reader);
                Rows.Add(row);
                break;

            default:
                break;
            }
        }
コード例 #2
0
ファイル: RptMtxSubTitleCmd.cs プロジェクト: Daoting/dt
        /// <summary>
        /// 为当前行添加新列
        /// </summary>
        /// <param name="p_matrix">矩阵</param>
        /// <param name="p_row">所属行</param>
        /// <param name="p_index">插入位置</param>
        /// <returns>新增列的集合</returns>
        IEnumerable <RptText> InsertNewCell(RptMatrix p_matrix, RptMtxRow p_row, int p_index)
        {
            RptText text = new RptText(p_row);

            text.Val = string.Format("cell{0}", p_matrix.GetCellsCount().ToString());
            p_row.Cells.Insert(p_index, text);
            yield return(text);
        }
コード例 #3
0
ファイル: RptMtxRow.cs プロジェクト: Daoting/dt
        /// <summary>
        /// 克隆行
        /// </summary>
        /// <param name="p_mat"></param>
        /// <returns></returns>
        public RptMtxRow Clone(RptMatrix p_mat)
        {
            RptMtxRow row = new RptMtxRow(p_mat);

            foreach (RptText txt in Cells)
            {
                RptText newtxt = new RptText(row);
                newtxt.Data.Copy(txt.Data);
                row.Cells.Add(newtxt);
            }
            return(row);
        }
コード例 #4
0
ファイル: RptMtxSubTitleCmd.cs プロジェクト: Daoting/dt
        /// <summary>
        /// 添加新行
        /// </summary>
        /// <param name="p_matrix">矩阵</param>
        /// <param name="p_index">插入位置</param>
        /// <returns>新增行</returns>
        RptMtxRow InsertNewRow(RptMatrix p_matrix, int p_index)
        {
            RptMtxRow row      = new RptMtxRow(p_matrix);
            int       rowCount = p_matrix.GetCellsCount();

            for (int i = 0; i < p_matrix.Rows[0].Cells.Count; i++)
            {
                RptText text = new RptText(row);
                text.Val = string.Format("cell{0}", (rowCount + i).ToString());
                row.Cells.Add(text);
            }
            p_matrix.Rows.Insert(p_index, row);
            return(row);
        }
コード例 #5
0
ファイル: RptMatrix.cs プロジェクト: Daoting/dt
        /// <summary>
        /// 根据行号、列号获取Cell
        /// </summary>
        /// <param name="p_row"></param>
        /// <param name="p_col"></param>
        /// <returns></returns>
        RptText GetCellByRowCol(int p_row, int p_col)
        {
            RptMtxRow rptRow = (from c in Rows
                                where c.Row == p_row
                                select c).FirstOrDefault();

            if (rptRow != null)
            {
                return((from c in rptRow.Cells
                        where c.Col == p_col
                        select c).FirstOrDefault());
            }
            return(null);
        }
コード例 #6
0
ファイル: InsertMatrixCmd.cs プロジェクト: Daoting/dt
        public override object Execute(object p_args)
        {
            InsertCmdArgs args = (InsertCmdArgs)p_args;
            RptMatrix     mat  = args.RptItem as RptMatrix;
            RptPart       con  = mat.Part;

            // 是通过重做来执行的,直接返回对象。
            if (mat.RowHeader != null || mat.ColHeader != null)
            {
                con.Items.Add(mat);
                return(mat);
            }

            CellRange range = args.CellRange;

            mat.Row     = range.Row;
            mat.Col     = range.Column;
            mat.RowSpan = range.RowCount;
            mat.ColSpan = range.ColumnCount;
            mat.Corner  = new RptMtxCorner(mat);
            RptMtxRowHeader rowheader = new RptMtxRowHeader(mat);

            mat.RowHeader = rowheader;
            RptMtxLevel level2 = new RptMtxLevel(rowheader);

            level2.Item.Val = "level2";
            rowheader.Levels.Add(level2);

            RptMtxColHeader colheader = new RptMtxColHeader(mat);

            mat.ColHeader = colheader;
            RptMtxLevel level1 = new RptMtxLevel(colheader);

            level1.Item.Val = "level1";
            colheader.Levels.Add(level1);

            RptMtxRow row = new RptMtxRow(mat);

            row.Cells.Add(new RptText(row)
            {
                Val = "cell0"
            });
            mat.Rows.Add(row);
            con.Items.Add(mat);
            return(mat);
        }
コード例 #7
0
        /// <summary>
        /// 加载矩阵
        /// </summary>
        /// <param name="p_mat"></param>
        void LoadMatrix(RptMatrix p_mat)
        {
            //行头位置信息
            int rowHeaderCol     = p_mat.RowHeader.Col;
            int rowHeaderRowSpan = p_mat.RowHeader.RowSpan;
            int rowHeaderColSpan = p_mat.RowHeader.ColSpan;
            //列头位置信息
            int colHeaderRow     = p_mat.ColHeader.Row;
            int colHeaderRowSpan = p_mat.ColHeader.RowSpan;
            int colHeaderColSpan = p_mat.ColHeader.ColSpan;

            if (!p_mat.HideColHeader && !p_mat.HideRowHeader)
            {
                //1、矩阵角
                RptText cor = p_mat.Corner.Item;
                cor.Row     = p_mat.Corner.Row;
                cor.Col     = p_mat.Corner.Col;
                cor.RowSpan = colHeaderRowSpan;
                cor.ColSpan = rowHeaderColSpan;
                if (string.IsNullOrEmpty(cor.Val))
                {
                    cor.Val = "矩阵角";
                }
                LoadText(cor);
            }

            if (!p_mat.HideRowHeader)
            {
                //2、行头
                if (p_mat.RowHeader != null)
                {
                    LoadMtxLevel(p_mat.RowHeader.Levels);
                }
                //更新矩阵所占列数
                p_mat.ColSpan = rowHeaderColSpan + colHeaderColSpan;
            }

            if (!p_mat.HideColHeader)
            {
                //3、列头
                if (p_mat.ColHeader != null)
                {
                    LoadMtxLevel(p_mat.ColHeader.Levels);
                }
                //更新矩阵所占行数
                p_mat.RowSpan = colHeaderRowSpan + rowHeaderRowSpan;
            }

            //4、数据行
            if (p_mat.Rows != null)
            {
                int sRow = colHeaderRow + (p_mat.HideColHeader ? 0 : colHeaderRowSpan);
                int sCol = rowHeaderCol + (p_mat.HideRowHeader ? 0 : rowHeaderColSpan);
                for (int i = 0; i < p_mat.Rows.Count; i++)
                {
                    RptMtxRow row = p_mat.Rows[i];
                    for (int j = 0; j < row.Cells.Count; j++)
                    {
                        RptText cell = row.Cells[j];
                        cell.Row = sRow + i;
                        cell.Col = sCol + j;
                        LoadText(cell);
                    }
                }
            }
        }