【问题标题】:Pass byte[] as Parameter to ReportViewer将 byte[] 作为参数传递给 ReportViewer
【发布时间】:2013-09-12 23:32:27
【问题描述】:

您好,我有这行代码可以从 Sql 数据库中加载图像:

MemoryStream mem;
    void zobraz_logo()
    {
        try
        {
            SqlDataAdapter dataAdapter = new SqlDataAdapter(new SqlCommand("SELECT logo FROM firma WHERE id = 1", spojeni));
            DataSet dataSet = new DataSet();


            dataAdapter.Fill(dataSet);


            if (dataSet.Tables[0].Rows.Count == 1)
            {
                Byte[] data = new Byte[0];
                data = (Byte[])(dataSet.Tables[0].Rows[0]["logo"]);
                 mem = new MemoryStream(data);

            }

        }

        catch (Exception)
        {
            MessageBox.Show("");
        }

    }

现在我正在尝试将它作为参数传递给 ReportViewer:

eportParameter[] parameter = new ReportParameter[18];

            parameter[18] = new ReportParameter("rp_logo", Image.FromStream(mem)); // this is the issue line


            this.firmaTableAdapter.Fill(this.dataset_voucher.firma);
            this.zajezdTableAdapter.Fill(this.dataset_voucher.zajezd,vybrana_akce,klientClass.Rocnik());


            this.reportViewer1.LocalReport.SetParameters(parameter);
            this.reportViewer1.RefreshReport();


        }

我正在尝试将图像作为参数加载到 ReportViewer 的图像中,我希望可以这样做。如果不是,请您建议我最好的方法吗?

在上述行我收到错误:Argument 2:cannot convert from System.Drawing.Image to String[]

感谢您的宝贵时间。

【问题讨论】:

标签: c# sql sql-server winforms


【解决方案1】:

嗯,你可以看到ReportParameter 接受字符串、字符串数组和布尔值,正如你在MSDN 中看到的那样。

你应该使用其中之一。

我不知道图片的用途,但您可以在报告中使用它的路径

parameter[18] = new ReportParameter("rp_logo", new string[]{dataImage});

【讨论】:

  • 感谢您的宝贵时间,我尝试了您提出的谎言:parameter[18] = new ReportParameter("rp_logo", dataImage); (在我的问题中传递原始的“数据”)但仍然出现错误:无法将 byte[] 转换为 string [] 。请你帮我把dataImage转换成字符串[]好吗?
  • 再次感谢,但仍然发生。当我简单地复制你的建议时。你不知道为什么吗?我是这样设计的:Byte[] dataImage;并复制了您编辑的答案。
  • @Marek o 所以你使用的是字节数组......不幸的是,字节数组没有构造函数......你必须转换为字符串
  • 哦,我尝试了字符串数组,但是在传递它时我收到空异常。即使我在传递时创建了同名的参数,并在 ImageFeild 中创建了表达式作为对该参数的引用。
【解决方案2】:

我从未使用过报表查看器,但在 Crystal 报表中,您将参数/字段创建为对象类型,并将 byte[] 传递给该参数/字段。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-10-19
    • 2020-09-23
    • 1970-01-01
    • 1970-01-01
    • 2014-09-18
    • 1970-01-01
    相关资源
    最近更新 更多