2009-05-14 4 views
0

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

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

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

ответ

2

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

How to Wrap text in a text box column of datagrid in windows application.

+0

Большое спасибо за ответ. Это действительно помогло мне и помогло мне решить мою проблему. Простите, что так долго было отмечено, как было сказано. знак равно –

 Смежные вопросы

  • Нет связанных вопросов^_^