Обтекание текста при печати DataGrid? .Сеть - PullRequest
0 голосов
/ 15 мая 2009

Я пытаюсь напечатать DataGrid в приложении Windows Form, и когда ширина столбцов установлена ​​(настраиваемая) слишком узко, чтобы поместиться в текст, он просто обрезает текст, а не переносит его. Есть ли свойство в DataGrid, которое устанавливает перенос текста?

Я добавил код, чтобы помочь с диагностикой проблемы.

private void PrintRow(PointF location, PrintPageEventArgs e)
    {
        Graphics g = e.Graphics;
        PointF curLocation = location;

        //Measure the height of one row
        SizeF charSize = g.MeasureString(MEASURE_CHAR.ToString(), this.Grid.Font);
        float rowHeight = charSize.Height + CELL_PADDING * 2;

        //Print the vertical gridline on the left side of the first cell
        //Note that we only print the vertical gridlines down to the bottom 
        //of the last printed row
        int maxRowsOnPage = (int)Math.Floor(e.MarginBounds.Height / rowHeight);            
        int rowsRemaining = this.Grid.Rows.Count - _curRowIdx;
        int rowsToPrint = Math.Min(maxRowsOnPage, rowsRemaining);
        float bottom = e.MarginBounds.Top + (rowsToPrint * rowHeight);
        g.DrawLine(Pens.Black, curLocation.X, e.MarginBounds.Top, curLocation.X, bottom);

        DataGridViewRow row = this.Grid.Rows[_curRowIdx];
        foreach (QueryField field in _fields)
        {                
            foreach (DataGridViewCell cell in row.Cells)
            {
                //Exit early if this is not the correct cell
                if (this.Grid.Columns[cell.ColumnIndex].HeaderText != field.FieldLabel) continue;                    

                //Calculate where we need to draw the next cell
                int maxChars = field.MaxLength > 0 ? field.MaxLength : field.FieldLabel.Length;
                SizeF maxSize = g.MeasureString(string.Empty.PadLeft(maxChars, MEASURE_CHAR), this.Grid.Font);
                RectangleF boundingRect = new RectangleF(curLocation, maxSize);                    

                //Make sure we don't overshoot the right margin
                if (boundingRect.Left >= e.MarginBounds.Right)
                {
                    break;
                }
                if (boundingRect.Right > e.MarginBounds.Right)
                {
                    boundingRect.Width = boundingRect.Width - (boundingRect.Right - e.MarginBounds.Right);
                }

                //Get the field value
                string fieldValue = string.Empty;
                if (cell.Value != null)
                {
                    fieldValue = cell.Value.ToString();
                }

                //Draw the field value                    
                g.DrawString(fieldValue, this.Grid.Font, Brushes.Black, (RectangleF)boundingRect, sf);

                curLocation.X += boundingRect.Width;
                curLocation.X += CELL_PADDING;

                //Print the vertical gridline between this cell and the next
                if (boundingRect.Right <= e.MarginBounds.Right)
                {
                    g.DrawLine(Pens.Black, curLocation.X, e.MarginBounds.Top, curLocation.X, bottom);                       
                }

                //Move the current location to the next position
                curLocation.X += CELL_PADDING;
            }
        }

        //Draw the top gridline                 
        g.DrawLine(Pens.Black, e.MarginBounds.Left, e.MarginBounds.Top, curLocation.X, e.MarginBounds.Top);

        //Draw the bottom gridline     
        curLocation.Y += charSize.Height;                
        curLocation.Y += CELL_PADDING;
        g.DrawLine(Pens.Black, e.MarginBounds.Left, curLocation.Y, curLocation.X, curLocation.Y);
    }

1 Ответ

2 голосов
/ 15 мая 2009

Попробуйте эту тему. Кто-то с точно такой же проблемой. Надеюсь, это поможет!

Как обернуть текст в столбец текстового поля сетки данных в приложении Windows.

...