微软RDLC报表,动态加载图片文件(二维码)
我是一个程序员,有时候莫名其妙的遇到一些不好解决的问题,于是我就记录了下来,希望对大家有用!
开发环境:VS2010(中文),IIS7.0,IE8及以上
1、 首先讲一下,我的动态的图片是一个二维码。
(1)引用一下ThoughtWorks.QRCode.dll这个DLL,如果没有的话去网上下载一
ThoughtWorks.QRCode.rar个。或者我这个word文档里面是有一个的
(2)然后呢,当然要有一个存放二维码的文件夹,用来 存放生成之后的二维码,这个名字随便起
(3)最后,当然是报表后台的代码了,不过RDLC报表是动态生成的,要写在aspx.cs里面,写的这么清楚了,大家不会不明白吧:
private void create_two(string nr)//nr 这个参数当然是需要生成二维码的文字或字段
{
Bitmap bt;
string enCodeString = nr;
QRCodeEncoder qrCodeEncoder = new QRCodeEncoder();
bt = qrCodeEncoder.Encode(enCodeString, Encoding.UTF8);
string filename = nr;
bt.Save(Server.MapPath(\"~/QRImage/\") + filename + \".jpg\");
}
(4)当然如果报错了,报红线了,那当然要去解析一下,system.drawing神马的,去引用一下吧,当然你加进来的ThoughtWorks也要去引用一下。
(例如using houghtWorks.QRCode.Codec;)
2、 当然是要把生成的这个二维码放到恶心的RDLC报表上,这里讲解的是VS2010,如果环境不对,请绕路。
(1)
我觉得注解的够清楚了。
(2)
(3)后台代码绑定
protected void Page_Load(object sender, EventArgs e)
{
if (!IsPostBack)
{
string sid = Request.QueryString[\"id\"];
ReportViewer1.ProcessingMode = ProcessingMode.Local;
ReportViewer1.LocalReport.ReportPath =
erver.MapPath(\"~/Report/Report/SDBXZ.rdlc\");
ReportViewer1.LocalReport.EnableExternalImages = true;
StringBuilder sb = new StringBuilder();
sb.Append(\"select * from SDBXZ_View where JGJSID='\" + sid + \"'\");
string con =
System.Configuration.ConfigurationManager.ConnectionStrings[\"CostManagementSystem\"].ToString();
DataSet ds = new DataSet();
SqlConnection sqlcon = new SqlConnection(con);
SqlCommand sqlcom = new SqlCommand(sb.ToString(), sqlcon);
SqlDataAdapter sqlad = new SqlDataAdapter();
sqlad.SelectCommand = sqlcom;
sqlad.Fill(ds, \"sql\");
///取得一个字段,我取得是GUID
string guid =
ds.Tables[\"sql\"].Rows[0][\"JGJSID\"].ToString().Replace(\"-\",\"\").Trim();
///生成二维码,并保存到指定目录,在最上面这个方法已经写在那里了
create_two(guid);
///拼接一个URL(存放图片的URL)
string url = \"file:///\" + Server.MapPath(\"~/QRImage/\") + guid + \".jpg\";
LocalReport report = ReportViewer1.LocalReport;
///把URL付给参数EWM(图片绑定的参数)
report.SetParameters(new ReportParameter(\"EWM\", url));
ReportViewer1.LocalReport.DataSources.Add(new ReportDataSource(\"DataSet1\", ds.Tables[\"sql\"]));
ReportViewer1.DataBind();
this.ReportViewer1.ServerReport.Refresh();
}
}
3、测试下吧,大功告成!
因篇幅问题不能全部显示,请点此查看更多更全内容