コード例 #1
0
        /// <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);
        }
コード例 #2
0
        /// <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);
        }