2017-02-15 9 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、newポイント(350、高さ+80)); –

答えて

0

だから、私は始めた私のprevious example WinForm with an image column.(あなたは私が最初にイメージ列を追加する方法を表示する編集履歴を表示する必要がある場合があります)。

次のステップは、ツールボックスに移動し、フォームに "PrintDocument"を追加することです( "印刷"の下)。それは画面の下部に表示され、右クリック>プロパティを表示します。プロパティーウィンドウで、雷のアイコンをクリックしてイベントを表示し、「PrintPage」のフィールドをダブルクリックします。これにより、PrintPageイベントが作成されます。あなたはまた、例えば、便宜的に印刷ボタンを追加することができます。:

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

これは、その後、印刷された画像のために、DataGridViewのを変換します

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

:次のコードを使用します。私は自分のフォームでそれをテストし、画像の列をうまく印刷しました。

また、あなたはOPのコメントに基づいていくつかのサンプルCodeProjects herehere.

編集を表示することができます:あなたは、プリンタに特定の画像を渡したい場合は、あなたのイメージの場所を渡す方法を見つけることができますいずれかビットマップのコンストラクタに(例えばBitmap(imageLocation))またはあなたがそうのように、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に画像データを挿入するコードを教えてください。あなたがキャストしているものがわからないときに無効なキャストを受け取っている理由を教えてもらえません。また、新しい「回答」として投稿するのではなく、追加情報を含めるように質問を編集してください。 –

関連する問題