2013-04-19 2 views
1

Я работаю с C# Windows приложения на основе. [Visual Studio 2010]e.graphics.drawstring показывает текст на PrintPreview, но не печатает

В том, что я пытаюсь напечатать счет.

Я сформировал этот счет, используя e.Graphics.Drawstring.

В этом он показывает мне printpreview со всеми соответствующими данными.

Но, когда я беру распечатку этого printpreview, его не показывая мне предметы в счете. [Частная часть предварительного просмотра. Отображаются другие данные].

Мой код выглядит следующим образом:

e.Graphics.DrawString("Amount", drawFont, Brushes.Black, new RectangleF(tempX + 600, tempY, dataGridView1.Columns[0].Width, dataGridView1.Rows[1].Height), str); 

    while (i < dataGridView1.Rows.Count-1) 
      { 

       if (height > e.MarginBounds.Height) 
       { 
        height = 100; 
        width = 100; 
        e.HasMorePages = true; 
        return; 
       } 
       height += dataGridView1.Rows[i].Height; 

       e.Graphics.DrawString((idInCol).ToString(), drawFont, Brushes.Black, new RectangleF(tempX, ((i*22)+(tempY+25)), dataGridView1.Columns[0].Width, dataGridView1.Rows[0].Height), str); 


       e.Graphics.DrawString(dataGridView1.Rows[i].Cells[2].FormattedValue.ToString().Trim(), drawFont, Brushes.Black, new RectangleF(tempX + 30, ((i * 22) + (tempY +25)), 500, dataGridView1.Rows[0].Height), str); 

       e.Graphics.DrawString(dataGridView1.Rows[i].Cells[3].FormattedValue.ToString(), drawFont, Brushes.Black, new RectangleF(tempX + 400, ((i * 22) + (tempY +25)), dataGridView1.Columns[0].Width, dataGridView1.Rows[0].Height), drawFormat); 
       width += dataGridView1.Columns[0].Width; 

           e.Graphics.DrawString(dataGridView1.Rows[i].Cells[4].FormattedValue.ToString().Trim(), drawFont, Brushes.Black, new RectangleF(tempX + 500, ((i * 22) + (tempY +25)), dataGridView1.Columns[0].Width, dataGridView1.Rows[0].Height), drawFormat); 
       width += dataGridView1.Columns[0].Width; 

           e.Graphics.DrawString(dataGridView1.Rows[i].Cells[5].FormattedValue.ToString().Trim(), drawFont, Brushes.Black, new RectangleF(tempX + 600, ((i * 22) + (tempY +25)), dataGridView1.Columns[0].Width, dataGridView1.Rows[0].Height), drawFormat); 
       width += dataGridView1.Columns[0].Width; 
       idInCol++; 
       i++; 
      } 

Вот мой скриншот счета:

enter image description here

В этом его не показывает мне вексельных подробности, когда я беру распечатку , Все остальные данные отображаются в распечатке, за исключением этой.

Я вставил код (в то время как цикл), из которого я извлекал данные счета (элементы, серийные номера и т. Д.).

В коде отсутствует что-то недостающее?

или

Я сделал ничего плохого в коде?

Пожалуйста, помогите мне.

+0

Что явно отсутствует в коде, является обработчик события BeginPrint. Требуется, чтобы сброс переменной «i» вернулся к 0. –

ответ

3

Я знаю, что это два месяца, и вы, вероятно, нашли ошибку или сдались.

В любом случае здесь я иду: здесь я предполагаю, что переменная i объявлена ​​globaly классу. Если это так, вам необходимо сбросить i на 0 после завершения цикла while.

Чтобы подтвердить, что вам нужно выполнить сброс i, просто отлаживайте приложение и проверяйте значение i во втором случае, когда вы переходите к этому методу (реальная печать). Также, если вы прямо печатаете без предварительного просмотра, он должен работать.

+0

помог мне. +1. Я добавил событие «Начать печать» и там инициализировал переменную до 0. Это устранило проблему. Я начинаю щедрость за этот ответ. –

+0

@pkkg, почему вы начинаете щедрость, когда у вас исправлена ​​проблема. цель щедрости - привлечь ответы на нерешенные вопросы. – 2014-08-30 00:31:32

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