ReportView动态加载带参数的RDCL文件

在vs里新建一个winform程序"ReportViewTest",在form1中添加一个reportView控件,from1的load事件如下:


 private void Form1_Load(object sender, EventArgs e)
{

DataSet ds = new DataSet();
try
{
ds = getDS();
}
catch (Exception)
{

throw;
}
Microsoft.Reporting.WinForms.ReportDataSource r = new Microsoft.Reporting.WinForms.ReportDataSource();
r.Name = "Dev_LandaHRM";
r.Value = ds.Tables[0];
this.reportViewer1.LocalReport.DataSources.Add(r);
this.reportViewer1.RefreshReport();
}

得到报表数据源代码如下:


 DataSet getDS()
{
string connStr = System.Configuration.ConfigurationManager.ConnectionStrings["ConnectionSQL"].ToString();
SqlConnection conn = new SqlConnection(connStr);
//读取sql
XmlDocument xmldoc = new XmlDocument();
string fileName = System.Configuration.ConfigurationManager.AppSettings["file2"].ToString();
xmldoc.Load(@"../../" + fileName);
this.reportViewer1.LocalReport.ReportPath = @"../../" + fileName;
XmlNodeList sqlM = xmldoc.GetElementsByTagName("CommandText");
string sql = sqlM[0].InnerXml.ToString();
XmlNodeList canshu = xmldoc.GetElementsByTagName("QueryParameter");
//获取数据源
SqlDataAdapter da = new SqlDataAdapter(sql, conn);
List<string> list = new List<string>();
list.Add("11887307");
list.Add("建筑系");
//如果有参数 传参数
if (canshu.Count > 0)
{
XmlNodeList canshuList = xmldoc.GetElementsByTagName("Prompt");
if (canshuList.Count > 0)
{
for (int i = 0; i < canshuList.Count; i++)
{
//XmlNodeList typeList = xmldoc.GetElementsByTagName("DataType");
//if (typeList[i].InnerXml.ToString().Equals("DateTime"))
//{
// DateTime datetime = DateTime.Parse(list[i]);
// da.SelectCommand.Parameters.Add("@" + canshuList[i].InnerXml, datetime);
// ReportParameter rp = new ReportParameter(canshuList[i].InnerXml.ToString(), datetime.ToString());
// this.reportViewer1.LocalReport.SetParameters(rp);
//}
//else
//{
da.SelectCommand.Parameters.Add("@" + canshuList[i].InnerXml, list[i]); //参数传给数据源
ReportParameter rp = new ReportParameter(canshuList[i].InnerXml.ToString(), list[i]);
this.reportViewer1.LocalReport.SetParameters(rp); //参数传给报表
//}
}
}

}
DataSet de = new DataSet();
da.Fill(de, "Table");
conn.Close();
return de;
}

注释部分为动态传参数使用,为了测试方便,不动态长参数。

其中得到数据库连接字符串和报表名字可配置在app.config中,代码如下:


<?xml version="1.0" encoding="utf-8" ?>
<configuration>
<connectionStrings>
<add name="ConnectionSQL"
connectionString="Data Source=192.168.0.111\SQL2005;Initial Catalog=Dev_LandaHRM;Persist Security Info=True;User ID=sa;Password=landa"
providerName="System.Data.SqlClient" />
</connectionStrings>
<appSettings>
<add key="file1" value="CSEMPL1.rdl"/>
<add key="file2" value="CSEMPL2.rdl"/>
<add key="file3" value="Dept.rdl"/>
<add key="file4" value="SubDept.rdlc"/>
</appSettings>
</configuration>

ReportView动态加载带参数的RDCL文件,码迷,mamicode.com

时间: 2024-08-03 11:29:50

ReportView动态加载带参数的RDCL文件的相关文章

JavaScript 之 动态加载JS代码或JS文件

2.动态加载JS文件 <script type="text/javascript"> function loadScript(url, callback) { var script = document.createElement("script"); script.type = "text/javascript"; if(typeof(callback) != "undefined"){     if (scri

动态加载JS(css)文件

<script language="javascript">document.write("<script src='test.js'><\/script>");</script> 第二种.动态改变已有script的src属性<script src='' id="s1"></script><script language="javascript"&g

CxImage动态加载图片(判断图片文件类型)

1.打开一张图可以通过创建一个新的CxImage对象来完成,通过构造函数来打开一张图CxImage::CxImage(const char * filename, DWORD imagetype)其中filename是需要打开的文件路径,imagetype是文件类型,支持的类型有: [cpp] view plain copy CXIMAGE_FORMAT_UNKNOWN, CXIMAGE_FORMAT_BMP, CXIMAGE_FORMAT_GIF, CXIMAGE_FORMAT_JPG, CX

C#,动态加载DLL,通过反射,调用参数,方法,窗体

.net中常会用到动态加载DLL,而DLL中可能包含各种参数.方法.窗体,如何来调用动态加载这些参数.方法.窗体呢? 在C#中,我们要使用反射,首先要搞清楚以下命名空间中几个类的关系: System.Reflection命名空间 (1)   AppDomain:应用程序域,可以将其理解为一组程序集的逻辑容器 (2)   Assembly:程序集类 (3)   Module:模块类 (4)   Type:使用反射得到类型信息的最核心的类 他们之间是一种从属关系,也就是说,一个AppDomain可以

EasyUI的treegrid组件动态加载数据问题的解决办法

http://www.jquerycn.cn/a_3455 —————————————————————————————————————————————————————————————————————————————————————— 最近涉及到treegrid组件的查询,需要根据查询条件动态更新EasyUI的treegrid组件的动态加载查询结果 搜遍了treegrid源码和文档发现treegrid是扩展自datagrid和tree的,不过以往利用datagrid的reload方法加参数的 方式

Android 实现布局动态加载

Android 动态加载布局 通过使用LayoutInflater 每次点击按钮时候去读取布局文件,然后找到布局文件里面的各个VIEW 操作完VIEW 后加载进我们setContentView 方面里面的要放的布局文件里面,每次动态加载文件必需 调用 removeAllViews方法,清除之前的加载进来的 View .是不是很简单?当然动态加载VIEW 还有许多种方法,多尝试不同写法.可能会领会不一样的心得,祝你早上掌握android 的开发技术. 主要原理:在一个分割出来的大的Layout中(

ExtJS4.2 仅需配置URL动态加载GridPanel列(带分页)

最近做ExtJS一直想做个傻瓜式的GridPanel,今天折腾了一天,从GitHub找到的老外写的解决方案, 在他的基础上做了一些改动,增加了分页,增加了columns手动配置(原本只能动态生成),大家有兴趣可以自由扩展,我做了很详细的注释 效果图如下,仅需在html页面引入ext.all,并创建自定义控件,配置url即可创建带分页效果的GirdPanel 代码: 效果图: 一.动态加载自定义控件 自定义脚本包括两部分:DynamicGrid.js和DynamicReader.js 将Ext目录

asp.net向后台传参数动态加载图片

//向后台传参数动态加载图片 $(function() { $("#Button1").click(function() { var stockcode = getUrlParam("stockcode"); $.ajax({ //要用post方式 type: "Post", //方法所在页面和方法名 url: "IndustryChain.aspx/Photo", contentType: "application

vue:使用不同参数跳转同一组件,实现动态加载图片和数据,以及利用localStorage和vuex持久化数据

需求:通过不同的参数复用同一组件,实现动态加载数据和图片,同时,在页面刷新时,图片依旧可以加载成功. 过程出现的bug和问题: 1.使用params传参后,再次刷新页面,参数丢失导致数据无法再次加载 2.改用query进行传参后,页面刷新后图片无法加载,这是由于图片的url是在created钩子函数调用查询数据api后才进行赋值,而赋值之后页面已经渲染完成,导致图片无法加载成功 解决方案: 1.通过localStorage将数据持久化,在跳转到当前路由时,先使用localStorage将数据持久