2009-05-14 6 views
0

J'essaie d'imprimer un DataGrid dans une application Windows Forms et lorsque la largeur des colonnes est définie (elle est personnalisable) trop étroite pour s'adapter au texte, elle tronque simplement le texte au lieu de l'encapsuler. Existe-t-il une propriété dans DataGrid qui définit l'habillage de texte?Habillage de texte lors de l'impression de DataGrid? .NET

J'ai ajouté du code pour aider à diagnostiquer le problème.

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

Répondre

Questions connexes