C#操作水晶报表的一些疑问和求解

2025-04-25 11:39:45
推荐回答(4个)
回答1:

这么说吧,水晶报表压根不好用,我们宁愿用微软的。

一般如果你动手能力比较强的话 那就用Winform+Panl直接自己画一个

微软的报表是要设置数据源的,就是你所说的DataSet,再加载数据的时候你要去更新初始设置的DataSet,当报表有了DataSet后才建立报表框架,这时候你也可以向他传递参数,看一下我写的报表类里面的代码:

//显示报表类
        private void Baobiao(ReportViewer r,string ming,DataSet ds,string lujing)
        {
            //这里处理商标图片
            r.LocalReport.EnableExternalImages = true;
            ReportParameter[] image = new ReportParameter[1];
            string path = "file:///" + @lujing;   //图片地址    
            image[0] = new ReportParameter("商标", path);   //image1必须和报表参数一致
            r.LocalReport.SetParameters(image);
            r.LocalReport.Refresh();
            if (ming == "8RND4RNDQR")      //如果是二维码
            {
                //初始化数据保存二维码
                BarTu();
                //设置参数
                ReportParameter[] rp = new ReportParameter[4];
                rp[0] = new ReportParameter("shangjia", changming);
                rp[1] = new ReportParameter("Tel", rexian);
                rp[2] = new ReportParameter("dizhi", dizhi);
                rp[3] = new ReportParameter("wangzhi", wangzhi);
                r.LocalReport.SetParameters(new ReportParameter[] { rp[0], rp[1], rp[2], rp[3] });
                r.LocalReport.Refresh();
            }
            //这里处理报表
            r.LocalReport.ReportPath = Application.StartupPath + "/" + ming + ".rdlc";
            r.LocalReport.ReportEmbeddedResource = ming + ".rdlc";
            //设置打印布局模式,显示物理页面大小
            r.SetDisplayMode(Microsoft.Reporting.WinForms.DisplayMode.PrintLayout);
            //缩放模式为百分比,以300%方式显示
            r.ZoomMode = Microsoft.Reporting.WinForms.ZoomMode.Percent;
            r.ZoomPercent = 300;
            r.LocalReport.DataSources.Clear();
            r.LocalReport.DataSources.Add(new Microsoft.Reporting.WinForms.ReportDataSource("DBDataSet_下单表", ds.Tables[0]));
            r.RefreshReport();
        }

看到没,前提条件DBDataSet_下单表我是随手建立的,建立好了后,随便你怎么滴,把他删除就行了,FormLoad事件也不要加载,资源里面把数据源一并剔除。

之所以要DataSet是因为控件原因,巨阵工具是要数据源的,才能阶梯性显示

你可以不管他怎么设置dataset,但是如果要更新DATASET方式去更新字段,那表里面字段名要跟新的表字段名最起码要统一,如果不统一也没关系,只是麻烦点,你要传递参数。

设置参数的时候要允许他为空,报表区域要去关联参数

如上图,我是把路径值写在商标字段里,图片Value可以是路径名,加载报表是后就自动加载图片去了。

做好这些设计工作过后,把项目里面已经设计好的报表文件,全部复制到启动目录bin里面,然后用相对路径方法加载他,多余的数据源啊,数据库文件一并可以删除,完全用代码来操作

回答2:

水晶报表肯定是绑定DataSet或者DataTable数据缓存,不明白你为何用DataReader。如果一定要用DataReader可以把结果放在一张表里,然后再绑定到水晶报表。

回答3:

c#水晶报表用过,感觉操作太复杂,对新手来说有点勉强,现在改用finereport,它操作比较简单,适合新手用的。

回答4:

DataReader 行不行 没研究过, 我都是用Dataset 做的 把表字段 直接拖报表里面 setReportSource 绑定数据集 就可以了!