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