2009-05-14 5 views
0

私は、WindowsフォームアプリケーションでDataGridを印刷しようとしていますが、列の幅が設定されている(カスタマイズ可能な)場合は、テキストを折り返す代わりにテキストを切り詰めるだけの幅が狭すぎます。テキストの折り返しを設定するプロパティが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

お返事ありがとうございます。本当に助けになり、私の問題を解決することができました。申し訳ありませんが、回答に時間がかかりました。 =) –

関連する問題