博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
ReportView动态加载带参数的RDCL文件及子报表
阅读量:5154 次
发布时间:2019-06-13

本文共 5389 字,大约阅读时间需要 17 分钟。

本文来自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[0];            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[0].InnerXml.ToString();            XmlNodeList canshu = xmldoc.GetElementsByTagName("QueryParameter");            //获取数据源            SqlDataAdapter da = new SqlDataAdapter(sql, conn);            List
list = new List
(); list.Add("生物科学系"); //如果有参数 传参数 if (canshu.Count > 0) { XmlNodeList canshuList = xmldoc.GetElementsByTagName("ReportParameter"); if (canshuList.Count > 0) { for (int i = 0; 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[0].InnerXml.ToString(); XmlNodeList canshu = xmldoc.GetElementsByTagName("QueryParameter"); //获取数据源 SqlDataAdapter da = new SqlDataAdapter(sql, conn); List
list = new List
(); list.Add("生物科学系"); //如果有参数 传参数 if (canshu.Count > 0) { XmlNodeList canshuList = xmldoc.GetElementsByTagName("ReportParameter"); if (canshuList.Count > 0) { for (int i = 0; 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; }

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

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

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

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

转载于:https://www.cnblogs.com/wwfjcy479/p/3700630.html

你可能感兴趣的文章
导航,头部,CSS基础
查看>>
转负二进制(个人模版)
查看>>
LintCode-Backpack
查看>>
查询数据库锁
查看>>
我对于脚本程序的理解——百度轻应用有感
查看>>
面试时被问到的问题
查看>>
注解小结
查看>>
list control控件的一些操作
查看>>
判断字符串在字符串中
查看>>
oracle 创建暂时表
查看>>
201421410014蒋佳奇
查看>>
Xcode5和ObjC新特性
查看>>
Centos 7.0 安装Mono 3.4 和 Jexus 5.6
查看>>
CSS属性值currentColor
查看>>
Real-Time Rendering 笔记
查看>>
实验四2
查看>>
多路复用
查看>>
Python数据可视化之Pygal(雷达图)
查看>>
Java学习笔记--字符串和文件IO
查看>>
转 Silverlight开发历程—(画刷与着色之线性渐变画刷)
查看>>