5

Visual StudioUltimate2012を使用します。

現在、レポートビューアで印刷するレポートを作成しています。これまでのところ、パラメータを介してフォームのテキストボックスから値を取得するテキストボックスがたくさんあります。

これまでのところ、すべて正常に動作します。

それから私は大きな問題にぶつかりました。フォームの画像からレポートの画像に画像を渡すにはどうすればよいですか?1つの画像がデータベースに事前に存在します。パラメータとして画像を呼び出すことができると信じています(わからない)。より大きな問題は他の画像です。

もう1つの画像は、QR画像を生成する外部APIを使用します。この画像は、実行時にフォームの画像ボックスに表示されます。私も画像を保存したくない場所に保存していません。しかし、私は私がする必要があるかもしれないかどうかを理解しています。フォームの画像ボックスからレポートの画像ボックスにQR画像を渡す方法はありますか?

ここでエラーのコードを更新します。

Microsoft.Reporting.WinForms.ReportParameter rpIMG1 = new Microsoft.Reporting.WinForms.ReportParameter("paramQRimg", base64String);
Microsoft.Reporting.WinForms.ReportParameter rpIMG2 = new Microsoft.Reporting.WinForms.ReportParameter("paramQRMi", "image/png");

reportViewer1.LocalReport.SetParameters(new Microsoft.Reporting.WinForms.ReportParameter[] { rp1, rp2, rp3, rp4, rp5, rp6, rp7, rp8, rp9, rp10, rpIMG1, rpIMG2 });

設定されたパラメータ部分でエラーが発生します。

An error occurred during local report processing.

なぜこれが気に入らないのか分かりません

4

2 に答える 2

10
 public string ImageToBase64(Image image, 
  System.Drawing.Imaging.ImageFormat format)
{
  using (MemoryStream ms = new MemoryStream())
  {
    // Convert Image to byte[]
    image.Save(ms, format);
    byte[] imageBytes = ms.ToArray();

    // Convert byte[] to Base64 String
    string base64String = Convert.ToBase64String(imageBytes);
    return base64String;
  }
}

画像をbase64文字列に変換してから、パラメータとしてレポートに渡し、レポート画像をこのパラメータに設定します。

于 2012-11-15T11:56:04.070 に答える
0
 private void header()
    {
        try
        {
            string name = "";
            string address = "";
            string phone = "";
            string mobile = "";
            string establish = "";

            db.sql.Close();
            db.sql.Open();
            SqlCommand cmd = new SqlCommand("select * from print_head", db.sql);
            SqlDataReader read = cmd.ExecuteReader();
            while (read.Read())
            {
                name = read[1].ToString();
                address = read[2].ToString();
                phone = read[3].ToString();
                mobile = read[4].ToString();
                establish = read[5].ToString();
                MemoryStream ms = new MemoryStream((byte[])read[6]);
                logo = Image.FromStream(ms);
                try
                {

                        // Convert Image to byte[]

                        byte[] imageBytes = ms.ToArray();

                        // Convert byte[] to Base64 String
                        base64String = Convert.ToBase64String(imageBytes);

                }
                catch(Exception ex)
                {
                    MessageBox.Show(ex.ToString());
                }
            }
            ReportParameterCollection r = new ReportParameterCollection();
            r.Add(new ReportParameter("name", name.ToString()));
            r.Add(new ReportParameter("address", address.ToString()));
            r.Add(new ReportParameter("phone", phone.ToString()));
            r.Add(new ReportParameter("mobile", mobile.ToString()));
            r.Add(new ReportParameter("establish", establish.ToString()));
            r.Add(new ReportParameter("logo", base64String.ToString()));

            this.reportViewer1.LocalReport.SetParameters(r);
            db.sql.Close();
        }
        catch
        {

        }
    }
于 2018-01-11T07:50:28.643 に答える