public DPrintItemTableColumn AddColumn(string name, float width, DPrintAlignment alignment = DPrintAlignment.None) { DPrintItemTableColumn column = new DPrintItemTableColumn(); column.Name = name; column.Width = width; column.Alignment = alignment; _Columns.Add(column); return(column); }
/// <summary> /// Принтиране на ред от таблица /// </summary> private float PrintItemTableRow(PrintPageEventArgs e, float startY, PointF[] cols , DPrintItemTableRow item, DPrintItemTable table) { float maxCellY = startY; // Принтира данните на клетката for (int colIndex = 0; colIndex < cols.Length; colIndex++) { // Позиция на колоната PointF col = cols[colIndex]; // Принтира елемента if (colIndex < item.Cells.Count) { DPrintItemTableCell cell = item.Cells[colIndex]; DPrintAlignment columnAlignment = DPrintAlignment.None; if (table.Columns.Count > colIndex) { DPrintItemTableColumn column = table.Columns[colIndex]; columnAlignment = column.Alignment; } float cellY = PrintItem(e, startY, col.X, col.Y, cell.Item , table.CellFont, columnAlignment); // Максималната височина на клетката if (cellY > maxCellY) { maxCellY = cellY; } } } // Слага рамка на клетките if (table.CellBorder == DPrintBorderType.Solid) { for (int colIndex = 0; colIndex < cols.Length; colIndex++) { // Позиция на колоната PointF col = cols[colIndex]; PrintItemBorder(e.Graphics, col.X, startY, col.Y, maxCellY); } } return(maxCellY); }
/// <summary> /// Принтиране на таблица /// </summary> private float PrintItemTable(PrintPageEventArgs e, float startY, float startX, float endX, DPrintItemTable item) { // Margins float startTableY = startY + item.Margins.Top; float startTableX = startX + item.Margins.Left; float endTableX = endX - item.Margins.Right; // край на таблицата по Y float endY = startTableY; // Редовете на таблицата if (item.Rows.Count > 0) { PointF[] cols = null; // има дефинирани колони if (item.Columns.Count > 0) { // формира колоните cols = new PointF[item.Columns.Count]; float cellX = startTableX; // Ако колоните са с фиксиран размер if (item.ColumnsWidthType == DPrintSizeType.Fixed) { for (int i = 0; i < item.Columns.Count; i++) { DPrintItemTableColumn column = item.Columns[i]; cols[i].X = cellX; cellX += column.Width; cols[i].Y = cellX; } } // Ако колоните са с процентен размер else { // ширина на таблицата float tableWidth = (endTableX - startTableX); for (int i = 0; i < item.Columns.Count; i++) { DPrintItemTableColumn column = item.Columns[i]; cols[i].X = cellX; cellX += (tableWidth * column.Width / 100); cols[i].Y = cellX; } } } // Няма дефинирани колони. // Колоните се формират спрямо клетките в първия ред else { int cellCount = item.Rows[0].Cells.Count; // ширина на клетката float celWidth = (endTableX - startTableX) / cellCount; // формира колоните cols = new PointF[cellCount]; float cellX = startTableX; for (int i = 0; i < cellCount; i++) { cols[i].X = cellX; cellX += celWidth; cols[i].Y = cellX; } } // Принтира редовете foreach (DPrintItemTableRow row in item.Rows) { endY = PrintItemTableRow(e, endY, cols, row, item); } } // Рамка на таблицата if (item.Border == DPrintBorderType.Solid) { PrintItemBorder(e.Graphics, startTableX, startTableY, endTableX, endY); } return(endY + item.Margins.Bottom); }