在线时间:8:00-16:00
迪恩网络APP
随时随地掌握行业动态
扫描二维码
关注迪恩网络微信公众号
1,水晶报表从数据库中读取的数据,当字段内容比较长时,很影响美观,需要设置它为自动换行来显示。 2.打开字段的“设置对象格式”属性,将其“公用”标签下的“可以扩大属性选上,*该设置可以使边框自适应宽度
1,创建dataset.xsd 增加表,然后在表中增加若干列 2,增加水晶报表,画表格,将dataset中的列显示到水晶报表中,并增加参数,(p1.p2.p3.p4.p5) 3 通过代码将datatable转换为xml,dataset using CrystalDecisions.CrystalReports.Engine; using DbHelper; using Productsys; using System; using System.Data; using System.Data.OleDb; using System.Windows.Forms; class clsDyCrystalReportCore { /// <summary> /// 将传入的datatable转换成报表模板所需要的datatable /// 数据全部转换为string /// </summary> /// <param name="dt">来源表</param> /// <returns>报表模板所需要的datatable</returns> public DataTable dtx(DataTable dt) { BigTable.TableModeDataTable dtx1 = new BigTable.TableModeDataTable(); object[] obj = new object[dt.Columns.Count]; //特别注意:所选择的表的列的数目需<=Bigtable的字段数目 //请自行填写保护代码 for (int i = 0; i < dt.Rows.Count; i++) { dtx1.Rows.Add(dtx1.NewRow()); for (int j = 0; j < dt.Columns.Count; j++) { dtx1.Rows[i][j] = dt.Rows[i][j].ToString(); } } return dtx1; } /// <summary> /// 获取ReportDocument /// 使用获取到的对象对Reportview设置 /// crystalReportViewer1.ReportSource = myReport; /// crystalReportViewer1.RefreshReport(); /// /// </summary> /// <param name="titile">表标题</param> /// <param name="dtSource">数据源</param> /// <returns></returns> public ReportDocument getReportSource(string titile, DataTable dtSource) { DataTable dt1 = dtSource; DataTable dtx = new DataTable(); //处理ds1 clsDyCrystalReportCore xCore = new clsDyCrystalReportCore(); dtx = xCore.dtx(dt1); ReportDocument myReport = new ReportDocument(); string reportPath = System.Threading.Thread.GetDomain().BaseDirectory + @"/Resource/TimeReport.rpt"; myReport.Load(reportPath); //绑定数据集,注意,一个报表用一个数据集。 myReport.SetDataSource(dtx); //获取列数 int cols = dt1.Columns.Count; if (cols >= 9) { //设置参数,即表头 for (int i = 1; i <= cols; i++) { if (i <= cols) //dt1.Columns[i-1].ColumnName myReport.SetParameterValue("p" + i.ToString(), dt1.Columns[i - 1].ColumnName); else //注意,这个不能省,一定要给没用到的参数一个空值 myReport.SetParameterValue("p" + i.ToString(), ""); } myReport.SetParameterValue("titile", titile); } else { for (int i = 1; i <= 9; i++) { if (i <= cols) //dt1.Columns[i-1].ColumnName myReport.SetParameterValue("p" + i.ToString(), dt1.Columns[i - 1].ColumnName); else //注意,这个不能省,一定要给没用到的参数一个空值 myReport.SetParameterValue("p" + i.ToString(), ""); } myReport.SetParameterValue("titile", titile); } return myReport; } } //控件调用方法 clsDyCrystalReportCore cls = new clsDyCrystalReportCore(); ReportDocument rd = cls.getReportSource(reportname,source); crystalReportViewer1.ReportSource = rd;
以上方法是通过1个dataset.xsd来完成多个报表的打印,
下面是自己通过抽象工厂来做的一个调用多个模板的方法 //直接通过datatable显示到 crastalReportViewer1中 string sqlStr="SELECT * FROM USERINFO"; ReportClass reportClass = ReportFactory.getInstance(reportname); reportClass.SetDataSource(dt);// 设置数据源 crystalReportViewer1.ReportSource = reportClass; using CrystalDecisions.CrystalReports.Engine; using System; using System.Collections.Generic; using System.Linq; using System.Text; namespace Productsys.Class { /// <summary> /// 使用工厂模式对报表进行初始化 /// </summary> class ReportFactory { private ReportFactory() {} public static ReportClass getInstance(string reportname) { return (ReportClass)Activator.CreateInstance(Type.GetType(reportname)); } } }
什么push和pull的分不清,反正就是一个通过xsd一个不通过xsd文件进行显示的。。。。。。
|
2023-10-27
2022-08-15
2022-08-17
2022-09-23
2022-08-13
请发表评论