本文来自Torres.Wu发表在博客园的博客,转载请标明出处。

同上一篇差不多,这次咱们加载带有子报表的RDCl文件。首先还是创建一个form程序,在form2窗体中添加一个ReporView控件,load方法如下:

private void Form2_Load(object sender, EventArgs e)
{
DataSet ds3 = new DataSet();
string fileName = System.Configuration.ConfigurationManager.AppSettings["file3"].ToString();
string rptFilePath = System.IO.Path.Combine(Application.StartupPath, fileName);
this.reportViewer1.LocalReport.ReportPath = rptFilePath; this.reportViewer1.ProcessingMode = Microsoft.Reporting.WinForms.ProcessingMode.Local;
try
{
ds3 = getDS3();
}
catch (Exception ex)
{ MessageBox.Show(ex.Message);
}
Microsoft.Reporting.WinForms.ReportDataSource r3 = new Microsoft.Reporting.WinForms.ReportDataSource();
r3.Value = ds3.Tables[];
r3.Name = "DataSet1";
this.reportViewer1.LocalReport.DataSources.Add(r3);
//添加加载子报表事件
this.reportViewer1.LocalReport.SubreportProcessing += new SubreportProcessingEventHandler(SubreportProcessingEventHandler);
this.reportViewer1.RefreshReport();
}

大家看到与上一篇不同的是这次在load事件中加了子报表的加载事件,此事件在处理子报表时发生。

同样的,要有主报表数据源和子报表数据源:

 //主报表数据源
DataSet getDS3()
{
string connStr = System.Configuration.ConfigurationManager.ConnectionStrings["ConnectionSQL"].ToString();
SqlConnection conn = new SqlConnection(connStr);
//读取sql
XmlDocument xmldoc = new XmlDocument();
string fileName = System.Configuration.ConfigurationManager.AppSettings["file3"].ToString();
string rptFilePath = System.IO.Path.Combine(Application.StartupPath, fileName);
xmldoc.Load(rptFilePath);
//this.reportViewer1.LocalReport.ReportPath = rptFilePath; XmlNodeList sqlM = xmldoc.GetElementsByTagName("CommandText");
string sql = sqlM[].InnerXml.ToString();
XmlNodeList canshu = xmldoc.GetElementsByTagName("QueryParameter");
//获取数据源
SqlDataAdapter da = new SqlDataAdapter(sql, conn);
List<string> list = new List<string>();
list.Add("生物科学系");
//如果有参数 传参数
if (canshu.Count > )
{
XmlNodeList canshuList = xmldoc.GetElementsByTagName("ReportParameter");
if (canshuList.Count > )
{
for (int i = ; i < canshuList.Count; i++)
{ da.SelectCommand.Parameters.Add("@" + canshuList[i].Attributes.GetNamedItem("Name").Value, list[i]); //参数传给数据源
ReportParameter rp = new ReportParameter(canshuList[i].Attributes.GetNamedItem("Name").Value, list[i]);
this.reportViewer1.LocalReport.SetParameters(rp); //参数传给报表 }
} }
DataSet de = new DataSet();
da.Fill(de, "Table");
conn.Close();
return de;
}
//子报表数据源
DataSet getDS4()
{
string connStr = System.Configuration.ConfigurationManager.ConnectionStrings["ConnectionSQL"].ToString();
SqlConnection conn = new SqlConnection(connStr);
//读取sql
XmlDocument xmldoc = new XmlDocument();
string fileName = System.Configuration.ConfigurationManager.AppSettings["file4"].ToString();
string rptFilePath = System.IO.Path.Combine(Application.StartupPath, fileName);
xmldoc.Load(rptFilePath);
XmlNodeList sqlM = xmldoc.GetElementsByTagName("CommandText");
string sql = sqlM[].InnerXml.ToString();
XmlNodeList canshu = xmldoc.GetElementsByTagName("QueryParameter");
//获取数据源
SqlDataAdapter da = new SqlDataAdapter(sql, conn);
List<string> list = new List<string>();
list.Add("生物科学系");
//如果有参数 传参数
if (canshu.Count > )
{
XmlNodeList canshuList = xmldoc.GetElementsByTagName("ReportParameter");
if (canshuList.Count > )
{
for (int i = ; i < canshuList.Count; i++)
{
da.SelectCommand.Parameters.Add("@" + canshuList[i].Attributes.GetNamedItem("Name").Value, list[i]); //参数传给数据源
}
}
}
DataSet de = new DataSet();
da.Fill(de, "Table");
conn.Close();
return de;
}

还有在处理子报表时发生的事件:

        /// <summary>
/// 为子报表加数据源
/// </summary>
/// <param name="sender"></param>
/// <param name="e"></param>
void SubreportProcessingEventHandler(object sender, SubreportProcessingEventArgs e)
{
DataSet ds4 = new DataSet();
try
{
ds4 = getDS4();
}
catch (Exception)
{ throw;
}
DataTable dt = ds4.Tables[]; Microsoft.Reporting.WinForms.ReportDataSource r3 = new Microsoft.Reporting.WinForms.ReportDataSource();
r3.Value = ds4.Tables[];
r3.Name = "DataSet1";
e.DataSources.Add(r3);
}本文来自Torres.Wu发表在博客园的博客,转载请标明出处。

这样就大功告成了,配置文件和上一篇一样。

本文来自Torres.Wu发表在博客园的博客,转载请标明出处。

ReportView动态加载带参数的RDCL文件及子报表的更多相关文章

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

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

  2. 为不同分辨率单独做样式文件,在页面头部用js判断分辨率后动态加载定义好的样式文件

    为不同分辨率单独做样式文件,在页面头部用js判断分辨率后动态加载定义好的样式文件.样式文件命名格式如:forms[_屏幕宽度].css,样式文件中只需重新定义文本框和下拉框的宽度即可. 在包含的头文件 ...

  3. js实用方法记录-js动态加载css、js脚本文件

    js实用方法记录-动态加载css/js 附送一个加载iframe,h5打开app代码 1. 动态加载js文件到head标签并执行回调 方法调用:dynamicLoadJs('http://www.yi ...

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

    2.动态加载JS文件 <script type="text/javascript"> function loadScript(url, callback) { var ...

  5. 使用js加载器动态加载外部js、css文件

    let MiniSite = new Object(); /** * 判断浏览器 */ MiniSite.Browser = { ie: /msie/.test(window.navigator.us ...

  6. 动态加载JS(css)文件

    <script language="javascript">document.write("<script src='test.js'><\ ...

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

    1.打开一张图可以通过创建一个新的CxImage对象来完成,通过构造函数来打开一张图CxImage::CxImage(const char * filename, DWORD imagetype)其中 ...

  8. 动态加载、移除css文件

    修改样式有通过修改class属性来更改,也可以通过动态引入外部的css文件来改变对应的样式展示. 这里就介绍动态引入.移除css文件 ///添加平板样式文件 function loadStyles() ...

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

    .net中常会用到动态加载DLL,而DLL中可能包含各种参数.方法.窗体,如何来调用动态加载这些参数.方法.窗体呢? 在C#中,我们要使用反射,首先要搞清楚以下命名空间中几个类的关系: System. ...

随机推荐

  1. Servlet--ServletInputStream类,ServletOutputStream类

    ServletInputStream类 定义 public abstract class ServletInputStream extends InputStream 这个类定义了一个用来读取客户端的 ...

  2. SQL Server——存储过程

    我想从下面几个方面大概的讲述下存储过程,可能有些知识点是你没有注意的,也可能有些知识点我不知道,欢迎大家指点指点.如有不足,欢迎指教! 存储过程概念 存储过程优点 存储过程的接口 存储过程的解析.编译 ...

  3. html5中的新标签

    header <header> 标签定义文档的页眉(介绍信息). nva 根据W3C的定义规范:nav元素是一个可以用来作为页面导航的链接组: <nav><ul>& ...

  4. 02_HTML5+CSS详解第一天

    视频来源:麦子学院 讲师:朱朝兵 HTML5概念:HTML即超文本标记语言(HyperText Makeup Language),是一种语法简单,结构清晰的解释型文档,不同于其他编程语言. HTML5 ...

  5. Percona监控MySQL模板详解

    InnoDB Adaptive Hash Index 显示了"自适应哈希索引"的使用情况,哈希索引只能用来搜索等值的查询. # Hash table size 17700827, ...

  6. 不依赖jstack的java 线程dump和死锁检查工具

    java线程dump可以使用jdk的命令"jstack  pid"完成,死锁检查可以用jconsole查看到.这两个工具是java调试的常用方法. 我遇到的问题是:在sles11s ...

  7. 使用正则表达式和数组形式获取get方法传入的值

    <!DOCTYPE html><html lang="en"><head> <meta charset="UTF-8" ...

  8. 关于node的基础理论,书上看来的

    最近看了一本书,说了一些Node.js的东西,现在来记录一下,让自己记得更牢靠一点. 在书上,是这样介绍的:Node.js模型是源于Ruby的Event Machine 和 Python的Twiste ...

  9. IntelliJ IDEA下Maven SpringMVC+Mybatis入门搭建例子

    很久之前写了一篇SSH搭建例子,由于工作原因已经转到SpringMVC+Mybatis,就以之前SSH实现简单登陆的例子,总结看看SpringMVC+Mybatis怎么实现. Spring一开始是轻量 ...

  10. 【linux之正则表达式】

    一.grep grep家族grep.egrep.fgrepGlobally search a Regular Expression and Print根据我们提供的模式进行查找,并且将文件中匹配的行显 ...