2017-02-15 5 views
0

Мне нужно показать изображение с dataGrid для печати Страница? Как установить значение изображения?Распечатать изображение от DataGridview?

private void printDocument_nahlad_PrintPage(object sender, System.Drawing.Printing.PrintPageEventArgs e) 
{ 
    //e.Graphics.DrawImage(dataGridView_nahlad.Rows[0].Cells[12]........... = , 620, 55, 120, 120); 
} 

enter image description here

Я добавил код, где сохранить изображение в SQL базы данных. Создайте QR-код, который будет сохранен как изображение. Я покажу весь код для сохранения данных.

Создать новый:

public partial class form : Form 
{ 

    kasspoxTestEntities test; 

     private void btn_novy_vystup_Click(object sender, EventArgs e) 
    { 

     try 
     { 
      panel_vystup.Enabled = true; 
      cmb_dodavatel_vystup.Focus(); 

      tab_vystup f = new tab_vystup(); 
      test.tab_vystup.Add(f); 
      tabvystupBindingSource.Add(f); 
      tabvystupBindingSource.MoveLast(); 

     } 


      private void btn_generovat_vystup_Click(object sender, EventArgs e) 
    { 

     if (!string.IsNullOrEmpty(cmb_dodavatel_vystup.Text) & !string.IsNullOrEmpty(txt_cislo_palety_vystup.Text) & !string.IsNullOrEmpty(txt_hrubka_vystup.Text) & !string.IsNullOrEmpty(txt_sirka_vystup.Text) & !string.IsNullOrEmpty(txt_dlzka_vystup.Text) & !string.IsNullOrEmpty(txt_pocet_vystup.Text) & !string.IsNullOrEmpty(cmb_kvalita_vystup.Text) & !string.IsNullOrEmpty(cmb_druh_vystup.Text)) 
     { 


       txt_objem_vystup.Text = (((Convert.ToInt32(txt_hrubka_vystup.Text) * Convert.ToInt32(txt_sirka_vystup.Text) * Convert.ToInt32(txt_dlzka_vystup.Text) * 0.000000001) * Convert.ToInt32(txt_pocet_vystup.Text)).ToString()); 
       txt_objem_vystup.Text = Math.Round(double.Parse(txt_objem_vystup.Text), 3).ToString(); 

       MessagingToolkit.QRCode.Codec.QRCodeEncoder encoder = new MessagingToolkit.QRCode.Codec.QRCodeEncoder(); 
       encoder.QRCodeScale = 8; 

       Bitmap bmp = encoder.Encode(cmb_dodavatel_vystup.Text + ";" + 
               txt_cislo_palety_vystup.Text + txt_datum_vystup.Text + txt_smena_vystup.Text + ";" + 
               txt_hrubka_vystup.Text + txt_sirka_vystup.Text + txt_dlzka_vystup.Text + ";" + 
               txt_pocet_vystup.Text + ";" + 
               cmb_kvalita_vystup.Text + ";" + 
               txt_objem_vystup.Text + ";" + 
               cmb_druh_vystup.Text); 



       txt_link.Text = (cmb_dodavatel_vystup.Text + ";" + 
               txt_cislo_palety_vystup.Text + txt_datum_vystup.Text + txt_smena_vystup.Text + ";" + 
               txt_hrubka_vystup.Text + txt_sirka_vystup.Text + txt_dlzka_vystup.Text + ";" + 
               txt_pocet_vystup.Text + ";" + 
               cmb_kvalita_vystup.Text + ";" + 
               txt_objem_vystup.Text + ";" + 
               cmb_druh_vystup.Text); 


       pictureBox.Image = bmp; 
       btn_tlacit_vystup.Enabled = true; 
       lb_pozor.Visible = false; 

       MessageBox.Show("Kód bol vygenerovaný a paleta uložená", "Informácia", MessageBoxButtons.OK, MessageBoxIcon.Information); 

       tabvystupBindingSource.EndEdit(); 
       tabskladBindingSource.EndEdit(); 
       test.SaveChangesAsync(); 
+0

можете ли вы прояснить этот вопрос? Вы печатаете страницу своего DataGridView со столбцом изображения, изображение видно в grod данных, но при печати не отображается изображение? –

+0

Я добавил фотографию. Да, картина видна в dagrid, и я хочу распечатать. –

+0

В текстовом примере: e.Graphics.DrawString (dataGridView_nahlad.Rows [i] .Cells [11] .FormattedValue.ToString(), новый шрифт («Microsoft Sans Serif», 12, FontStyle.Bold), Brushes.Black, новый Точка (350, высота + 80)); –

ответ

0

Итак, я начал с моим previous example WinForm with an image column. (Вам может понадобиться просмотреть историю изменений, чтобы посмотреть, как я первоначально добавлен столбец изображения).

Следующим шагом является переход на панель инструментов и добавление «PrintDocument» в вашу форму (в разделе «Печать»). Он появится в нижней части экрана и щелкните правой кнопкой мыши> Просмотреть свойства. В окне «Свойства» нажмите значок «Thunderbolt», чтобы открыть события, и дважды щелкните поле «PrintPage». Это создает событие PrintPage. Используйте следующий код:

private void printDocument1_PrintPage(object sender, System.Drawing.Printing.PrintPageEventArgs e) 
     { 
      Bitmap bm = new Bitmap(this.dataGridView1.Width, this.dataGridView1.Height); 
      dataGridView1.DrawToBitmap(bm, new Rectangle(0, 0, this.dataGridView1.Width, this.dataGridView1.Height)); 
      e.Graphics.DrawImage(bm, 0, 0); 
     } 

Вы также можете добавить кнопку печати для удобства, например .:

private void button1_Click(object sender, EventArgs e) 
    { 
     PrintDialog printDialog = new PrintDialog(); 
     printDialog.Document = printDocument1; 
     if (printDialog.ShowDialog() == DialogResult.OK) 
     { 
      printDocument1.Print(); 
     } 
    } 

Это превратит ваш DataGridView к изображению, которое будет затем распечатать. Я протестировал его в своей форме, и он отлично напечатал столбец изображений.

В качестве альтернативы, вы можете посмотреть некоторые образцы CodeProjects here и here.

Редактировать на основе комментариев OP в: Если вы хотите передать определенное изображение на принтер, вы можете либо найти способ передать свое местоположение изображения конструктору Bitmap (например Bitmap(imageLocation)) или вы можете взять Bitmap непосредственно из DataGridViewImageColumn, например, так:

printDocument1_PrintPage(object sender, System.Drawing.Printing.PrintPageEventArgs e) 
{ 
    // figure out how you're selecting an image 
    // this selects the highlighted row 
    int rowIndex = dataGridView1.CurrentCell.RowIndex; 
    // select the image column 
    Bitmap bm = (Bitmap) dataGridView1.Rows[rowIndex].Cells[0].Value; 
    e.Graphics.DrawImage(bm, 0, 0);  
} 
+0

Хорошо, но я хочу напечатать одну ячейку с изображением, без таблицы. –

+0

Я обновил свой ответ. Было бы намного проще с примером кода, потому что есть несколько способов сделать то, что вы просите, но идея остается той же: получите объект System.Drawing.Bitmap и вызовите 'e.Graphics.DrawImage (bm , 0, 0) 'в' printDocument_PrintPage'. Видя, как вы в настоящее время реализовали его, было бы легче исправить ваш код. –

0
private void printDocument_nahlad_PrintPage(object sender, System.Drawing.Printing.PrintPageEventArgs e) 
    { 

      // prvy štitok 
      // prvy stlpec 
      e.Graphics.DrawString(dataGridView_nahlad.Columns[0].HeaderText.ToString(), new Font("Microsoft Sans Serif", 12, FontStyle.Bold), Brushes.Black, new Point(75,55)); 
      e.Graphics.DrawString(dataGridView_nahlad.Rows[0].Cells[0].FormattedValue.ToString(), new Font("Microsoft Sans Serif", 12, FontStyle.Bold), Brushes.Black, new Point(150, 55)); 

      e.Graphics.DrawString(dataGridView_nahlad.Columns[1].HeaderText.ToString(), new Font("Microsoft Sans Serif", 12, FontStyle.Bold), Brushes.Black, new Point(75, 75)); 
      e.Graphics.DrawString(dataGridView_nahlad.Rows[0].Cells[1].FormattedValue.ToString(), new Font("Microsoft Sans Serif", 12, FontStyle.Bold), Brushes.Black, new Point(150, 75)); 

      // druhy stlpec 

      e.Graphics.DrawString(dataGridView_nahlad.Columns[5].HeaderText.ToString(), new Font("Microsoft Sans Serif", 12, FontStyle.Bold), Brushes.Black, new Point(290, 55)); 
      e.Graphics.DrawString(dataGridView_nahlad.Rows[0].Cells[5].FormattedValue.ToString(), new Font("Microsoft Sans Serif", 12, FontStyle.Bold), Brushes.Black, new Point(350, 55)); 

      e.Graphics.DrawString(dataGridView_nahlad.Columns[6].HeaderText.ToString(), new Font("Microsoft Sans Serif", 12, FontStyle.Bold), Brushes.Black, new Point(290, 75)); 
      e.Graphics.DrawString(dataGridView_nahlad.Rows[0].Cells[6].FormattedValue.ToString(), new Font("Microsoft Sans Serif", 12, FontStyle.Bold), Brushes.Black, new Point(350, 75)); 


      // treti stlpec 

      e.Graphics.DrawString(dataGridView_nahlad.Columns[9].HeaderText.ToString(), new Font("Microsoft Sans Serif", 12, FontStyle.Bold), Brushes.Black, new Point(450, 55)); 
      e.Graphics.DrawString(dataGridView_nahlad.Rows[0].Cells[9].FormattedValue.ToString(), new Font("Microsoft Sans Serif", 12, FontStyle.Bold), Brushes.Black, new Point(520, 55)); 

      e.Graphics.DrawString(dataGridView_nahlad.Columns[10].HeaderText.ToString(), new Font("Microsoft Sans Serif", 12, FontStyle.Bold), Brushes.Black, new Point(450, 75)); 
      e.Graphics.DrawString(dataGridView_nahlad.Rows[0].Cells[10].FormattedValue.ToString(), new Font("Microsoft Sans Serif", 12, FontStyle.Bold), Brushes.Black, new Point(520, 75)); 

      // vykreslenie čiar 

      e.Graphics.DrawLine(new Pen (Brushes.Black, 3), 75 ,190,740,190); 
      e.Graphics.DrawLine(new Pen(Brushes.Black, 3), 75, 45, 740, 45); 


      //CODE FOR MY IMAGE 

      // Bitmap bm = (Bitmap)dataGridView_nahlad.Rows[0].Cells[12].Value; 
      //e.Graphics.DrawImage(bm, 620, 55, 120, 120); 

     } 
+0

Был ли мой код не исправил вашу проблему? И если нет, можете ли вы, пожалуйста, рассказать мне, в чем проблема? –

+0

@ C. Хостинг выглядит выше, я добавил ошибку –

+0

Ваша ошибка - недопустимый литой.Не могли бы вы показать мне код, в который вы вставляете данные изображения в DataGridView? Я не могу сказать вам, почему вы получаете недопустимый литой, когда я не знаю, из чего вы выбрасываете. Кроме того, пожалуйста, отредактируйте свой вопрос, чтобы включить дополнительную информацию, вместо того, чтобы публиковать его как новый «ответ». –

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