2015-02-09 2 views
-1

В настоящее время я получаю пустую страницу, отображающую мой предварительный просмотр.Получение печати

Как я могу показать, какие данные у меня есть?

спасибо:

Вот что зовут его: он дозвонился его только, что никакие данных не показаны на черной странице предварительного просмотра

List<string[]> myList = new List<string[]>(); 
    myList.Add(new string[] { "Column 1", "Column 2", "Column 3" }); 
    myList.Add(new string[] { "Row 2", "Row 2" }); 
    myList.Add(new string[] { "Row 3" }); 
    printUtility.SetUpDocument("TEST", myList); 


    public class PrintUtility 
    { 
     public PrintDocument document; 
     public DataGridView dataGridView; 



     public PrintUtility() 
     { 
      document = new PrintDocument(); 
      dataGridView = new DataGridView(); 
     } 


     public void SetUpDocument(string title, List<string[]> myList) 
     { 

      document.DocumentName = title; 
      document.PrintPage += PrintPage; 


      // Convert to DataTable. 
      DataTable table = ConvertListToDataTable(myList); 
      this.dataGridView.DataSource = table; 

      document.DocumentName = title; 
      document.PrintPage += PrintPage; 
     } 


     public PrintDocument GetDocument() 
     { 
      return this.document; 
     } 


     public void PrintPage(object sender, PrintPageEventArgs e) 
     { 
      foreach (DataGridViewRow row in dataGridView.Rows) 
       foreach (DataGridViewCell cell in row.Cells) 
       { 
        e.Graphics.DrawString(cell.Value.ToString(), new Font(FontFamily.GenericSansSerif, 12.0F, FontStyle.Bold), Brushes.Black, 
           new Point(cell.ColumnIndex * 123, cell.RowIndex * 12)); 
       } 
     } 

     private DataTable ConvertListToDataTable(List<string[]> list) 
     { 
      // New table. 
      DataTable table = new DataTable(); 

      // Get max columns. 
      int columns = 0; 
      foreach (var array in list) 
      { 
       if (array.Length > columns) 
       { 
        columns = array.Length; 
       } 
      } 

      // Add columns. 
      for (int i = 0; i < columns; i++) 
      { 
       table.Columns.Add(); 
      } 

      // Add rows. 
      foreach (var array in list) 
      { 
       table.Rows.Add(array); 
      } 

      return table; 
     } 
} 
+0

Я вижу, что вы используете код из [моего ответа] (http://stackoverflow.com/questions/28368453/c-sharp-preview -print-dialog/28391910 # 28391910) на ваш предыдущий вопрос. Вы действительно должны поставить комментарий там, если вы не можете заставить его работать, вместо того, чтобы публиковать в основном тот же вопрос, возможно, с той же проблемой! - Имеются ли данные в DGV и вы можете видеть их в отладчике, когда вы проходите через «PrintPage»? – TaW

+0

На самом деле я был не совсем прав; эта проблема сильно отличается от предыдущей публикации! – TaW

+0

Вы получили его сейчас? – TaW

ответ

0

Вашей проблемы здесь в том, что вы с помощью DataGridView, что на самом деле не показано нигде.

Но так как все данные в DataTable в любом случае, почему бы не напечатать с этим DataTable? Вот простой кусок кода, чтобы заменить петлю в PrintPage событии:

DataTable table = (DataTable)dataGridView.DataSource; 

for (int r = 0; r < table.Columns.Count; r++) 
{ 
    DataRow row = table.Rows[r]; 
    for (int c = 0; c < table.Columns.Count; c++) 
    { 
    string s = ""; 
    if (row[c] != null) s = row[c].ToString(); 
    e.Graphics.DrawString(s, new Font(FontFamily.GenericSansSerif, 
        12.0F, FontStyle.Bold), Brushes.Black, new Point(c * 123, r * 12)); 
    } 
} 

Опять все дополнительные подсказки из моих previous answer о вещах, чтобы улучшить применять выход. (За исключением FormattedValue, которого нет в DataTable ..)

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